An alternative approach to `EnumAdapters2` that does not directly call to GDI driver and therefore does not require GDI driver functions to be expanded. The implementation now lives in `sysparams.c` to make it closer to win32u caches it accesses. It still uses `OpenAdapterFromLuid` internally because that's where adapter handles are actually assigned and to make sure returned handles are usable with other functions that rely on GDI driver being aware of what the handle represents to be able to function correctly (like `QueryVideoMemoryInfo`).
See !4791 for some background and why this version might be preferable over the one submitted there.
-- v6: win32u: Implement NtGdiDdDDIEnumAdapters2. win32u: Maintain a list of GPUs in cache. gdi32: Add D3DKMTEnumAdapters2() stub. gdi32/tests: Add D3DKMTEnumAdapters2 tests.
From: Krzysztof Bogacki krzysztof.bogacki@leancode.pl
Signed-off-by: Krzysztof Bogacki krzysztof.bogacki@leancode.pl --- dlls/gdi32/tests/driver.c | 54 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+)
diff --git a/dlls/gdi32/tests/driver.c b/dlls/gdi32/tests/driver.c index 0c976a87c62..f4967f023be 100644 --- a/dlls/gdi32/tests/driver.c +++ b/dlls/gdi32/tests/driver.c @@ -45,6 +45,7 @@ static NTSTATUS (WINAPI *pD3DKMTCheckOcclusion)(const D3DKMT_CHECKOCCLUSION *); static NTSTATUS (WINAPI *pD3DKMTCheckVidPnExclusiveOwnership)(const D3DKMT_CHECKVIDPNEXCLUSIVEOWNERSHIP *); static NTSTATUS (WINAPI *pD3DKMTCloseAdapter)(const D3DKMT_CLOSEADAPTER *); static NTSTATUS (WINAPI *pD3DKMTCreateDevice)(D3DKMT_CREATEDEVICE *); +static NTSTATUS (WINAPI *pD3DKMTEnumAdapters2)(D3DKMT_ENUMADAPTERS2 *); static NTSTATUS (WINAPI *pD3DKMTDestroyDevice)(const D3DKMT_DESTROYDEVICE *); static NTSTATUS (WINAPI *pD3DKMTOpenAdapterFromDeviceName)(D3DKMT_OPENADAPTERFROMDEVICENAME *); static NTSTATUS (WINAPI *pD3DKMTOpenAdapterFromGdiDisplayName)(D3DKMT_OPENADAPTERFROMGDIDISPLAYNAME *); @@ -189,6 +190,57 @@ static void test_D3DKMTOpenAdapterFromHdc(void) } }
+static void test_D3DKMTEnumAdapters2(void) +{ + D3DKMT_ENUMADAPTERS2 enum_adapters_2_desc = {0}; + D3DKMT_CLOSEADAPTER close_adapter_desc; + NTSTATUS status; + UINT i; + + if (!pD3DKMTEnumAdapters2 || pD3DKMTEnumAdapters2(&enum_adapters_2_desc) == STATUS_PROCEDURE_NOT_FOUND) + { + skip("D3DKMTEnumAdapters2() is unavailable.\n"); + return; + } + + /* Invalid parameters */ + status = pD3DKMTEnumAdapters2(NULL); + ok(status == STATUS_INVALID_PARAMETER, "Got unexpected return code %#lx.\n", status); + + /* Query the array to allocate */ + status = pD3DKMTEnumAdapters2(&enum_adapters_2_desc); + ok(status == STATUS_SUCCESS, "Got unexpected return code %#lx.\n", status); + ok(enum_adapters_2_desc.NumAdapters == 32 /* win10 and older */ || enum_adapters_2_desc.NumAdapters == 34 /* win11 */, + "Got unexpected value %lu.\n", enum_adapters_2_desc.NumAdapters); + + /* Allocate the array */ + enum_adapters_2_desc.pAdapters = calloc(enum_adapters_2_desc.NumAdapters, sizeof(D3DKMT_ADAPTERINFO)); + ok(!!enum_adapters_2_desc.pAdapters, "Expect not null.\n"); + + /* Enumerate adapters */ + status = pD3DKMTEnumAdapters2(&enum_adapters_2_desc); + ok(status == STATUS_SUCCESS, "Got unexpected return code %#lx.\n", status); + ok(enum_adapters_2_desc.NumAdapters, "Expect not zero.\n"); + + for (i = 0; i < enum_adapters_2_desc.NumAdapters; ++i) + { + ok(enum_adapters_2_desc.pAdapters[i].hAdapter, "Expect not null.\n"); + ok(enum_adapters_2_desc.pAdapters[i].AdapterLuid.LowPart || enum_adapters_2_desc.pAdapters[i].AdapterLuid.HighPart, + "Expect LUID not zero.\n"); + + close_adapter_desc.hAdapter = enum_adapters_2_desc.pAdapters[i].hAdapter; + status = pD3DKMTCloseAdapter(&close_adapter_desc); + ok(status == STATUS_SUCCESS, "Got unexpected return code %#lx.\n", status); + } + + /* Check for insufficient buffer */ + enum_adapters_2_desc.NumAdapters = 0; + status = pD3DKMTEnumAdapters2(&enum_adapters_2_desc); + ok(status == STATUS_BUFFER_TOO_SMALL, "Got unexpected return code %#lx.\n", status); + + free(enum_adapters_2_desc.pAdapters); +} + static void test_D3DKMTCloseAdapter(void) { D3DKMT_CLOSEADAPTER close_adapter_desc; @@ -1077,6 +1129,7 @@ START_TEST(driver) pD3DKMTCloseAdapter = (void *)GetProcAddress(gdi32, "D3DKMTCloseAdapter"); pD3DKMTCreateDevice = (void *)GetProcAddress(gdi32, "D3DKMTCreateDevice"); pD3DKMTDestroyDevice = (void *)GetProcAddress(gdi32, "D3DKMTDestroyDevice"); + pD3DKMTEnumAdapters2 = (void *)GetProcAddress(gdi32, "D3DKMTEnumAdapters2"); pD3DKMTOpenAdapterFromDeviceName = (void *)GetProcAddress(gdi32, "D3DKMTOpenAdapterFromDeviceName"); pD3DKMTOpenAdapterFromGdiDisplayName = (void *)GetProcAddress(gdi32, "D3DKMTOpenAdapterFromGdiDisplayName"); pD3DKMTOpenAdapterFromHdc = (void *)GetProcAddress(gdi32, "D3DKMTOpenAdapterFromHdc"); @@ -1088,6 +1141,7 @@ START_TEST(driver)
test_D3DKMTOpenAdapterFromGdiDisplayName(); test_D3DKMTOpenAdapterFromHdc(); + test_D3DKMTEnumAdapters2(); test_D3DKMTCloseAdapter(); test_D3DKMTCreateDevice(); test_D3DKMTDestroyDevice();
From: Krzysztof Bogacki krzysztof.bogacki@leancode.pl
Signed-off-by: Krzysztof Bogacki krzysztof.bogacki@leancode.pl --- dlls/gdi32/gdi32.spec | 1 + dlls/win32u/main.c | 5 + dlls/win32u/sysparams.c | 9 + dlls/win32u/win32syscalls.h | 1466 ++++++++++++++++++----------------- dlls/win32u/win32u.spec | 2 +- dlls/wow64win/gdi.c | 22 + include/ddk/d3dkmthk.h | 1 + include/ntgdi.h | 1 + 8 files changed, 774 insertions(+), 733 deletions(-)
diff --git a/dlls/gdi32/gdi32.spec b/dlls/gdi32/gdi32.spec index 0ad47111eaa..69ad9b2d60a 100644 --- a/dlls/gdi32/gdi32.spec +++ b/dlls/gdi32/gdi32.spec @@ -79,6 +79,7 @@ @ stdcall D3DKMTCreateDevice(ptr) win32u.NtGdiDdDDICreateDevice @ stdcall D3DKMTDestroyDCFromMemory(ptr) win32u.NtGdiDdDDIDestroyDCFromMemory @ stdcall D3DKMTDestroyDevice(ptr) win32u.NtGdiDdDDIDestroyDevice +@ stdcall D3DKMTEnumAdapters2(ptr) win32u.NtGdiDdDDIEnumAdapters2 @ stdcall D3DKMTEscape(ptr) win32u.NtGdiDdDDIEscape @ stdcall D3DKMTOpenAdapterFromDeviceName(ptr) win32u.NtGdiDdDDIOpenAdapterFromDeviceName @ stdcall D3DKMTOpenAdapterFromGdiDisplayName(ptr) diff --git a/dlls/win32u/main.c b/dlls/win32u/main.c index 2dc66e5df11..3f910c214ed 100644 --- a/dlls/win32u/main.c +++ b/dlls/win32u/main.c @@ -236,6 +236,11 @@ NTSTATUS SYSCALL_API NtGdiDdDDIDestroyDevice( const D3DKMT_DESTROYDEVICE *desc ) __ASM_SYSCALL_FUNC( __id_NtGdiDdDDIDestroyDevice ); }
+NTSTATUS SYSCALL_API NtGdiDdDDIEnumAdapters2( D3DKMT_ENUMADAPTERS2 *desc ) +{ + __ASM_SYSCALL_FUNC( __id_NtGdiDdDDIEnumAdapters2 ); +} + NTSTATUS SYSCALL_API NtGdiDdDDIEscape( const D3DKMT_ESCAPE *desc ) { __ASM_SYSCALL_FUNC( __id_NtGdiDdDDIEscape ); diff --git a/dlls/win32u/sysparams.c b/dlls/win32u/sysparams.c index e2c5b10da9e..c494a95aff9 100644 --- a/dlls/win32u/sysparams.c +++ b/dlls/win32u/sysparams.c @@ -6574,3 +6574,12 @@ NTSTATUS WINAPI NtUserDisplayConfigGetDeviceInfo( DISPLAYCONFIG_DEVICE_INFO_HEAD return STATUS_INVALID_PARAMETER; } } + +/****************************************************************************** + * NtGdiDdDDIEnumAdapters2 (win32u.@) + */ +NTSTATUS WINAPI NtGdiDdDDIEnumAdapters2( D3DKMT_ENUMADAPTERS2 *desc ) +{ + FIXME(" (%p): stub\n", desc ); + return STATUS_PROCEDURE_NOT_FOUND; +} diff --git a/dlls/win32u/win32syscalls.h b/dlls/win32u/win32syscalls.h index 543583356d9..c8a5ee9367b 100644 --- a/dlls/win32u/win32syscalls.h +++ b/dlls/win32u/win32syscalls.h @@ -36,372 +36,373 @@ SYSCALL_ENTRY( 0x0020, NtGdiDdDDICreateDevice, 4 ) \ SYSCALL_ENTRY( 0x0021, NtGdiDdDDIDestroyDCFromMemory, 4 ) \ SYSCALL_ENTRY( 0x0022, NtGdiDdDDIDestroyDevice, 4 ) \ - SYSCALL_ENTRY( 0x0023, NtGdiDdDDIEscape, 4 ) \ - SYSCALL_ENTRY( 0x0024, NtGdiDdDDIOpenAdapterFromDeviceName, 4 ) \ - SYSCALL_ENTRY( 0x0025, NtGdiDdDDIOpenAdapterFromHdc, 4 ) \ - SYSCALL_ENTRY( 0x0026, NtGdiDdDDIOpenAdapterFromLuid, 4 ) \ - SYSCALL_ENTRY( 0x0027, NtGdiDdDDIQueryAdapterInfo, 4 ) \ - SYSCALL_ENTRY( 0x0028, NtGdiDdDDIQueryStatistics, 4 ) \ - SYSCALL_ENTRY( 0x0029, NtGdiDdDDIQueryVideoMemoryInfo, 4 ) \ - SYSCALL_ENTRY( 0x002a, NtGdiDdDDISetQueuedLimit, 4 ) \ - SYSCALL_ENTRY( 0x002b, NtGdiDdDDISetVidPnSourceOwner, 4 ) \ - SYSCALL_ENTRY( 0x002c, NtGdiDeleteClientObj, 4 ) \ - SYSCALL_ENTRY( 0x002d, NtGdiDeleteObjectApp, 4 ) \ - SYSCALL_ENTRY( 0x002e, NtGdiDescribePixelFormat, 16 ) \ - SYSCALL_ENTRY( 0x002f, NtGdiDoPalette, 24 ) \ - SYSCALL_ENTRY( 0x0030, NtGdiDrawStream, 12 ) \ - SYSCALL_ENTRY( 0x0031, NtGdiEllipse, 20 ) \ - SYSCALL_ENTRY( 0x0032, NtGdiEndDoc, 4 ) \ - SYSCALL_ENTRY( 0x0033, NtGdiEndPage, 4 ) \ - SYSCALL_ENTRY( 0x0034, NtGdiEndPath, 4 ) \ - SYSCALL_ENTRY( 0x0035, NtGdiEnumFonts, 32 ) \ - SYSCALL_ENTRY( 0x0036, NtGdiEqualRgn, 8 ) \ - SYSCALL_ENTRY( 0x0037, NtGdiExcludeClipRect, 20 ) \ - SYSCALL_ENTRY( 0x0038, NtGdiExtCreatePen, 44 ) \ - SYSCALL_ENTRY( 0x0039, NtGdiExtCreateRegion, 12 ) \ - SYSCALL_ENTRY( 0x003a, NtGdiExtEscape, 32 ) \ - SYSCALL_ENTRY( 0x003b, NtGdiExtFloodFill, 20 ) \ - SYSCALL_ENTRY( 0x003c, NtGdiExtGetObjectW, 12 ) \ - SYSCALL_ENTRY( 0x003d, NtGdiExtSelectClipRgn, 12 ) \ - SYSCALL_ENTRY( 0x003e, NtGdiExtTextOutW, 36 ) \ - SYSCALL_ENTRY( 0x003f, NtGdiFillPath, 4 ) \ - SYSCALL_ENTRY( 0x0040, NtGdiFillRgn, 12 ) \ - SYSCALL_ENTRY( 0x0041, NtGdiFlattenPath, 4 ) \ - SYSCALL_ENTRY( 0x0042, NtGdiFlush, 0 ) \ - SYSCALL_ENTRY( 0x0043, NtGdiFontIsLinked, 4 ) \ - SYSCALL_ENTRY( 0x0044, NtGdiFrameRgn, 20 ) \ - SYSCALL_ENTRY( 0x0045, NtGdiGetAndSetDCDword, 16 ) \ - SYSCALL_ENTRY( 0x0046, NtGdiGetAppClipBox, 8 ) \ - SYSCALL_ENTRY( 0x0047, NtGdiGetBitmapBits, 12 ) \ - SYSCALL_ENTRY( 0x0048, NtGdiGetBitmapDimension, 8 ) \ - SYSCALL_ENTRY( 0x0049, NtGdiGetBoundsRect, 12 ) \ - SYSCALL_ENTRY( 0x004a, NtGdiGetCharABCWidthsW, 24 ) \ - SYSCALL_ENTRY( 0x004b, NtGdiGetCharWidthInfo, 8 ) \ - SYSCALL_ENTRY( 0x004c, NtGdiGetCharWidthW, 24 ) \ - SYSCALL_ENTRY( 0x004d, NtGdiGetColorAdjustment, 8 ) \ - SYSCALL_ENTRY( 0x004e, NtGdiGetDCDword, 12 ) \ - SYSCALL_ENTRY( 0x004f, NtGdiGetDCObject, 8 ) \ - SYSCALL_ENTRY( 0x0050, NtGdiGetDCPoint, 12 ) \ - SYSCALL_ENTRY( 0x0051, NtGdiGetDIBitsInternal, 36 ) \ - SYSCALL_ENTRY( 0x0052, NtGdiGetDeviceCaps, 8 ) \ - SYSCALL_ENTRY( 0x0053, NtGdiGetDeviceGammaRamp, 8 ) \ - SYSCALL_ENTRY( 0x0054, NtGdiGetFontData, 20 ) \ - SYSCALL_ENTRY( 0x0055, NtGdiGetFontFileData, 20 ) \ - SYSCALL_ENTRY( 0x0056, NtGdiGetFontFileInfo, 20 ) \ - SYSCALL_ENTRY( 0x0057, NtGdiGetFontUnicodeRanges, 8 ) \ - SYSCALL_ENTRY( 0x0058, NtGdiGetGlyphIndicesW, 20 ) \ - SYSCALL_ENTRY( 0x0059, NtGdiGetGlyphOutline, 32 ) \ - SYSCALL_ENTRY( 0x005a, NtGdiGetKerningPairs, 12 ) \ - SYSCALL_ENTRY( 0x005b, NtGdiGetNearestColor, 8 ) \ - SYSCALL_ENTRY( 0x005c, NtGdiGetNearestPaletteIndex, 8 ) \ - SYSCALL_ENTRY( 0x005d, NtGdiGetOutlineTextMetricsInternalW, 16 ) \ - SYSCALL_ENTRY( 0x005e, NtGdiGetPath, 16 ) \ - SYSCALL_ENTRY( 0x005f, NtGdiGetPixel, 12 ) \ - SYSCALL_ENTRY( 0x0060, NtGdiGetRandomRgn, 12 ) \ - SYSCALL_ENTRY( 0x0061, NtGdiGetRasterizerCaps, 8 ) \ - SYSCALL_ENTRY( 0x0062, NtGdiGetRealizationInfo, 8 ) \ - SYSCALL_ENTRY( 0x0063, NtGdiGetRegionData, 12 ) \ - SYSCALL_ENTRY( 0x0064, NtGdiGetRgnBox, 8 ) \ - SYSCALL_ENTRY( 0x0065, NtGdiGetSpoolMessage, 16 ) \ - SYSCALL_ENTRY( 0x0066, NtGdiGetSystemPaletteUse, 4 ) \ - SYSCALL_ENTRY( 0x0067, NtGdiGetTextCharsetInfo, 12 ) \ - SYSCALL_ENTRY( 0x0068, NtGdiGetTextExtentExW, 32 ) \ - SYSCALL_ENTRY( 0x0069, NtGdiGetTextFaceW, 16 ) \ - SYSCALL_ENTRY( 0x006a, NtGdiGetTextMetricsW, 12 ) \ - SYSCALL_ENTRY( 0x006b, NtGdiGetTransform, 12 ) \ - SYSCALL_ENTRY( 0x006c, NtGdiGradientFill, 24 ) \ - SYSCALL_ENTRY( 0x006d, NtGdiHfontCreate, 20 ) \ - SYSCALL_ENTRY( 0x006e, NtGdiIcmBrushInfo, 32 ) \ - SYSCALL_ENTRY( 0x006f, NtGdiInitSpool, 0 ) \ - SYSCALL_ENTRY( 0x0070, NtGdiIntersectClipRect, 20 ) \ - SYSCALL_ENTRY( 0x0071, NtGdiInvertRgn, 8 ) \ - SYSCALL_ENTRY( 0x0072, NtGdiLineTo, 12 ) \ - SYSCALL_ENTRY( 0x0073, NtGdiMaskBlt, 52 ) \ - SYSCALL_ENTRY( 0x0074, NtGdiModifyWorldTransform, 12 ) \ - SYSCALL_ENTRY( 0x0075, NtGdiMoveTo, 16 ) \ - SYSCALL_ENTRY( 0x0076, NtGdiOffsetClipRgn, 12 ) \ - SYSCALL_ENTRY( 0x0077, NtGdiOffsetRgn, 12 ) \ - SYSCALL_ENTRY( 0x0078, NtGdiOpenDCW, 32 ) \ - SYSCALL_ENTRY( 0x0079, NtGdiPatBlt, 24 ) \ - SYSCALL_ENTRY( 0x007a, NtGdiPathToRegion, 4 ) \ - SYSCALL_ENTRY( 0x007b, NtGdiPlgBlt, 44 ) \ - SYSCALL_ENTRY( 0x007c, NtGdiPolyDraw, 16 ) \ - SYSCALL_ENTRY( 0x007d, NtGdiPolyPolyDraw, 20 ) \ - SYSCALL_ENTRY( 0x007e, NtGdiPtInRegion, 12 ) \ - SYSCALL_ENTRY( 0x007f, NtGdiPtVisible, 12 ) \ - SYSCALL_ENTRY( 0x0080, NtGdiRectInRegion, 8 ) \ - SYSCALL_ENTRY( 0x0081, NtGdiRectVisible, 8 ) \ - SYSCALL_ENTRY( 0x0082, NtGdiRectangle, 20 ) \ - SYSCALL_ENTRY( 0x0083, NtGdiRemoveFontMemResourceEx, 4 ) \ - SYSCALL_ENTRY( 0x0084, NtGdiRemoveFontResourceW, 24 ) \ - SYSCALL_ENTRY( 0x0085, NtGdiResetDC, 20 ) \ - SYSCALL_ENTRY( 0x0086, NtGdiResizePalette, 8 ) \ - SYSCALL_ENTRY( 0x0087, NtGdiRestoreDC, 8 ) \ - SYSCALL_ENTRY( 0x0088, NtGdiRoundRect, 28 ) \ - SYSCALL_ENTRY( 0x0089, NtGdiSaveDC, 4 ) \ - SYSCALL_ENTRY( 0x008a, NtGdiScaleViewportExtEx, 24 ) \ - SYSCALL_ENTRY( 0x008b, NtGdiScaleWindowExtEx, 24 ) \ - SYSCALL_ENTRY( 0x008c, NtGdiSelectBitmap, 8 ) \ - SYSCALL_ENTRY( 0x008d, NtGdiSelectBrush, 8 ) \ - SYSCALL_ENTRY( 0x008e, NtGdiSelectClipPath, 8 ) \ - SYSCALL_ENTRY( 0x008f, NtGdiSelectFont, 8 ) \ - SYSCALL_ENTRY( 0x0090, NtGdiSelectPen, 8 ) \ - SYSCALL_ENTRY( 0x0091, NtGdiSetBitmapBits, 12 ) \ - SYSCALL_ENTRY( 0x0092, NtGdiSetBitmapDimension, 16 ) \ - SYSCALL_ENTRY( 0x0093, NtGdiSetBoundsRect, 12 ) \ - SYSCALL_ENTRY( 0x0094, NtGdiSetBrushOrg, 16 ) \ - SYSCALL_ENTRY( 0x0095, NtGdiSetColorAdjustment, 8 ) \ - SYSCALL_ENTRY( 0x0096, NtGdiSetDIBitsToDeviceInternal, 64 ) \ - SYSCALL_ENTRY( 0x0097, NtGdiSetDeviceGammaRamp, 8 ) \ - SYSCALL_ENTRY( 0x0098, NtGdiSetLayout, 12 ) \ - SYSCALL_ENTRY( 0x0099, NtGdiSetMagicColors, 12 ) \ - SYSCALL_ENTRY( 0x009a, NtGdiSetMetaRgn, 4 ) \ - SYSCALL_ENTRY( 0x009b, NtGdiSetPixel, 16 ) \ - SYSCALL_ENTRY( 0x009c, NtGdiSetPixelFormat, 8 ) \ - SYSCALL_ENTRY( 0x009d, NtGdiSetRectRgn, 20 ) \ - SYSCALL_ENTRY( 0x009e, NtGdiSetSystemPaletteUse, 8 ) \ - SYSCALL_ENTRY( 0x009f, NtGdiSetTextJustification, 12 ) \ - SYSCALL_ENTRY( 0x00a0, NtGdiSetVirtualResolution, 20 ) \ - SYSCALL_ENTRY( 0x00a1, NtGdiStartDoc, 16 ) \ - SYSCALL_ENTRY( 0x00a2, NtGdiStartPage, 4 ) \ - SYSCALL_ENTRY( 0x00a3, NtGdiStretchBlt, 48 ) \ - SYSCALL_ENTRY( 0x00a4, NtGdiStretchDIBitsInternal, 64 ) \ - SYSCALL_ENTRY( 0x00a5, NtGdiStrokeAndFillPath, 4 ) \ - SYSCALL_ENTRY( 0x00a6, NtGdiStrokePath, 4 ) \ - SYSCALL_ENTRY( 0x00a7, NtGdiSwapBuffers, 4 ) \ - SYSCALL_ENTRY( 0x00a8, NtGdiTransformPoints, 20 ) \ - SYSCALL_ENTRY( 0x00a9, NtGdiTransparentBlt, 44 ) \ - SYSCALL_ENTRY( 0x00aa, NtGdiUnrealizeObject, 4 ) \ - SYSCALL_ENTRY( 0x00ab, NtGdiUpdateColors, 4 ) \ - SYSCALL_ENTRY( 0x00ac, NtGdiWidenPath, 4 ) \ - SYSCALL_ENTRY( 0x00ad, NtUserActivateKeyboardLayout, 8 ) \ - SYSCALL_ENTRY( 0x00ae, NtUserAddClipboardFormatListener, 4 ) \ - SYSCALL_ENTRY( 0x00af, NtUserAssociateInputContext, 12 ) \ - SYSCALL_ENTRY( 0x00b0, NtUserAttachThreadInput, 12 ) \ - SYSCALL_ENTRY( 0x00b1, NtUserBeginPaint, 8 ) \ - SYSCALL_ENTRY( 0x00b2, NtUserBuildHimcList, 16 ) \ - SYSCALL_ENTRY( 0x00b3, NtUserBuildHwndList, 32 ) \ - SYSCALL_ENTRY( 0x00b4, NtUserCallHwnd, 8 ) \ - SYSCALL_ENTRY( 0x00b5, NtUserCallHwndParam, 12 ) \ - SYSCALL_ENTRY( 0x00b6, NtUserCallMsgFilter, 8 ) \ - SYSCALL_ENTRY( 0x00b7, NtUserCallNextHookEx, 16 ) \ - SYSCALL_ENTRY( 0x00b8, NtUserCallNoParam, 4 ) \ - SYSCALL_ENTRY( 0x00b9, NtUserCallOneParam, 8 ) \ - SYSCALL_ENTRY( 0x00ba, NtUserCallTwoParam, 12 ) \ - SYSCALL_ENTRY( 0x00bb, NtUserChangeClipboardChain, 8 ) \ - SYSCALL_ENTRY( 0x00bc, NtUserChangeDisplaySettings, 20 ) \ - SYSCALL_ENTRY( 0x00bd, NtUserCheckMenuItem, 12 ) \ - SYSCALL_ENTRY( 0x00be, NtUserChildWindowFromPointEx, 16 ) \ - SYSCALL_ENTRY( 0x00bf, NtUserClipCursor, 4 ) \ - SYSCALL_ENTRY( 0x00c0, NtUserCloseClipboard, 0 ) \ - SYSCALL_ENTRY( 0x00c1, NtUserCloseDesktop, 4 ) \ - SYSCALL_ENTRY( 0x00c2, NtUserCloseWindowStation, 4 ) \ - SYSCALL_ENTRY( 0x00c3, NtUserCopyAcceleratorTable, 12 ) \ - SYSCALL_ENTRY( 0x00c4, NtUserCountClipboardFormats, 0 ) \ - SYSCALL_ENTRY( 0x00c5, NtUserCreateAcceleratorTable, 8 ) \ - SYSCALL_ENTRY( 0x00c6, NtUserCreateCaret, 16 ) \ - SYSCALL_ENTRY( 0x00c7, NtUserCreateDesktopEx, 24 ) \ - SYSCALL_ENTRY( 0x00c8, NtUserCreateInputContext, 4 ) \ - SYSCALL_ENTRY( 0x00c9, NtUserCreateWindowEx, 68 ) \ - SYSCALL_ENTRY( 0x00ca, NtUserCreateWindowStation, 28 ) \ - SYSCALL_ENTRY( 0x00cb, NtUserDeferWindowPosAndBand, 40 ) \ - SYSCALL_ENTRY( 0x00cc, NtUserDeleteMenu, 12 ) \ - SYSCALL_ENTRY( 0x00cd, NtUserDestroyAcceleratorTable, 4 ) \ - SYSCALL_ENTRY( 0x00ce, NtUserDestroyCursor, 8 ) \ - SYSCALL_ENTRY( 0x00cf, NtUserDestroyInputContext, 4 ) \ - SYSCALL_ENTRY( 0x00d0, NtUserDestroyMenu, 4 ) \ - SYSCALL_ENTRY( 0x00d1, NtUserDestroyWindow, 4 ) \ - SYSCALL_ENTRY( 0x00d2, NtUserDisableThreadIme, 4 ) \ - SYSCALL_ENTRY( 0x00d3, NtUserDispatchMessage, 4 ) \ - SYSCALL_ENTRY( 0x00d4, NtUserDisplayConfigGetDeviceInfo, 4 ) \ - SYSCALL_ENTRY( 0x00d5, NtUserDragDetect, 12 ) \ - SYSCALL_ENTRY( 0x00d6, NtUserDragObject, 20 ) \ - SYSCALL_ENTRY( 0x00d7, NtUserDrawCaptionTemp, 28 ) \ - SYSCALL_ENTRY( 0x00d8, NtUserDrawIconEx, 36 ) \ - SYSCALL_ENTRY( 0x00d9, NtUserDrawMenuBarTemp, 20 ) \ - SYSCALL_ENTRY( 0x00da, NtUserEmptyClipboard, 0 ) \ - SYSCALL_ENTRY( 0x00db, NtUserEnableMenuItem, 12 ) \ - SYSCALL_ENTRY( 0x00dc, NtUserEnableMouseInPointer, 4 ) \ - SYSCALL_ENTRY( 0x00dd, NtUserEnableScrollBar, 12 ) \ - SYSCALL_ENTRY( 0x00de, NtUserEndDeferWindowPosEx, 8 ) \ - SYSCALL_ENTRY( 0x00df, NtUserEndMenu, 0 ) \ - SYSCALL_ENTRY( 0x00e0, NtUserEndPaint, 8 ) \ - SYSCALL_ENTRY( 0x00e1, NtUserEnumDisplayDevices, 16 ) \ - SYSCALL_ENTRY( 0x00e2, NtUserEnumDisplayMonitors, 16 ) \ - SYSCALL_ENTRY( 0x00e3, NtUserEnumDisplaySettings, 16 ) \ - SYSCALL_ENTRY( 0x00e4, NtUserExcludeUpdateRgn, 8 ) \ - SYSCALL_ENTRY( 0x00e5, NtUserFindExistingCursorIcon, 12 ) \ - SYSCALL_ENTRY( 0x00e6, NtUserFindWindowEx, 20 ) \ - SYSCALL_ENTRY( 0x00e7, NtUserFlashWindowEx, 4 ) \ - SYSCALL_ENTRY( 0x00e8, NtUserGetAncestor, 8 ) \ - SYSCALL_ENTRY( 0x00e9, NtUserGetAsyncKeyState, 4 ) \ - SYSCALL_ENTRY( 0x00ea, NtUserGetAtomName, 8 ) \ - SYSCALL_ENTRY( 0x00eb, NtUserGetCaretBlinkTime, 0 ) \ - SYSCALL_ENTRY( 0x00ec, NtUserGetCaretPos, 4 ) \ - SYSCALL_ENTRY( 0x00ed, NtUserGetClassInfoEx, 20 ) \ - SYSCALL_ENTRY( 0x00ee, NtUserGetClassName, 12 ) \ - SYSCALL_ENTRY( 0x00ef, NtUserGetClipboardData, 8 ) \ - SYSCALL_ENTRY( 0x00f0, NtUserGetClipboardFormatName, 12 ) \ - SYSCALL_ENTRY( 0x00f1, NtUserGetClipboardOwner, 0 ) \ - SYSCALL_ENTRY( 0x00f2, NtUserGetClipboardSequenceNumber, 0 ) \ - SYSCALL_ENTRY( 0x00f3, NtUserGetClipboardViewer, 0 ) \ - SYSCALL_ENTRY( 0x00f4, NtUserGetCursor, 0 ) \ - SYSCALL_ENTRY( 0x00f5, NtUserGetCursorFrameInfo, 16 ) \ - SYSCALL_ENTRY( 0x00f6, NtUserGetCursorInfo, 4 ) \ - SYSCALL_ENTRY( 0x00f7, NtUserGetDC, 4 ) \ - SYSCALL_ENTRY( 0x00f8, NtUserGetDCEx, 12 ) \ - SYSCALL_ENTRY( 0x00f9, NtUserGetDisplayConfigBufferSizes, 12 ) \ - SYSCALL_ENTRY( 0x00fa, NtUserGetDoubleClickTime, 0 ) \ - SYSCALL_ENTRY( 0x00fb, NtUserGetDpiForMonitor, 16 ) \ - SYSCALL_ENTRY( 0x00fc, NtUserGetForegroundWindow, 0 ) \ - SYSCALL_ENTRY( 0x00fd, NtUserGetGUIThreadInfo, 8 ) \ - SYSCALL_ENTRY( 0x00fe, NtUserGetIconInfo, 24 ) \ - SYSCALL_ENTRY( 0x00ff, NtUserGetIconSize, 16 ) \ - SYSCALL_ENTRY( 0x0100, NtUserGetInternalWindowPos, 12 ) \ - SYSCALL_ENTRY( 0x0101, NtUserGetKeyNameText, 12 ) \ - SYSCALL_ENTRY( 0x0102, NtUserGetKeyState, 4 ) \ - SYSCALL_ENTRY( 0x0103, NtUserGetKeyboardLayout, 4 ) \ - SYSCALL_ENTRY( 0x0104, NtUserGetKeyboardLayoutList, 8 ) \ - SYSCALL_ENTRY( 0x0105, NtUserGetKeyboardLayoutName, 4 ) \ - SYSCALL_ENTRY( 0x0106, NtUserGetKeyboardState, 4 ) \ - SYSCALL_ENTRY( 0x0107, NtUserGetLayeredWindowAttributes, 16 ) \ - SYSCALL_ENTRY( 0x0108, NtUserGetMenuBarInfo, 16 ) \ - SYSCALL_ENTRY( 0x0109, NtUserGetMenuItemRect, 16 ) \ - SYSCALL_ENTRY( 0x010a, NtUserGetMessage, 16 ) \ - SYSCALL_ENTRY( 0x010b, NtUserGetMouseMovePointsEx, 20 ) \ - SYSCALL_ENTRY( 0x010c, NtUserGetObjectInformation, 20 ) \ - SYSCALL_ENTRY( 0x010d, NtUserGetOpenClipboardWindow, 0 ) \ - SYSCALL_ENTRY( 0x010e, NtUserGetPointerInfoList, 32 ) \ - SYSCALL_ENTRY( 0x010f, NtUserGetPriorityClipboardFormat, 8 ) \ - SYSCALL_ENTRY( 0x0110, NtUserGetProcessDpiAwarenessContext, 4 ) \ - SYSCALL_ENTRY( 0x0111, NtUserGetProcessWindowStation, 0 ) \ - SYSCALL_ENTRY( 0x0112, NtUserGetProp, 8 ) \ - SYSCALL_ENTRY( 0x0113, NtUserGetQueueStatus, 4 ) \ - SYSCALL_ENTRY( 0x0114, NtUserGetRawInputBuffer, 12 ) \ - SYSCALL_ENTRY( 0x0115, NtUserGetRawInputData, 20 ) \ - SYSCALL_ENTRY( 0x0116, NtUserGetRawInputDeviceInfo, 16 ) \ - SYSCALL_ENTRY( 0x0117, NtUserGetRawInputDeviceList, 12 ) \ - SYSCALL_ENTRY( 0x0118, NtUserGetRegisteredRawInputDevices, 12 ) \ - SYSCALL_ENTRY( 0x0119, NtUserGetScrollBarInfo, 12 ) \ - SYSCALL_ENTRY( 0x011a, NtUserGetSystemDpiForProcess, 4 ) \ - SYSCALL_ENTRY( 0x011b, NtUserGetSystemMenu, 8 ) \ - SYSCALL_ENTRY( 0x011c, NtUserGetThreadDesktop, 4 ) \ - SYSCALL_ENTRY( 0x011d, NtUserGetTitleBarInfo, 8 ) \ - SYSCALL_ENTRY( 0x011e, NtUserGetUpdateRect, 12 ) \ - SYSCALL_ENTRY( 0x011f, NtUserGetUpdateRgn, 12 ) \ - SYSCALL_ENTRY( 0x0120, NtUserGetUpdatedClipboardFormats, 12 ) \ - SYSCALL_ENTRY( 0x0121, NtUserGetWindowDC, 4 ) \ - SYSCALL_ENTRY( 0x0122, NtUserGetWindowPlacement, 8 ) \ - SYSCALL_ENTRY( 0x0123, NtUserGetWindowRgnEx, 12 ) \ - SYSCALL_ENTRY( 0x0124, NtUserHideCaret, 4 ) \ - SYSCALL_ENTRY( 0x0125, NtUserHiliteMenuItem, 16 ) \ - SYSCALL_ENTRY( 0x0126, NtUserInitializeClientPfnArrays, 16 ) \ - SYSCALL_ENTRY( 0x0127, NtUserInternalGetWindowIcon, 8 ) \ - SYSCALL_ENTRY( 0x0128, NtUserInternalGetWindowText, 12 ) \ - SYSCALL_ENTRY( 0x0129, NtUserInvalidateRect, 12 ) \ - SYSCALL_ENTRY( 0x012a, NtUserInvalidateRgn, 12 ) \ - SYSCALL_ENTRY( 0x012b, NtUserIsClipboardFormatAvailable, 4 ) \ - SYSCALL_ENTRY( 0x012c, NtUserIsMouseInPointerEnabled, 0 ) \ - SYSCALL_ENTRY( 0x012d, NtUserKillTimer, 8 ) \ - SYSCALL_ENTRY( 0x012e, NtUserLockWindowUpdate, 4 ) \ - SYSCALL_ENTRY( 0x012f, NtUserLogicalToPerMonitorDPIPhysicalPoint, 8 ) \ - SYSCALL_ENTRY( 0x0130, NtUserMapVirtualKeyEx, 12 ) \ - SYSCALL_ENTRY( 0x0131, NtUserMenuItemFromPoint, 16 ) \ - SYSCALL_ENTRY( 0x0132, NtUserMessageCall, 28 ) \ - SYSCALL_ENTRY( 0x0133, NtUserMoveWindow, 24 ) \ - SYSCALL_ENTRY( 0x0134, NtUserMsgWaitForMultipleObjectsEx, 20 ) \ - SYSCALL_ENTRY( 0x0135, NtUserNotifyIMEStatus, 8 ) \ - SYSCALL_ENTRY( 0x0136, NtUserNotifyWinEvent, 16 ) \ - SYSCALL_ENTRY( 0x0137, NtUserOpenClipboard, 8 ) \ - SYSCALL_ENTRY( 0x0138, NtUserOpenDesktop, 12 ) \ - SYSCALL_ENTRY( 0x0139, NtUserOpenInputDesktop, 12 ) \ - SYSCALL_ENTRY( 0x013a, NtUserOpenWindowStation, 8 ) \ - SYSCALL_ENTRY( 0x013b, NtUserPeekMessage, 20 ) \ - SYSCALL_ENTRY( 0x013c, NtUserPerMonitorDPIPhysicalToLogicalPoint, 8 ) \ - SYSCALL_ENTRY( 0x013d, NtUserPostMessage, 16 ) \ - SYSCALL_ENTRY( 0x013e, NtUserPostThreadMessage, 16 ) \ - SYSCALL_ENTRY( 0x013f, NtUserPrintWindow, 12 ) \ - SYSCALL_ENTRY( 0x0140, NtUserQueryDisplayConfig, 24 ) \ - SYSCALL_ENTRY( 0x0141, NtUserQueryInputContext, 8 ) \ - SYSCALL_ENTRY( 0x0142, NtUserRealChildWindowFromPoint, 12 ) \ - SYSCALL_ENTRY( 0x0143, NtUserRedrawWindow, 16 ) \ - SYSCALL_ENTRY( 0x0144, NtUserRegisterClassExWOW, 28 ) \ - SYSCALL_ENTRY( 0x0145, NtUserRegisterHotKey, 16 ) \ - SYSCALL_ENTRY( 0x0146, NtUserRegisterRawInputDevices, 12 ) \ - SYSCALL_ENTRY( 0x0147, NtUserReleaseDC, 8 ) \ - SYSCALL_ENTRY( 0x0148, NtUserRemoveClipboardFormatListener, 4 ) \ - SYSCALL_ENTRY( 0x0149, NtUserRemoveMenu, 12 ) \ - SYSCALL_ENTRY( 0x014a, NtUserRemoveProp, 8 ) \ - SYSCALL_ENTRY( 0x014b, NtUserScrollDC, 28 ) \ - SYSCALL_ENTRY( 0x014c, NtUserScrollWindowEx, 32 ) \ - SYSCALL_ENTRY( 0x014d, NtUserSelectPalette, 12 ) \ - SYSCALL_ENTRY( 0x014e, NtUserSendInput, 12 ) \ - SYSCALL_ENTRY( 0x014f, NtUserSetActiveWindow, 4 ) \ - SYSCALL_ENTRY( 0x0150, NtUserSetCapture, 4 ) \ - SYSCALL_ENTRY( 0x0151, NtUserSetClassLong, 16 ) \ - SYSCALL_ENTRY( 0x0152, NtUserSetClassLongPtr, 16 ) \ - SYSCALL_ENTRY( 0x0153, NtUserSetClassWord, 12 ) \ - SYSCALL_ENTRY( 0x0154, NtUserSetClipboardData, 12 ) \ - SYSCALL_ENTRY( 0x0155, NtUserSetClipboardViewer, 4 ) \ - SYSCALL_ENTRY( 0x0156, NtUserSetCursor, 4 ) \ - SYSCALL_ENTRY( 0x0157, NtUserSetCursorIconData, 16 ) \ - SYSCALL_ENTRY( 0x0158, NtUserSetCursorPos, 8 ) \ - SYSCALL_ENTRY( 0x0159, NtUserSetFocus, 4 ) \ - SYSCALL_ENTRY( 0x015a, NtUserSetInternalWindowPos, 16 ) \ - SYSCALL_ENTRY( 0x015b, NtUserSetKeyboardState, 4 ) \ - SYSCALL_ENTRY( 0x015c, NtUserSetLayeredWindowAttributes, 16 ) \ - SYSCALL_ENTRY( 0x015d, NtUserSetMenu, 8 ) \ - SYSCALL_ENTRY( 0x015e, NtUserSetMenuContextHelpId, 8 ) \ - SYSCALL_ENTRY( 0x015f, NtUserSetMenuDefaultItem, 12 ) \ - SYSCALL_ENTRY( 0x0160, NtUserSetObjectInformation, 16 ) \ - SYSCALL_ENTRY( 0x0161, NtUserSetParent, 8 ) \ - SYSCALL_ENTRY( 0x0162, NtUserSetProcessDpiAwarenessContext, 8 ) \ - SYSCALL_ENTRY( 0x0163, NtUserSetProcessWindowStation, 4 ) \ - SYSCALL_ENTRY( 0x0164, NtUserSetProp, 12 ) \ - SYSCALL_ENTRY( 0x0165, NtUserSetScrollInfo, 16 ) \ - SYSCALL_ENTRY( 0x0166, NtUserSetShellWindowEx, 8 ) \ - SYSCALL_ENTRY( 0x0167, NtUserSetSysColors, 12 ) \ - SYSCALL_ENTRY( 0x0168, NtUserSetSystemMenu, 8 ) \ - SYSCALL_ENTRY( 0x0169, NtUserSetSystemTimer, 12 ) \ - SYSCALL_ENTRY( 0x016a, NtUserSetThreadDesktop, 4 ) \ - SYSCALL_ENTRY( 0x016b, NtUserSetTimer, 20 ) \ - SYSCALL_ENTRY( 0x016c, NtUserSetWinEventHook, 32 ) \ - SYSCALL_ENTRY( 0x016d, NtUserSetWindowLong, 16 ) \ - SYSCALL_ENTRY( 0x016e, NtUserSetWindowLongPtr, 16 ) \ - SYSCALL_ENTRY( 0x016f, NtUserSetWindowPlacement, 8 ) \ - SYSCALL_ENTRY( 0x0170, NtUserSetWindowPos, 28 ) \ - SYSCALL_ENTRY( 0x0171, NtUserSetWindowRgn, 12 ) \ - SYSCALL_ENTRY( 0x0172, NtUserSetWindowWord, 12 ) \ - SYSCALL_ENTRY( 0x0173, NtUserSetWindowsHookEx, 24 ) \ - SYSCALL_ENTRY( 0x0174, NtUserShowCaret, 4 ) \ - SYSCALL_ENTRY( 0x0175, NtUserShowCursor, 4 ) \ - SYSCALL_ENTRY( 0x0176, NtUserShowScrollBar, 12 ) \ - SYSCALL_ENTRY( 0x0177, NtUserShowWindow, 8 ) \ - SYSCALL_ENTRY( 0x0178, NtUserShowWindowAsync, 8 ) \ - SYSCALL_ENTRY( 0x0179, NtUserSystemParametersInfo, 16 ) \ - SYSCALL_ENTRY( 0x017a, NtUserSystemParametersInfoForDpi, 20 ) \ - SYSCALL_ENTRY( 0x017b, NtUserThunkedMenuInfo, 8 ) \ - SYSCALL_ENTRY( 0x017c, NtUserThunkedMenuItemInfo, 24 ) \ - SYSCALL_ENTRY( 0x017d, NtUserToUnicodeEx, 28 ) \ - SYSCALL_ENTRY( 0x017e, NtUserTrackMouseEvent, 4 ) \ - SYSCALL_ENTRY( 0x017f, NtUserTrackPopupMenuEx, 24 ) \ - SYSCALL_ENTRY( 0x0180, NtUserTranslateAccelerator, 12 ) \ - SYSCALL_ENTRY( 0x0181, NtUserTranslateMessage, 8 ) \ - SYSCALL_ENTRY( 0x0182, NtUserUnhookWinEvent, 4 ) \ - SYSCALL_ENTRY( 0x0183, NtUserUnhookWindowsHookEx, 4 ) \ - SYSCALL_ENTRY( 0x0184, NtUserUnregisterClass, 12 ) \ - SYSCALL_ENTRY( 0x0185, NtUserUnregisterHotKey, 8 ) \ - SYSCALL_ENTRY( 0x0186, NtUserUpdateInputContext, 12 ) \ - SYSCALL_ENTRY( 0x0187, NtUserUpdateLayeredWindow, 40 ) \ - SYSCALL_ENTRY( 0x0188, NtUserValidateRect, 8 ) \ - SYSCALL_ENTRY( 0x0189, NtUserVkKeyScanEx, 8 ) \ - SYSCALL_ENTRY( 0x018a, NtUserWaitForInputIdle, 12 ) \ - SYSCALL_ENTRY( 0x018b, NtUserWaitMessage, 0 ) \ - SYSCALL_ENTRY( 0x018c, NtUserWindowFromDC, 4 ) \ - SYSCALL_ENTRY( 0x018d, NtUserWindowFromPoint, 8 ) \ - SYSCALL_ENTRY( 0x018e, __wine_get_file_outline_text_metric, 16 ) \ - SYSCALL_ENTRY( 0x018f, __wine_get_icm_profile, 16 ) \ - SYSCALL_ENTRY( 0x0190, __wine_send_input, 12 ) + SYSCALL_ENTRY( 0x0023, NtGdiDdDDIEnumAdapters2, 4 ) \ + SYSCALL_ENTRY( 0x0024, NtGdiDdDDIEscape, 4 ) \ + SYSCALL_ENTRY( 0x0025, NtGdiDdDDIOpenAdapterFromDeviceName, 4 ) \ + SYSCALL_ENTRY( 0x0026, NtGdiDdDDIOpenAdapterFromHdc, 4 ) \ + SYSCALL_ENTRY( 0x0027, NtGdiDdDDIOpenAdapterFromLuid, 4 ) \ + SYSCALL_ENTRY( 0x0028, NtGdiDdDDIQueryAdapterInfo, 4 ) \ + SYSCALL_ENTRY( 0x0029, NtGdiDdDDIQueryStatistics, 4 ) \ + SYSCALL_ENTRY( 0x002a, NtGdiDdDDIQueryVideoMemoryInfo, 4 ) \ + SYSCALL_ENTRY( 0x002b, NtGdiDdDDISetQueuedLimit, 4 ) \ + SYSCALL_ENTRY( 0x002c, NtGdiDdDDISetVidPnSourceOwner, 4 ) \ + SYSCALL_ENTRY( 0x002d, NtGdiDeleteClientObj, 4 ) \ + SYSCALL_ENTRY( 0x002e, NtGdiDeleteObjectApp, 4 ) \ + SYSCALL_ENTRY( 0x002f, NtGdiDescribePixelFormat, 16 ) \ + SYSCALL_ENTRY( 0x0030, NtGdiDoPalette, 24 ) \ + SYSCALL_ENTRY( 0x0031, NtGdiDrawStream, 12 ) \ + SYSCALL_ENTRY( 0x0032, NtGdiEllipse, 20 ) \ + SYSCALL_ENTRY( 0x0033, NtGdiEndDoc, 4 ) \ + SYSCALL_ENTRY( 0x0034, NtGdiEndPage, 4 ) \ + SYSCALL_ENTRY( 0x0035, NtGdiEndPath, 4 ) \ + SYSCALL_ENTRY( 0x0036, NtGdiEnumFonts, 32 ) \ + SYSCALL_ENTRY( 0x0037, NtGdiEqualRgn, 8 ) \ + SYSCALL_ENTRY( 0x0038, NtGdiExcludeClipRect, 20 ) \ + SYSCALL_ENTRY( 0x0039, NtGdiExtCreatePen, 44 ) \ + SYSCALL_ENTRY( 0x003a, NtGdiExtCreateRegion, 12 ) \ + SYSCALL_ENTRY( 0x003b, NtGdiExtEscape, 32 ) \ + SYSCALL_ENTRY( 0x003c, NtGdiExtFloodFill, 20 ) \ + SYSCALL_ENTRY( 0x003d, NtGdiExtGetObjectW, 12 ) \ + SYSCALL_ENTRY( 0x003e, NtGdiExtSelectClipRgn, 12 ) \ + SYSCALL_ENTRY( 0x003f, NtGdiExtTextOutW, 36 ) \ + SYSCALL_ENTRY( 0x0040, NtGdiFillPath, 4 ) \ + SYSCALL_ENTRY( 0x0041, NtGdiFillRgn, 12 ) \ + SYSCALL_ENTRY( 0x0042, NtGdiFlattenPath, 4 ) \ + SYSCALL_ENTRY( 0x0043, NtGdiFlush, 0 ) \ + SYSCALL_ENTRY( 0x0044, NtGdiFontIsLinked, 4 ) \ + SYSCALL_ENTRY( 0x0045, NtGdiFrameRgn, 20 ) \ + SYSCALL_ENTRY( 0x0046, NtGdiGetAndSetDCDword, 16 ) \ + SYSCALL_ENTRY( 0x0047, NtGdiGetAppClipBox, 8 ) \ + SYSCALL_ENTRY( 0x0048, NtGdiGetBitmapBits, 12 ) \ + SYSCALL_ENTRY( 0x0049, NtGdiGetBitmapDimension, 8 ) \ + SYSCALL_ENTRY( 0x004a, NtGdiGetBoundsRect, 12 ) \ + SYSCALL_ENTRY( 0x004b, NtGdiGetCharABCWidthsW, 24 ) \ + SYSCALL_ENTRY( 0x004c, NtGdiGetCharWidthInfo, 8 ) \ + SYSCALL_ENTRY( 0x004d, NtGdiGetCharWidthW, 24 ) \ + SYSCALL_ENTRY( 0x004e, NtGdiGetColorAdjustment, 8 ) \ + SYSCALL_ENTRY( 0x004f, NtGdiGetDCDword, 12 ) \ + SYSCALL_ENTRY( 0x0050, NtGdiGetDCObject, 8 ) \ + SYSCALL_ENTRY( 0x0051, NtGdiGetDCPoint, 12 ) \ + SYSCALL_ENTRY( 0x0052, NtGdiGetDIBitsInternal, 36 ) \ + SYSCALL_ENTRY( 0x0053, NtGdiGetDeviceCaps, 8 ) \ + SYSCALL_ENTRY( 0x0054, NtGdiGetDeviceGammaRamp, 8 ) \ + SYSCALL_ENTRY( 0x0055, NtGdiGetFontData, 20 ) \ + SYSCALL_ENTRY( 0x0056, NtGdiGetFontFileData, 20 ) \ + SYSCALL_ENTRY( 0x0057, NtGdiGetFontFileInfo, 20 ) \ + SYSCALL_ENTRY( 0x0058, NtGdiGetFontUnicodeRanges, 8 ) \ + SYSCALL_ENTRY( 0x0059, NtGdiGetGlyphIndicesW, 20 ) \ + SYSCALL_ENTRY( 0x005a, NtGdiGetGlyphOutline, 32 ) \ + SYSCALL_ENTRY( 0x005b, NtGdiGetKerningPairs, 12 ) \ + SYSCALL_ENTRY( 0x005c, NtGdiGetNearestColor, 8 ) \ + SYSCALL_ENTRY( 0x005d, NtGdiGetNearestPaletteIndex, 8 ) \ + SYSCALL_ENTRY( 0x005e, NtGdiGetOutlineTextMetricsInternalW, 16 ) \ + SYSCALL_ENTRY( 0x005f, NtGdiGetPath, 16 ) \ + SYSCALL_ENTRY( 0x0060, NtGdiGetPixel, 12 ) \ + SYSCALL_ENTRY( 0x0061, NtGdiGetRandomRgn, 12 ) \ + SYSCALL_ENTRY( 0x0062, NtGdiGetRasterizerCaps, 8 ) \ + SYSCALL_ENTRY( 0x0063, NtGdiGetRealizationInfo, 8 ) \ + SYSCALL_ENTRY( 0x0064, NtGdiGetRegionData, 12 ) \ + SYSCALL_ENTRY( 0x0065, NtGdiGetRgnBox, 8 ) \ + SYSCALL_ENTRY( 0x0066, NtGdiGetSpoolMessage, 16 ) \ + SYSCALL_ENTRY( 0x0067, NtGdiGetSystemPaletteUse, 4 ) \ + SYSCALL_ENTRY( 0x0068, NtGdiGetTextCharsetInfo, 12 ) \ + SYSCALL_ENTRY( 0x0069, NtGdiGetTextExtentExW, 32 ) \ + SYSCALL_ENTRY( 0x006a, NtGdiGetTextFaceW, 16 ) \ + SYSCALL_ENTRY( 0x006b, NtGdiGetTextMetricsW, 12 ) \ + SYSCALL_ENTRY( 0x006c, NtGdiGetTransform, 12 ) \ + SYSCALL_ENTRY( 0x006d, NtGdiGradientFill, 24 ) \ + SYSCALL_ENTRY( 0x006e, NtGdiHfontCreate, 20 ) \ + SYSCALL_ENTRY( 0x006f, NtGdiIcmBrushInfo, 32 ) \ + SYSCALL_ENTRY( 0x0070, NtGdiInitSpool, 0 ) \ + SYSCALL_ENTRY( 0x0071, NtGdiIntersectClipRect, 20 ) \ + SYSCALL_ENTRY( 0x0072, NtGdiInvertRgn, 8 ) \ + SYSCALL_ENTRY( 0x0073, NtGdiLineTo, 12 ) \ + SYSCALL_ENTRY( 0x0074, NtGdiMaskBlt, 52 ) \ + SYSCALL_ENTRY( 0x0075, NtGdiModifyWorldTransform, 12 ) \ + SYSCALL_ENTRY( 0x0076, NtGdiMoveTo, 16 ) \ + SYSCALL_ENTRY( 0x0077, NtGdiOffsetClipRgn, 12 ) \ + SYSCALL_ENTRY( 0x0078, NtGdiOffsetRgn, 12 ) \ + SYSCALL_ENTRY( 0x0079, NtGdiOpenDCW, 32 ) \ + SYSCALL_ENTRY( 0x007a, NtGdiPatBlt, 24 ) \ + SYSCALL_ENTRY( 0x007b, NtGdiPathToRegion, 4 ) \ + SYSCALL_ENTRY( 0x007c, NtGdiPlgBlt, 44 ) \ + SYSCALL_ENTRY( 0x007d, NtGdiPolyDraw, 16 ) \ + SYSCALL_ENTRY( 0x007e, NtGdiPolyPolyDraw, 20 ) \ + SYSCALL_ENTRY( 0x007f, NtGdiPtInRegion, 12 ) \ + SYSCALL_ENTRY( 0x0080, NtGdiPtVisible, 12 ) \ + SYSCALL_ENTRY( 0x0081, NtGdiRectInRegion, 8 ) \ + SYSCALL_ENTRY( 0x0082, NtGdiRectVisible, 8 ) \ + SYSCALL_ENTRY( 0x0083, NtGdiRectangle, 20 ) \ + SYSCALL_ENTRY( 0x0084, NtGdiRemoveFontMemResourceEx, 4 ) \ + SYSCALL_ENTRY( 0x0085, NtGdiRemoveFontResourceW, 24 ) \ + SYSCALL_ENTRY( 0x0086, NtGdiResetDC, 20 ) \ + SYSCALL_ENTRY( 0x0087, NtGdiResizePalette, 8 ) \ + SYSCALL_ENTRY( 0x0088, NtGdiRestoreDC, 8 ) \ + SYSCALL_ENTRY( 0x0089, NtGdiRoundRect, 28 ) \ + SYSCALL_ENTRY( 0x008a, NtGdiSaveDC, 4 ) \ + SYSCALL_ENTRY( 0x008b, NtGdiScaleViewportExtEx, 24 ) \ + SYSCALL_ENTRY( 0x008c, NtGdiScaleWindowExtEx, 24 ) \ + SYSCALL_ENTRY( 0x008d, NtGdiSelectBitmap, 8 ) \ + SYSCALL_ENTRY( 0x008e, NtGdiSelectBrush, 8 ) \ + SYSCALL_ENTRY( 0x008f, NtGdiSelectClipPath, 8 ) \ + SYSCALL_ENTRY( 0x0090, NtGdiSelectFont, 8 ) \ + SYSCALL_ENTRY( 0x0091, NtGdiSelectPen, 8 ) \ + SYSCALL_ENTRY( 0x0092, NtGdiSetBitmapBits, 12 ) \ + SYSCALL_ENTRY( 0x0093, NtGdiSetBitmapDimension, 16 ) \ + SYSCALL_ENTRY( 0x0094, NtGdiSetBoundsRect, 12 ) \ + SYSCALL_ENTRY( 0x0095, NtGdiSetBrushOrg, 16 ) \ + SYSCALL_ENTRY( 0x0096, NtGdiSetColorAdjustment, 8 ) \ + SYSCALL_ENTRY( 0x0097, NtGdiSetDIBitsToDeviceInternal, 64 ) \ + SYSCALL_ENTRY( 0x0098, NtGdiSetDeviceGammaRamp, 8 ) \ + SYSCALL_ENTRY( 0x0099, NtGdiSetLayout, 12 ) \ + SYSCALL_ENTRY( 0x009a, NtGdiSetMagicColors, 12 ) \ + SYSCALL_ENTRY( 0x009b, NtGdiSetMetaRgn, 4 ) \ + SYSCALL_ENTRY( 0x009c, NtGdiSetPixel, 16 ) \ + SYSCALL_ENTRY( 0x009d, NtGdiSetPixelFormat, 8 ) \ + SYSCALL_ENTRY( 0x009e, NtGdiSetRectRgn, 20 ) \ + SYSCALL_ENTRY( 0x009f, NtGdiSetSystemPaletteUse, 8 ) \ + SYSCALL_ENTRY( 0x00a0, NtGdiSetTextJustification, 12 ) \ + SYSCALL_ENTRY( 0x00a1, NtGdiSetVirtualResolution, 20 ) \ + SYSCALL_ENTRY( 0x00a2, NtGdiStartDoc, 16 ) \ + SYSCALL_ENTRY( 0x00a3, NtGdiStartPage, 4 ) \ + SYSCALL_ENTRY( 0x00a4, NtGdiStretchBlt, 48 ) \ + SYSCALL_ENTRY( 0x00a5, NtGdiStretchDIBitsInternal, 64 ) \ + SYSCALL_ENTRY( 0x00a6, NtGdiStrokeAndFillPath, 4 ) \ + SYSCALL_ENTRY( 0x00a7, NtGdiStrokePath, 4 ) \ + SYSCALL_ENTRY( 0x00a8, NtGdiSwapBuffers, 4 ) \ + SYSCALL_ENTRY( 0x00a9, NtGdiTransformPoints, 20 ) \ + SYSCALL_ENTRY( 0x00aa, NtGdiTransparentBlt, 44 ) \ + SYSCALL_ENTRY( 0x00ab, NtGdiUnrealizeObject, 4 ) \ + SYSCALL_ENTRY( 0x00ac, NtGdiUpdateColors, 4 ) \ + SYSCALL_ENTRY( 0x00ad, NtGdiWidenPath, 4 ) \ + SYSCALL_ENTRY( 0x00ae, NtUserActivateKeyboardLayout, 8 ) \ + SYSCALL_ENTRY( 0x00af, NtUserAddClipboardFormatListener, 4 ) \ + SYSCALL_ENTRY( 0x00b0, NtUserAssociateInputContext, 12 ) \ + SYSCALL_ENTRY( 0x00b1, NtUserAttachThreadInput, 12 ) \ + SYSCALL_ENTRY( 0x00b2, NtUserBeginPaint, 8 ) \ + SYSCALL_ENTRY( 0x00b3, NtUserBuildHimcList, 16 ) \ + SYSCALL_ENTRY( 0x00b4, NtUserBuildHwndList, 32 ) \ + SYSCALL_ENTRY( 0x00b5, NtUserCallHwnd, 8 ) \ + SYSCALL_ENTRY( 0x00b6, NtUserCallHwndParam, 12 ) \ + SYSCALL_ENTRY( 0x00b7, NtUserCallMsgFilter, 8 ) \ + SYSCALL_ENTRY( 0x00b8, NtUserCallNextHookEx, 16 ) \ + SYSCALL_ENTRY( 0x00b9, NtUserCallNoParam, 4 ) \ + SYSCALL_ENTRY( 0x00ba, NtUserCallOneParam, 8 ) \ + SYSCALL_ENTRY( 0x00bb, NtUserCallTwoParam, 12 ) \ + SYSCALL_ENTRY( 0x00bc, NtUserChangeClipboardChain, 8 ) \ + SYSCALL_ENTRY( 0x00bd, NtUserChangeDisplaySettings, 20 ) \ + SYSCALL_ENTRY( 0x00be, NtUserCheckMenuItem, 12 ) \ + SYSCALL_ENTRY( 0x00bf, NtUserChildWindowFromPointEx, 16 ) \ + SYSCALL_ENTRY( 0x00c0, NtUserClipCursor, 4 ) \ + SYSCALL_ENTRY( 0x00c1, NtUserCloseClipboard, 0 ) \ + SYSCALL_ENTRY( 0x00c2, NtUserCloseDesktop, 4 ) \ + SYSCALL_ENTRY( 0x00c3, NtUserCloseWindowStation, 4 ) \ + SYSCALL_ENTRY( 0x00c4, NtUserCopyAcceleratorTable, 12 ) \ + SYSCALL_ENTRY( 0x00c5, NtUserCountClipboardFormats, 0 ) \ + SYSCALL_ENTRY( 0x00c6, NtUserCreateAcceleratorTable, 8 ) \ + SYSCALL_ENTRY( 0x00c7, NtUserCreateCaret, 16 ) \ + SYSCALL_ENTRY( 0x00c8, NtUserCreateDesktopEx, 24 ) \ + SYSCALL_ENTRY( 0x00c9, NtUserCreateInputContext, 4 ) \ + SYSCALL_ENTRY( 0x00ca, NtUserCreateWindowEx, 68 ) \ + SYSCALL_ENTRY( 0x00cb, NtUserCreateWindowStation, 28 ) \ + SYSCALL_ENTRY( 0x00cc, NtUserDeferWindowPosAndBand, 40 ) \ + SYSCALL_ENTRY( 0x00cd, NtUserDeleteMenu, 12 ) \ + SYSCALL_ENTRY( 0x00ce, NtUserDestroyAcceleratorTable, 4 ) \ + SYSCALL_ENTRY( 0x00cf, NtUserDestroyCursor, 8 ) \ + SYSCALL_ENTRY( 0x00d0, NtUserDestroyInputContext, 4 ) \ + SYSCALL_ENTRY( 0x00d1, NtUserDestroyMenu, 4 ) \ + SYSCALL_ENTRY( 0x00d2, NtUserDestroyWindow, 4 ) \ + SYSCALL_ENTRY( 0x00d3, NtUserDisableThreadIme, 4 ) \ + SYSCALL_ENTRY( 0x00d4, NtUserDispatchMessage, 4 ) \ + SYSCALL_ENTRY( 0x00d5, NtUserDisplayConfigGetDeviceInfo, 4 ) \ + SYSCALL_ENTRY( 0x00d6, NtUserDragDetect, 12 ) \ + SYSCALL_ENTRY( 0x00d7, NtUserDragObject, 20 ) \ + SYSCALL_ENTRY( 0x00d8, NtUserDrawCaptionTemp, 28 ) \ + SYSCALL_ENTRY( 0x00d9, NtUserDrawIconEx, 36 ) \ + SYSCALL_ENTRY( 0x00da, NtUserDrawMenuBarTemp, 20 ) \ + SYSCALL_ENTRY( 0x00db, NtUserEmptyClipboard, 0 ) \ + SYSCALL_ENTRY( 0x00dc, NtUserEnableMenuItem, 12 ) \ + SYSCALL_ENTRY( 0x00dd, NtUserEnableMouseInPointer, 4 ) \ + SYSCALL_ENTRY( 0x00de, NtUserEnableScrollBar, 12 ) \ + SYSCALL_ENTRY( 0x00df, NtUserEndDeferWindowPosEx, 8 ) \ + SYSCALL_ENTRY( 0x00e0, NtUserEndMenu, 0 ) \ + SYSCALL_ENTRY( 0x00e1, NtUserEndPaint, 8 ) \ + SYSCALL_ENTRY( 0x00e2, NtUserEnumDisplayDevices, 16 ) \ + SYSCALL_ENTRY( 0x00e3, NtUserEnumDisplayMonitors, 16 ) \ + SYSCALL_ENTRY( 0x00e4, NtUserEnumDisplaySettings, 16 ) \ + SYSCALL_ENTRY( 0x00e5, NtUserExcludeUpdateRgn, 8 ) \ + SYSCALL_ENTRY( 0x00e6, NtUserFindExistingCursorIcon, 12 ) \ + SYSCALL_ENTRY( 0x00e7, NtUserFindWindowEx, 20 ) \ + SYSCALL_ENTRY( 0x00e8, NtUserFlashWindowEx, 4 ) \ + SYSCALL_ENTRY( 0x00e9, NtUserGetAncestor, 8 ) \ + SYSCALL_ENTRY( 0x00ea, NtUserGetAsyncKeyState, 4 ) \ + SYSCALL_ENTRY( 0x00eb, NtUserGetAtomName, 8 ) \ + SYSCALL_ENTRY( 0x00ec, NtUserGetCaretBlinkTime, 0 ) \ + SYSCALL_ENTRY( 0x00ed, NtUserGetCaretPos, 4 ) \ + SYSCALL_ENTRY( 0x00ee, NtUserGetClassInfoEx, 20 ) \ + SYSCALL_ENTRY( 0x00ef, NtUserGetClassName, 12 ) \ + SYSCALL_ENTRY( 0x00f0, NtUserGetClipboardData, 8 ) \ + SYSCALL_ENTRY( 0x00f1, NtUserGetClipboardFormatName, 12 ) \ + SYSCALL_ENTRY( 0x00f2, NtUserGetClipboardOwner, 0 ) \ + SYSCALL_ENTRY( 0x00f3, NtUserGetClipboardSequenceNumber, 0 ) \ + SYSCALL_ENTRY( 0x00f4, NtUserGetClipboardViewer, 0 ) \ + SYSCALL_ENTRY( 0x00f5, NtUserGetCursor, 0 ) \ + SYSCALL_ENTRY( 0x00f6, NtUserGetCursorFrameInfo, 16 ) \ + SYSCALL_ENTRY( 0x00f7, NtUserGetCursorInfo, 4 ) \ + SYSCALL_ENTRY( 0x00f8, NtUserGetDC, 4 ) \ + SYSCALL_ENTRY( 0x00f9, NtUserGetDCEx, 12 ) \ + SYSCALL_ENTRY( 0x00fa, NtUserGetDisplayConfigBufferSizes, 12 ) \ + SYSCALL_ENTRY( 0x00fb, NtUserGetDoubleClickTime, 0 ) \ + SYSCALL_ENTRY( 0x00fc, NtUserGetDpiForMonitor, 16 ) \ + SYSCALL_ENTRY( 0x00fd, NtUserGetForegroundWindow, 0 ) \ + SYSCALL_ENTRY( 0x00fe, NtUserGetGUIThreadInfo, 8 ) \ + SYSCALL_ENTRY( 0x00ff, NtUserGetIconInfo, 24 ) \ + SYSCALL_ENTRY( 0x0100, NtUserGetIconSize, 16 ) \ + SYSCALL_ENTRY( 0x0101, NtUserGetInternalWindowPos, 12 ) \ + SYSCALL_ENTRY( 0x0102, NtUserGetKeyNameText, 12 ) \ + SYSCALL_ENTRY( 0x0103, NtUserGetKeyState, 4 ) \ + SYSCALL_ENTRY( 0x0104, NtUserGetKeyboardLayout, 4 ) \ + SYSCALL_ENTRY( 0x0105, NtUserGetKeyboardLayoutList, 8 ) \ + SYSCALL_ENTRY( 0x0106, NtUserGetKeyboardLayoutName, 4 ) \ + SYSCALL_ENTRY( 0x0107, NtUserGetKeyboardState, 4 ) \ + SYSCALL_ENTRY( 0x0108, NtUserGetLayeredWindowAttributes, 16 ) \ + SYSCALL_ENTRY( 0x0109, NtUserGetMenuBarInfo, 16 ) \ + SYSCALL_ENTRY( 0x010a, NtUserGetMenuItemRect, 16 ) \ + SYSCALL_ENTRY( 0x010b, NtUserGetMessage, 16 ) \ + SYSCALL_ENTRY( 0x010c, NtUserGetMouseMovePointsEx, 20 ) \ + SYSCALL_ENTRY( 0x010d, NtUserGetObjectInformation, 20 ) \ + SYSCALL_ENTRY( 0x010e, NtUserGetOpenClipboardWindow, 0 ) \ + SYSCALL_ENTRY( 0x010f, NtUserGetPointerInfoList, 32 ) \ + SYSCALL_ENTRY( 0x0110, NtUserGetPriorityClipboardFormat, 8 ) \ + SYSCALL_ENTRY( 0x0111, NtUserGetProcessDpiAwarenessContext, 4 ) \ + SYSCALL_ENTRY( 0x0112, NtUserGetProcessWindowStation, 0 ) \ + SYSCALL_ENTRY( 0x0113, NtUserGetProp, 8 ) \ + SYSCALL_ENTRY( 0x0114, NtUserGetQueueStatus, 4 ) \ + SYSCALL_ENTRY( 0x0115, NtUserGetRawInputBuffer, 12 ) \ + SYSCALL_ENTRY( 0x0116, NtUserGetRawInputData, 20 ) \ + SYSCALL_ENTRY( 0x0117, NtUserGetRawInputDeviceInfo, 16 ) \ + SYSCALL_ENTRY( 0x0118, NtUserGetRawInputDeviceList, 12 ) \ + SYSCALL_ENTRY( 0x0119, NtUserGetRegisteredRawInputDevices, 12 ) \ + SYSCALL_ENTRY( 0x011a, NtUserGetScrollBarInfo, 12 ) \ + SYSCALL_ENTRY( 0x011b, NtUserGetSystemDpiForProcess, 4 ) \ + SYSCALL_ENTRY( 0x011c, NtUserGetSystemMenu, 8 ) \ + SYSCALL_ENTRY( 0x011d, NtUserGetThreadDesktop, 4 ) \ + SYSCALL_ENTRY( 0x011e, NtUserGetTitleBarInfo, 8 ) \ + SYSCALL_ENTRY( 0x011f, NtUserGetUpdateRect, 12 ) \ + SYSCALL_ENTRY( 0x0120, NtUserGetUpdateRgn, 12 ) \ + SYSCALL_ENTRY( 0x0121, NtUserGetUpdatedClipboardFormats, 12 ) \ + SYSCALL_ENTRY( 0x0122, NtUserGetWindowDC, 4 ) \ + SYSCALL_ENTRY( 0x0123, NtUserGetWindowPlacement, 8 ) \ + SYSCALL_ENTRY( 0x0124, NtUserGetWindowRgnEx, 12 ) \ + SYSCALL_ENTRY( 0x0125, NtUserHideCaret, 4 ) \ + SYSCALL_ENTRY( 0x0126, NtUserHiliteMenuItem, 16 ) \ + SYSCALL_ENTRY( 0x0127, NtUserInitializeClientPfnArrays, 16 ) \ + SYSCALL_ENTRY( 0x0128, NtUserInternalGetWindowIcon, 8 ) \ + SYSCALL_ENTRY( 0x0129, NtUserInternalGetWindowText, 12 ) \ + SYSCALL_ENTRY( 0x012a, NtUserInvalidateRect, 12 ) \ + SYSCALL_ENTRY( 0x012b, NtUserInvalidateRgn, 12 ) \ + SYSCALL_ENTRY( 0x012c, NtUserIsClipboardFormatAvailable, 4 ) \ + SYSCALL_ENTRY( 0x012d, NtUserIsMouseInPointerEnabled, 0 ) \ + SYSCALL_ENTRY( 0x012e, NtUserKillTimer, 8 ) \ + SYSCALL_ENTRY( 0x012f, NtUserLockWindowUpdate, 4 ) \ + SYSCALL_ENTRY( 0x0130, NtUserLogicalToPerMonitorDPIPhysicalPoint, 8 ) \ + SYSCALL_ENTRY( 0x0131, NtUserMapVirtualKeyEx, 12 ) \ + SYSCALL_ENTRY( 0x0132, NtUserMenuItemFromPoint, 16 ) \ + SYSCALL_ENTRY( 0x0133, NtUserMessageCall, 28 ) \ + SYSCALL_ENTRY( 0x0134, NtUserMoveWindow, 24 ) \ + SYSCALL_ENTRY( 0x0135, NtUserMsgWaitForMultipleObjectsEx, 20 ) \ + SYSCALL_ENTRY( 0x0136, NtUserNotifyIMEStatus, 8 ) \ + SYSCALL_ENTRY( 0x0137, NtUserNotifyWinEvent, 16 ) \ + SYSCALL_ENTRY( 0x0138, NtUserOpenClipboard, 8 ) \ + SYSCALL_ENTRY( 0x0139, NtUserOpenDesktop, 12 ) \ + SYSCALL_ENTRY( 0x013a, NtUserOpenInputDesktop, 12 ) \ + SYSCALL_ENTRY( 0x013b, NtUserOpenWindowStation, 8 ) \ + SYSCALL_ENTRY( 0x013c, NtUserPeekMessage, 20 ) \ + SYSCALL_ENTRY( 0x013d, NtUserPerMonitorDPIPhysicalToLogicalPoint, 8 ) \ + SYSCALL_ENTRY( 0x013e, NtUserPostMessage, 16 ) \ + SYSCALL_ENTRY( 0x013f, NtUserPostThreadMessage, 16 ) \ + SYSCALL_ENTRY( 0x0140, NtUserPrintWindow, 12 ) \ + SYSCALL_ENTRY( 0x0141, NtUserQueryDisplayConfig, 24 ) \ + SYSCALL_ENTRY( 0x0142, NtUserQueryInputContext, 8 ) \ + SYSCALL_ENTRY( 0x0143, NtUserRealChildWindowFromPoint, 12 ) \ + SYSCALL_ENTRY( 0x0144, NtUserRedrawWindow, 16 ) \ + SYSCALL_ENTRY( 0x0145, NtUserRegisterClassExWOW, 28 ) \ + SYSCALL_ENTRY( 0x0146, NtUserRegisterHotKey, 16 ) \ + SYSCALL_ENTRY( 0x0147, NtUserRegisterRawInputDevices, 12 ) \ + SYSCALL_ENTRY( 0x0148, NtUserReleaseDC, 8 ) \ + SYSCALL_ENTRY( 0x0149, NtUserRemoveClipboardFormatListener, 4 ) \ + SYSCALL_ENTRY( 0x014a, NtUserRemoveMenu, 12 ) \ + SYSCALL_ENTRY( 0x014b, NtUserRemoveProp, 8 ) \ + SYSCALL_ENTRY( 0x014c, NtUserScrollDC, 28 ) \ + SYSCALL_ENTRY( 0x014d, NtUserScrollWindowEx, 32 ) \ + SYSCALL_ENTRY( 0x014e, NtUserSelectPalette, 12 ) \ + SYSCALL_ENTRY( 0x014f, NtUserSendInput, 12 ) \ + SYSCALL_ENTRY( 0x0150, NtUserSetActiveWindow, 4 ) \ + SYSCALL_ENTRY( 0x0151, NtUserSetCapture, 4 ) \ + SYSCALL_ENTRY( 0x0152, NtUserSetClassLong, 16 ) \ + SYSCALL_ENTRY( 0x0153, NtUserSetClassLongPtr, 16 ) \ + SYSCALL_ENTRY( 0x0154, NtUserSetClassWord, 12 ) \ + SYSCALL_ENTRY( 0x0155, NtUserSetClipboardData, 12 ) \ + SYSCALL_ENTRY( 0x0156, NtUserSetClipboardViewer, 4 ) \ + SYSCALL_ENTRY( 0x0157, NtUserSetCursor, 4 ) \ + SYSCALL_ENTRY( 0x0158, NtUserSetCursorIconData, 16 ) \ + SYSCALL_ENTRY( 0x0159, NtUserSetCursorPos, 8 ) \ + SYSCALL_ENTRY( 0x015a, NtUserSetFocus, 4 ) \ + SYSCALL_ENTRY( 0x015b, NtUserSetInternalWindowPos, 16 ) \ + SYSCALL_ENTRY( 0x015c, NtUserSetKeyboardState, 4 ) \ + SYSCALL_ENTRY( 0x015d, NtUserSetLayeredWindowAttributes, 16 ) \ + SYSCALL_ENTRY( 0x015e, NtUserSetMenu, 8 ) \ + SYSCALL_ENTRY( 0x015f, NtUserSetMenuContextHelpId, 8 ) \ + SYSCALL_ENTRY( 0x0160, NtUserSetMenuDefaultItem, 12 ) \ + SYSCALL_ENTRY( 0x0161, NtUserSetObjectInformation, 16 ) \ + SYSCALL_ENTRY( 0x0162, NtUserSetParent, 8 ) \ + SYSCALL_ENTRY( 0x0163, NtUserSetProcessDpiAwarenessContext, 8 ) \ + SYSCALL_ENTRY( 0x0164, NtUserSetProcessWindowStation, 4 ) \ + SYSCALL_ENTRY( 0x0165, NtUserSetProp, 12 ) \ + SYSCALL_ENTRY( 0x0166, NtUserSetScrollInfo, 16 ) \ + SYSCALL_ENTRY( 0x0167, NtUserSetShellWindowEx, 8 ) \ + SYSCALL_ENTRY( 0x0168, NtUserSetSysColors, 12 ) \ + SYSCALL_ENTRY( 0x0169, NtUserSetSystemMenu, 8 ) \ + SYSCALL_ENTRY( 0x016a, NtUserSetSystemTimer, 12 ) \ + SYSCALL_ENTRY( 0x016b, NtUserSetThreadDesktop, 4 ) \ + SYSCALL_ENTRY( 0x016c, NtUserSetTimer, 20 ) \ + SYSCALL_ENTRY( 0x016d, NtUserSetWinEventHook, 32 ) \ + SYSCALL_ENTRY( 0x016e, NtUserSetWindowLong, 16 ) \ + SYSCALL_ENTRY( 0x016f, NtUserSetWindowLongPtr, 16 ) \ + SYSCALL_ENTRY( 0x0170, NtUserSetWindowPlacement, 8 ) \ + SYSCALL_ENTRY( 0x0171, NtUserSetWindowPos, 28 ) \ + SYSCALL_ENTRY( 0x0172, NtUserSetWindowRgn, 12 ) \ + SYSCALL_ENTRY( 0x0173, NtUserSetWindowWord, 12 ) \ + SYSCALL_ENTRY( 0x0174, NtUserSetWindowsHookEx, 24 ) \ + SYSCALL_ENTRY( 0x0175, NtUserShowCaret, 4 ) \ + SYSCALL_ENTRY( 0x0176, NtUserShowCursor, 4 ) \ + SYSCALL_ENTRY( 0x0177, NtUserShowScrollBar, 12 ) \ + SYSCALL_ENTRY( 0x0178, NtUserShowWindow, 8 ) \ + SYSCALL_ENTRY( 0x0179, NtUserShowWindowAsync, 8 ) \ + SYSCALL_ENTRY( 0x017a, NtUserSystemParametersInfo, 16 ) \ + SYSCALL_ENTRY( 0x017b, NtUserSystemParametersInfoForDpi, 20 ) \ + SYSCALL_ENTRY( 0x017c, NtUserThunkedMenuInfo, 8 ) \ + SYSCALL_ENTRY( 0x017d, NtUserThunkedMenuItemInfo, 24 ) \ + SYSCALL_ENTRY( 0x017e, NtUserToUnicodeEx, 28 ) \ + SYSCALL_ENTRY( 0x017f, NtUserTrackMouseEvent, 4 ) \ + SYSCALL_ENTRY( 0x0180, NtUserTrackPopupMenuEx, 24 ) \ + SYSCALL_ENTRY( 0x0181, NtUserTranslateAccelerator, 12 ) \ + SYSCALL_ENTRY( 0x0182, NtUserTranslateMessage, 8 ) \ + SYSCALL_ENTRY( 0x0183, NtUserUnhookWinEvent, 4 ) \ + SYSCALL_ENTRY( 0x0184, NtUserUnhookWindowsHookEx, 4 ) \ + SYSCALL_ENTRY( 0x0185, NtUserUnregisterClass, 12 ) \ + SYSCALL_ENTRY( 0x0186, NtUserUnregisterHotKey, 8 ) \ + SYSCALL_ENTRY( 0x0187, NtUserUpdateInputContext, 12 ) \ + SYSCALL_ENTRY( 0x0188, NtUserUpdateLayeredWindow, 40 ) \ + SYSCALL_ENTRY( 0x0189, NtUserValidateRect, 8 ) \ + SYSCALL_ENTRY( 0x018a, NtUserVkKeyScanEx, 8 ) \ + SYSCALL_ENTRY( 0x018b, NtUserWaitForInputIdle, 12 ) \ + SYSCALL_ENTRY( 0x018c, NtUserWaitMessage, 0 ) \ + SYSCALL_ENTRY( 0x018d, NtUserWindowFromDC, 4 ) \ + SYSCALL_ENTRY( 0x018e, NtUserWindowFromPoint, 8 ) \ + SYSCALL_ENTRY( 0x018f, __wine_get_file_outline_text_metric, 16 ) \ + SYSCALL_ENTRY( 0x0190, __wine_get_icm_profile, 16 ) \ + SYSCALL_ENTRY( 0x0191, __wine_send_input, 12 )
#define ALL_SYSCALLS64 \ SYSCALL_ENTRY( 0x0000, NtGdiAbortDoc, 8 ) \ @@ -439,369 +440,370 @@ SYSCALL_ENTRY( 0x0020, NtGdiDdDDICreateDevice, 8 ) \ SYSCALL_ENTRY( 0x0021, NtGdiDdDDIDestroyDCFromMemory, 8 ) \ SYSCALL_ENTRY( 0x0022, NtGdiDdDDIDestroyDevice, 8 ) \ - SYSCALL_ENTRY( 0x0023, NtGdiDdDDIEscape, 8 ) \ - SYSCALL_ENTRY( 0x0024, NtGdiDdDDIOpenAdapterFromDeviceName, 8 ) \ - SYSCALL_ENTRY( 0x0025, NtGdiDdDDIOpenAdapterFromHdc, 8 ) \ - SYSCALL_ENTRY( 0x0026, NtGdiDdDDIOpenAdapterFromLuid, 8 ) \ - SYSCALL_ENTRY( 0x0027, NtGdiDdDDIQueryAdapterInfo, 8 ) \ - SYSCALL_ENTRY( 0x0028, NtGdiDdDDIQueryStatistics, 8 ) \ - SYSCALL_ENTRY( 0x0029, NtGdiDdDDIQueryVideoMemoryInfo, 8 ) \ - SYSCALL_ENTRY( 0x002a, NtGdiDdDDISetQueuedLimit, 8 ) \ - SYSCALL_ENTRY( 0x002b, NtGdiDdDDISetVidPnSourceOwner, 8 ) \ - SYSCALL_ENTRY( 0x002c, NtGdiDeleteClientObj, 8 ) \ - SYSCALL_ENTRY( 0x002d, NtGdiDeleteObjectApp, 8 ) \ - SYSCALL_ENTRY( 0x002e, NtGdiDescribePixelFormat, 32 ) \ - SYSCALL_ENTRY( 0x002f, NtGdiDoPalette, 48 ) \ - SYSCALL_ENTRY( 0x0030, NtGdiDrawStream, 24 ) \ - SYSCALL_ENTRY( 0x0031, NtGdiEllipse, 40 ) \ - SYSCALL_ENTRY( 0x0032, NtGdiEndDoc, 8 ) \ - SYSCALL_ENTRY( 0x0033, NtGdiEndPage, 8 ) \ - SYSCALL_ENTRY( 0x0034, NtGdiEndPath, 8 ) \ - SYSCALL_ENTRY( 0x0035, NtGdiEnumFonts, 64 ) \ - SYSCALL_ENTRY( 0x0036, NtGdiEqualRgn, 16 ) \ - SYSCALL_ENTRY( 0x0037, NtGdiExcludeClipRect, 40 ) \ - SYSCALL_ENTRY( 0x0038, NtGdiExtCreatePen, 88 ) \ - SYSCALL_ENTRY( 0x0039, NtGdiExtCreateRegion, 24 ) \ - SYSCALL_ENTRY( 0x003a, NtGdiExtEscape, 64 ) \ - SYSCALL_ENTRY( 0x003b, NtGdiExtFloodFill, 40 ) \ - SYSCALL_ENTRY( 0x003c, NtGdiExtGetObjectW, 24 ) \ - SYSCALL_ENTRY( 0x003d, NtGdiExtSelectClipRgn, 24 ) \ - SYSCALL_ENTRY( 0x003e, NtGdiExtTextOutW, 72 ) \ - SYSCALL_ENTRY( 0x003f, NtGdiFillPath, 8 ) \ - SYSCALL_ENTRY( 0x0040, NtGdiFillRgn, 24 ) \ - SYSCALL_ENTRY( 0x0041, NtGdiFlattenPath, 8 ) \ - SYSCALL_ENTRY( 0x0042, NtGdiFlush, 0 ) \ - SYSCALL_ENTRY( 0x0043, NtGdiFontIsLinked, 8 ) \ - SYSCALL_ENTRY( 0x0044, NtGdiFrameRgn, 40 ) \ - SYSCALL_ENTRY( 0x0045, NtGdiGetAndSetDCDword, 32 ) \ - SYSCALL_ENTRY( 0x0046, NtGdiGetAppClipBox, 16 ) \ - SYSCALL_ENTRY( 0x0047, NtGdiGetBitmapBits, 24 ) \ - SYSCALL_ENTRY( 0x0048, NtGdiGetBitmapDimension, 16 ) \ - SYSCALL_ENTRY( 0x0049, NtGdiGetBoundsRect, 24 ) \ - SYSCALL_ENTRY( 0x004a, NtGdiGetCharABCWidthsW, 48 ) \ - SYSCALL_ENTRY( 0x004b, NtGdiGetCharWidthInfo, 16 ) \ - SYSCALL_ENTRY( 0x004c, NtGdiGetCharWidthW, 48 ) \ - SYSCALL_ENTRY( 0x004d, NtGdiGetColorAdjustment, 16 ) \ - SYSCALL_ENTRY( 0x004e, NtGdiGetDCDword, 24 ) \ - SYSCALL_ENTRY( 0x004f, NtGdiGetDCObject, 16 ) \ - SYSCALL_ENTRY( 0x0050, NtGdiGetDCPoint, 24 ) \ - SYSCALL_ENTRY( 0x0051, NtGdiGetDIBitsInternal, 72 ) \ - SYSCALL_ENTRY( 0x0052, NtGdiGetDeviceCaps, 16 ) \ - SYSCALL_ENTRY( 0x0053, NtGdiGetDeviceGammaRamp, 16 ) \ - SYSCALL_ENTRY( 0x0054, NtGdiGetFontData, 40 ) \ - SYSCALL_ENTRY( 0x0055, NtGdiGetFontFileData, 40 ) \ - SYSCALL_ENTRY( 0x0056, NtGdiGetFontFileInfo, 40 ) \ - SYSCALL_ENTRY( 0x0057, NtGdiGetFontUnicodeRanges, 16 ) \ - SYSCALL_ENTRY( 0x0058, NtGdiGetGlyphIndicesW, 40 ) \ - SYSCALL_ENTRY( 0x0059, NtGdiGetGlyphOutline, 64 ) \ - SYSCALL_ENTRY( 0x005a, NtGdiGetKerningPairs, 24 ) \ - SYSCALL_ENTRY( 0x005b, NtGdiGetNearestColor, 16 ) \ - SYSCALL_ENTRY( 0x005c, NtGdiGetNearestPaletteIndex, 16 ) \ - SYSCALL_ENTRY( 0x005d, NtGdiGetOutlineTextMetricsInternalW, 32 ) \ - SYSCALL_ENTRY( 0x005e, NtGdiGetPath, 32 ) \ - SYSCALL_ENTRY( 0x005f, NtGdiGetPixel, 24 ) \ - SYSCALL_ENTRY( 0x0060, NtGdiGetRandomRgn, 24 ) \ - SYSCALL_ENTRY( 0x0061, NtGdiGetRasterizerCaps, 16 ) \ - SYSCALL_ENTRY( 0x0062, NtGdiGetRealizationInfo, 16 ) \ - SYSCALL_ENTRY( 0x0063, NtGdiGetRegionData, 24 ) \ - SYSCALL_ENTRY( 0x0064, NtGdiGetRgnBox, 16 ) \ - SYSCALL_ENTRY( 0x0065, NtGdiGetSpoolMessage, 32 ) \ - SYSCALL_ENTRY( 0x0066, NtGdiGetSystemPaletteUse, 8 ) \ - SYSCALL_ENTRY( 0x0067, NtGdiGetTextCharsetInfo, 24 ) \ - SYSCALL_ENTRY( 0x0068, NtGdiGetTextExtentExW, 64 ) \ - SYSCALL_ENTRY( 0x0069, NtGdiGetTextFaceW, 32 ) \ - SYSCALL_ENTRY( 0x006a, NtGdiGetTextMetricsW, 24 ) \ - SYSCALL_ENTRY( 0x006b, NtGdiGetTransform, 24 ) \ - SYSCALL_ENTRY( 0x006c, NtGdiGradientFill, 48 ) \ - SYSCALL_ENTRY( 0x006d, NtGdiHfontCreate, 40 ) \ - SYSCALL_ENTRY( 0x006e, NtGdiIcmBrushInfo, 64 ) \ - SYSCALL_ENTRY( 0x006f, NtGdiInitSpool, 0 ) \ - SYSCALL_ENTRY( 0x0070, NtGdiIntersectClipRect, 40 ) \ - SYSCALL_ENTRY( 0x0071, NtGdiInvertRgn, 16 ) \ - SYSCALL_ENTRY( 0x0072, NtGdiLineTo, 24 ) \ - SYSCALL_ENTRY( 0x0073, NtGdiMaskBlt, 104 ) \ - SYSCALL_ENTRY( 0x0074, NtGdiModifyWorldTransform, 24 ) \ - SYSCALL_ENTRY( 0x0075, NtGdiMoveTo, 32 ) \ - SYSCALL_ENTRY( 0x0076, NtGdiOffsetClipRgn, 24 ) \ - SYSCALL_ENTRY( 0x0077, NtGdiOffsetRgn, 24 ) \ - SYSCALL_ENTRY( 0x0078, NtGdiOpenDCW, 64 ) \ - SYSCALL_ENTRY( 0x0079, NtGdiPatBlt, 48 ) \ - SYSCALL_ENTRY( 0x007a, NtGdiPathToRegion, 8 ) \ - SYSCALL_ENTRY( 0x007b, NtGdiPlgBlt, 88 ) \ - SYSCALL_ENTRY( 0x007c, NtGdiPolyDraw, 32 ) \ - SYSCALL_ENTRY( 0x007d, NtGdiPolyPolyDraw, 40 ) \ - SYSCALL_ENTRY( 0x007e, NtGdiPtInRegion, 24 ) \ - SYSCALL_ENTRY( 0x007f, NtGdiPtVisible, 24 ) \ - SYSCALL_ENTRY( 0x0080, NtGdiRectInRegion, 16 ) \ - SYSCALL_ENTRY( 0x0081, NtGdiRectVisible, 16 ) \ - SYSCALL_ENTRY( 0x0082, NtGdiRectangle, 40 ) \ - SYSCALL_ENTRY( 0x0083, NtGdiRemoveFontMemResourceEx, 8 ) \ - SYSCALL_ENTRY( 0x0084, NtGdiRemoveFontResourceW, 48 ) \ - SYSCALL_ENTRY( 0x0085, NtGdiResetDC, 40 ) \ - SYSCALL_ENTRY( 0x0086, NtGdiResizePalette, 16 ) \ - SYSCALL_ENTRY( 0x0087, NtGdiRestoreDC, 16 ) \ - SYSCALL_ENTRY( 0x0088, NtGdiRoundRect, 56 ) \ - SYSCALL_ENTRY( 0x0089, NtGdiSaveDC, 8 ) \ - SYSCALL_ENTRY( 0x008a, NtGdiScaleViewportExtEx, 48 ) \ - SYSCALL_ENTRY( 0x008b, NtGdiScaleWindowExtEx, 48 ) \ - SYSCALL_ENTRY( 0x008c, NtGdiSelectBitmap, 16 ) \ - SYSCALL_ENTRY( 0x008d, NtGdiSelectBrush, 16 ) \ - SYSCALL_ENTRY( 0x008e, NtGdiSelectClipPath, 16 ) \ - SYSCALL_ENTRY( 0x008f, NtGdiSelectFont, 16 ) \ - SYSCALL_ENTRY( 0x0090, NtGdiSelectPen, 16 ) \ - SYSCALL_ENTRY( 0x0091, NtGdiSetBitmapBits, 24 ) \ - SYSCALL_ENTRY( 0x0092, NtGdiSetBitmapDimension, 32 ) \ - SYSCALL_ENTRY( 0x0093, NtGdiSetBoundsRect, 24 ) \ - SYSCALL_ENTRY( 0x0094, NtGdiSetBrushOrg, 32 ) \ - SYSCALL_ENTRY( 0x0095, NtGdiSetColorAdjustment, 16 ) \ - SYSCALL_ENTRY( 0x0096, NtGdiSetDIBitsToDeviceInternal, 128 ) \ - SYSCALL_ENTRY( 0x0097, NtGdiSetDeviceGammaRamp, 16 ) \ - SYSCALL_ENTRY( 0x0098, NtGdiSetLayout, 24 ) \ - SYSCALL_ENTRY( 0x0099, NtGdiSetMagicColors, 24 ) \ - SYSCALL_ENTRY( 0x009a, NtGdiSetMetaRgn, 8 ) \ - SYSCALL_ENTRY( 0x009b, NtGdiSetPixel, 32 ) \ - SYSCALL_ENTRY( 0x009c, NtGdiSetPixelFormat, 16 ) \ - SYSCALL_ENTRY( 0x009d, NtGdiSetRectRgn, 40 ) \ - SYSCALL_ENTRY( 0x009e, NtGdiSetSystemPaletteUse, 16 ) \ - SYSCALL_ENTRY( 0x009f, NtGdiSetTextJustification, 24 ) \ - SYSCALL_ENTRY( 0x00a0, NtGdiSetVirtualResolution, 40 ) \ - SYSCALL_ENTRY( 0x00a1, NtGdiStartDoc, 32 ) \ - SYSCALL_ENTRY( 0x00a2, NtGdiStartPage, 8 ) \ - SYSCALL_ENTRY( 0x00a3, NtGdiStretchBlt, 96 ) \ - SYSCALL_ENTRY( 0x00a4, NtGdiStretchDIBitsInternal, 128 ) \ - SYSCALL_ENTRY( 0x00a5, NtGdiStrokeAndFillPath, 8 ) \ - SYSCALL_ENTRY( 0x00a6, NtGdiStrokePath, 8 ) \ - SYSCALL_ENTRY( 0x00a7, NtGdiSwapBuffers, 8 ) \ - SYSCALL_ENTRY( 0x00a8, NtGdiTransformPoints, 40 ) \ - SYSCALL_ENTRY( 0x00a9, NtGdiTransparentBlt, 88 ) \ - SYSCALL_ENTRY( 0x00aa, NtGdiUnrealizeObject, 8 ) \ - SYSCALL_ENTRY( 0x00ab, NtGdiUpdateColors, 8 ) \ - SYSCALL_ENTRY( 0x00ac, NtGdiWidenPath, 8 ) \ - SYSCALL_ENTRY( 0x00ad, NtUserActivateKeyboardLayout, 16 ) \ - SYSCALL_ENTRY( 0x00ae, NtUserAddClipboardFormatListener, 8 ) \ - SYSCALL_ENTRY( 0x00af, NtUserAssociateInputContext, 24 ) \ - SYSCALL_ENTRY( 0x00b0, NtUserAttachThreadInput, 24 ) \ - SYSCALL_ENTRY( 0x00b1, NtUserBeginPaint, 16 ) \ - SYSCALL_ENTRY( 0x00b2, NtUserBuildHimcList, 32 ) \ - SYSCALL_ENTRY( 0x00b3, NtUserBuildHwndList, 64 ) \ - SYSCALL_ENTRY( 0x00b4, NtUserCallHwnd, 16 ) \ - SYSCALL_ENTRY( 0x00b5, NtUserCallHwndParam, 24 ) \ - SYSCALL_ENTRY( 0x00b6, NtUserCallMsgFilter, 16 ) \ - SYSCALL_ENTRY( 0x00b7, NtUserCallNextHookEx, 32 ) \ - SYSCALL_ENTRY( 0x00b8, NtUserCallNoParam, 8 ) \ - SYSCALL_ENTRY( 0x00b9, NtUserCallOneParam, 16 ) \ - SYSCALL_ENTRY( 0x00ba, NtUserCallTwoParam, 24 ) \ - SYSCALL_ENTRY( 0x00bb, NtUserChangeClipboardChain, 16 ) \ - SYSCALL_ENTRY( 0x00bc, NtUserChangeDisplaySettings, 40 ) \ - SYSCALL_ENTRY( 0x00bd, NtUserCheckMenuItem, 24 ) \ - SYSCALL_ENTRY( 0x00be, NtUserChildWindowFromPointEx, 32 ) \ - SYSCALL_ENTRY( 0x00bf, NtUserClipCursor, 8 ) \ - SYSCALL_ENTRY( 0x00c0, NtUserCloseClipboard, 0 ) \ - SYSCALL_ENTRY( 0x00c1, NtUserCloseDesktop, 8 ) \ - SYSCALL_ENTRY( 0x00c2, NtUserCloseWindowStation, 8 ) \ - SYSCALL_ENTRY( 0x00c3, NtUserCopyAcceleratorTable, 24 ) \ - SYSCALL_ENTRY( 0x00c4, NtUserCountClipboardFormats, 0 ) \ - SYSCALL_ENTRY( 0x00c5, NtUserCreateAcceleratorTable, 16 ) \ - SYSCALL_ENTRY( 0x00c6, NtUserCreateCaret, 32 ) \ - SYSCALL_ENTRY( 0x00c7, NtUserCreateDesktopEx, 48 ) \ - SYSCALL_ENTRY( 0x00c8, NtUserCreateInputContext, 8 ) \ - SYSCALL_ENTRY( 0x00c9, NtUserCreateWindowEx, 136 ) \ - SYSCALL_ENTRY( 0x00ca, NtUserCreateWindowStation, 56 ) \ - SYSCALL_ENTRY( 0x00cb, NtUserDeferWindowPosAndBand, 80 ) \ - SYSCALL_ENTRY( 0x00cc, NtUserDeleteMenu, 24 ) \ - SYSCALL_ENTRY( 0x00cd, NtUserDestroyAcceleratorTable, 8 ) \ - SYSCALL_ENTRY( 0x00ce, NtUserDestroyCursor, 16 ) \ - SYSCALL_ENTRY( 0x00cf, NtUserDestroyInputContext, 8 ) \ - SYSCALL_ENTRY( 0x00d0, NtUserDestroyMenu, 8 ) \ - SYSCALL_ENTRY( 0x00d1, NtUserDestroyWindow, 8 ) \ - SYSCALL_ENTRY( 0x00d2, NtUserDisableThreadIme, 8 ) \ - SYSCALL_ENTRY( 0x00d3, NtUserDispatchMessage, 8 ) \ - SYSCALL_ENTRY( 0x00d4, NtUserDisplayConfigGetDeviceInfo, 8 ) \ - SYSCALL_ENTRY( 0x00d5, NtUserDragDetect, 24 ) \ - SYSCALL_ENTRY( 0x00d6, NtUserDragObject, 40 ) \ - SYSCALL_ENTRY( 0x00d7, NtUserDrawCaptionTemp, 56 ) \ - SYSCALL_ENTRY( 0x00d8, NtUserDrawIconEx, 72 ) \ - SYSCALL_ENTRY( 0x00d9, NtUserDrawMenuBarTemp, 40 ) \ - SYSCALL_ENTRY( 0x00da, NtUserEmptyClipboard, 0 ) \ - SYSCALL_ENTRY( 0x00db, NtUserEnableMenuItem, 24 ) \ - SYSCALL_ENTRY( 0x00dc, NtUserEnableMouseInPointer, 8 ) \ - SYSCALL_ENTRY( 0x00dd, NtUserEnableScrollBar, 24 ) \ - SYSCALL_ENTRY( 0x00de, NtUserEndDeferWindowPosEx, 16 ) \ - SYSCALL_ENTRY( 0x00df, NtUserEndMenu, 0 ) \ - SYSCALL_ENTRY( 0x00e0, NtUserEndPaint, 16 ) \ - SYSCALL_ENTRY( 0x00e1, NtUserEnumDisplayDevices, 32 ) \ - SYSCALL_ENTRY( 0x00e2, NtUserEnumDisplayMonitors, 32 ) \ - SYSCALL_ENTRY( 0x00e3, NtUserEnumDisplaySettings, 32 ) \ - SYSCALL_ENTRY( 0x00e4, NtUserExcludeUpdateRgn, 16 ) \ - SYSCALL_ENTRY( 0x00e5, NtUserFindExistingCursorIcon, 24 ) \ - SYSCALL_ENTRY( 0x00e6, NtUserFindWindowEx, 40 ) \ - SYSCALL_ENTRY( 0x00e7, NtUserFlashWindowEx, 8 ) \ - SYSCALL_ENTRY( 0x00e8, NtUserGetAncestor, 16 ) \ - SYSCALL_ENTRY( 0x00e9, NtUserGetAsyncKeyState, 8 ) \ - SYSCALL_ENTRY( 0x00ea, NtUserGetAtomName, 16 ) \ - SYSCALL_ENTRY( 0x00eb, NtUserGetCaretBlinkTime, 0 ) \ - SYSCALL_ENTRY( 0x00ec, NtUserGetCaretPos, 8 ) \ - SYSCALL_ENTRY( 0x00ed, NtUserGetClassInfoEx, 40 ) \ - SYSCALL_ENTRY( 0x00ee, NtUserGetClassName, 24 ) \ - SYSCALL_ENTRY( 0x00ef, NtUserGetClipboardData, 16 ) \ - SYSCALL_ENTRY( 0x00f0, NtUserGetClipboardFormatName, 24 ) \ - SYSCALL_ENTRY( 0x00f1, NtUserGetClipboardOwner, 0 ) \ - SYSCALL_ENTRY( 0x00f2, NtUserGetClipboardSequenceNumber, 0 ) \ - SYSCALL_ENTRY( 0x00f3, NtUserGetClipboardViewer, 0 ) \ - SYSCALL_ENTRY( 0x00f4, NtUserGetCursor, 0 ) \ - SYSCALL_ENTRY( 0x00f5, NtUserGetCursorFrameInfo, 32 ) \ - SYSCALL_ENTRY( 0x00f6, NtUserGetCursorInfo, 8 ) \ - SYSCALL_ENTRY( 0x00f7, NtUserGetDC, 8 ) \ - SYSCALL_ENTRY( 0x00f8, NtUserGetDCEx, 24 ) \ - SYSCALL_ENTRY( 0x00f9, NtUserGetDisplayConfigBufferSizes, 24 ) \ - SYSCALL_ENTRY( 0x00fa, NtUserGetDoubleClickTime, 0 ) \ - SYSCALL_ENTRY( 0x00fb, NtUserGetDpiForMonitor, 32 ) \ - SYSCALL_ENTRY( 0x00fc, NtUserGetForegroundWindow, 0 ) \ - SYSCALL_ENTRY( 0x00fd, NtUserGetGUIThreadInfo, 16 ) \ - SYSCALL_ENTRY( 0x00fe, NtUserGetIconInfo, 48 ) \ - SYSCALL_ENTRY( 0x00ff, NtUserGetIconSize, 32 ) \ - SYSCALL_ENTRY( 0x0100, NtUserGetInternalWindowPos, 24 ) \ - SYSCALL_ENTRY( 0x0101, NtUserGetKeyNameText, 24 ) \ - SYSCALL_ENTRY( 0x0102, NtUserGetKeyState, 8 ) \ - SYSCALL_ENTRY( 0x0103, NtUserGetKeyboardLayout, 8 ) \ - SYSCALL_ENTRY( 0x0104, NtUserGetKeyboardLayoutList, 16 ) \ - SYSCALL_ENTRY( 0x0105, NtUserGetKeyboardLayoutName, 8 ) \ - SYSCALL_ENTRY( 0x0106, NtUserGetKeyboardState, 8 ) \ - SYSCALL_ENTRY( 0x0107, NtUserGetLayeredWindowAttributes, 32 ) \ - SYSCALL_ENTRY( 0x0108, NtUserGetMenuBarInfo, 32 ) \ - SYSCALL_ENTRY( 0x0109, NtUserGetMenuItemRect, 32 ) \ - SYSCALL_ENTRY( 0x010a, NtUserGetMessage, 32 ) \ - SYSCALL_ENTRY( 0x010b, NtUserGetMouseMovePointsEx, 40 ) \ - SYSCALL_ENTRY( 0x010c, NtUserGetObjectInformation, 40 ) \ - SYSCALL_ENTRY( 0x010d, NtUserGetOpenClipboardWindow, 0 ) \ - SYSCALL_ENTRY( 0x010e, NtUserGetPointerInfoList, 64 ) \ - SYSCALL_ENTRY( 0x010f, NtUserGetPriorityClipboardFormat, 16 ) \ - SYSCALL_ENTRY( 0x0110, NtUserGetProcessDpiAwarenessContext, 8 ) \ - SYSCALL_ENTRY( 0x0111, NtUserGetProcessWindowStation, 0 ) \ - SYSCALL_ENTRY( 0x0112, NtUserGetProp, 16 ) \ - SYSCALL_ENTRY( 0x0113, NtUserGetQueueStatus, 8 ) \ - SYSCALL_ENTRY( 0x0114, NtUserGetRawInputBuffer, 24 ) \ - SYSCALL_ENTRY( 0x0115, NtUserGetRawInputData, 40 ) \ - SYSCALL_ENTRY( 0x0116, NtUserGetRawInputDeviceInfo, 32 ) \ - SYSCALL_ENTRY( 0x0117, NtUserGetRawInputDeviceList, 24 ) \ - SYSCALL_ENTRY( 0x0118, NtUserGetRegisteredRawInputDevices, 24 ) \ - SYSCALL_ENTRY( 0x0119, NtUserGetScrollBarInfo, 24 ) \ - SYSCALL_ENTRY( 0x011a, NtUserGetSystemDpiForProcess, 8 ) \ - SYSCALL_ENTRY( 0x011b, NtUserGetSystemMenu, 16 ) \ - SYSCALL_ENTRY( 0x011c, NtUserGetThreadDesktop, 8 ) \ - SYSCALL_ENTRY( 0x011d, NtUserGetTitleBarInfo, 16 ) \ - SYSCALL_ENTRY( 0x011e, NtUserGetUpdateRect, 24 ) \ - SYSCALL_ENTRY( 0x011f, NtUserGetUpdateRgn, 24 ) \ - SYSCALL_ENTRY( 0x0120, NtUserGetUpdatedClipboardFormats, 24 ) \ - SYSCALL_ENTRY( 0x0121, NtUserGetWindowDC, 8 ) \ - SYSCALL_ENTRY( 0x0122, NtUserGetWindowPlacement, 16 ) \ - SYSCALL_ENTRY( 0x0123, NtUserGetWindowRgnEx, 24 ) \ - SYSCALL_ENTRY( 0x0124, NtUserHideCaret, 8 ) \ - SYSCALL_ENTRY( 0x0125, NtUserHiliteMenuItem, 32 ) \ - SYSCALL_ENTRY( 0x0126, NtUserInitializeClientPfnArrays, 32 ) \ - SYSCALL_ENTRY( 0x0127, NtUserInternalGetWindowIcon, 16 ) \ - SYSCALL_ENTRY( 0x0128, NtUserInternalGetWindowText, 24 ) \ - SYSCALL_ENTRY( 0x0129, NtUserInvalidateRect, 24 ) \ - SYSCALL_ENTRY( 0x012a, NtUserInvalidateRgn, 24 ) \ - SYSCALL_ENTRY( 0x012b, NtUserIsClipboardFormatAvailable, 8 ) \ - SYSCALL_ENTRY( 0x012c, NtUserIsMouseInPointerEnabled, 0 ) \ - SYSCALL_ENTRY( 0x012d, NtUserKillTimer, 16 ) \ - SYSCALL_ENTRY( 0x012e, NtUserLockWindowUpdate, 8 ) \ - SYSCALL_ENTRY( 0x012f, NtUserLogicalToPerMonitorDPIPhysicalPoint, 16 ) \ - SYSCALL_ENTRY( 0x0130, NtUserMapVirtualKeyEx, 24 ) \ - SYSCALL_ENTRY( 0x0131, NtUserMenuItemFromPoint, 32 ) \ - SYSCALL_ENTRY( 0x0132, NtUserMessageCall, 56 ) \ - SYSCALL_ENTRY( 0x0133, NtUserMoveWindow, 48 ) \ - SYSCALL_ENTRY( 0x0134, NtUserMsgWaitForMultipleObjectsEx, 40 ) \ - SYSCALL_ENTRY( 0x0135, NtUserNotifyIMEStatus, 16 ) \ - SYSCALL_ENTRY( 0x0136, NtUserNotifyWinEvent, 32 ) \ - SYSCALL_ENTRY( 0x0137, NtUserOpenClipboard, 16 ) \ - SYSCALL_ENTRY( 0x0138, NtUserOpenDesktop, 24 ) \ - SYSCALL_ENTRY( 0x0139, NtUserOpenInputDesktop, 24 ) \ - SYSCALL_ENTRY( 0x013a, NtUserOpenWindowStation, 16 ) \ - SYSCALL_ENTRY( 0x013b, NtUserPeekMessage, 40 ) \ - SYSCALL_ENTRY( 0x013c, NtUserPerMonitorDPIPhysicalToLogicalPoint, 16 ) \ - SYSCALL_ENTRY( 0x013d, NtUserPostMessage, 32 ) \ - SYSCALL_ENTRY( 0x013e, NtUserPostThreadMessage, 32 ) \ - SYSCALL_ENTRY( 0x013f, NtUserPrintWindow, 24 ) \ - SYSCALL_ENTRY( 0x0140, NtUserQueryDisplayConfig, 48 ) \ - SYSCALL_ENTRY( 0x0141, NtUserQueryInputContext, 16 ) \ - SYSCALL_ENTRY( 0x0142, NtUserRealChildWindowFromPoint, 24 ) \ - SYSCALL_ENTRY( 0x0143, NtUserRedrawWindow, 32 ) \ - SYSCALL_ENTRY( 0x0144, NtUserRegisterClassExWOW, 56 ) \ - SYSCALL_ENTRY( 0x0145, NtUserRegisterHotKey, 32 ) \ - SYSCALL_ENTRY( 0x0146, NtUserRegisterRawInputDevices, 24 ) \ - SYSCALL_ENTRY( 0x0147, NtUserReleaseDC, 16 ) \ - SYSCALL_ENTRY( 0x0148, NtUserRemoveClipboardFormatListener, 8 ) \ - SYSCALL_ENTRY( 0x0149, NtUserRemoveMenu, 24 ) \ - SYSCALL_ENTRY( 0x014a, NtUserRemoveProp, 16 ) \ - SYSCALL_ENTRY( 0x014b, NtUserScrollDC, 56 ) \ - SYSCALL_ENTRY( 0x014c, NtUserScrollWindowEx, 64 ) \ - SYSCALL_ENTRY( 0x014d, NtUserSelectPalette, 24 ) \ - SYSCALL_ENTRY( 0x014e, NtUserSendInput, 24 ) \ - SYSCALL_ENTRY( 0x014f, NtUserSetActiveWindow, 8 ) \ - SYSCALL_ENTRY( 0x0150, NtUserSetCapture, 8 ) \ - SYSCALL_ENTRY( 0x0151, NtUserSetClassLong, 32 ) \ - SYSCALL_ENTRY( 0x0152, NtUserSetClassLongPtr, 32 ) \ - SYSCALL_ENTRY( 0x0153, NtUserSetClassWord, 24 ) \ - SYSCALL_ENTRY( 0x0154, NtUserSetClipboardData, 24 ) \ - SYSCALL_ENTRY( 0x0155, NtUserSetClipboardViewer, 8 ) \ - SYSCALL_ENTRY( 0x0156, NtUserSetCursor, 8 ) \ - SYSCALL_ENTRY( 0x0157, NtUserSetCursorIconData, 32 ) \ - SYSCALL_ENTRY( 0x0158, NtUserSetCursorPos, 16 ) \ - SYSCALL_ENTRY( 0x0159, NtUserSetFocus, 8 ) \ - SYSCALL_ENTRY( 0x015a, NtUserSetInternalWindowPos, 32 ) \ - SYSCALL_ENTRY( 0x015b, NtUserSetKeyboardState, 8 ) \ - SYSCALL_ENTRY( 0x015c, NtUserSetLayeredWindowAttributes, 32 ) \ - SYSCALL_ENTRY( 0x015d, NtUserSetMenu, 16 ) \ - SYSCALL_ENTRY( 0x015e, NtUserSetMenuContextHelpId, 16 ) \ - SYSCALL_ENTRY( 0x015f, NtUserSetMenuDefaultItem, 24 ) \ - SYSCALL_ENTRY( 0x0160, NtUserSetObjectInformation, 32 ) \ - SYSCALL_ENTRY( 0x0161, NtUserSetParent, 16 ) \ - SYSCALL_ENTRY( 0x0162, NtUserSetProcessDpiAwarenessContext, 16 ) \ - SYSCALL_ENTRY( 0x0163, NtUserSetProcessWindowStation, 8 ) \ - SYSCALL_ENTRY( 0x0164, NtUserSetProp, 24 ) \ - SYSCALL_ENTRY( 0x0165, NtUserSetScrollInfo, 32 ) \ - SYSCALL_ENTRY( 0x0166, NtUserSetShellWindowEx, 16 ) \ - SYSCALL_ENTRY( 0x0167, NtUserSetSysColors, 24 ) \ - SYSCALL_ENTRY( 0x0168, NtUserSetSystemMenu, 16 ) \ - SYSCALL_ENTRY( 0x0169, NtUserSetSystemTimer, 24 ) \ - SYSCALL_ENTRY( 0x016a, NtUserSetThreadDesktop, 8 ) \ - SYSCALL_ENTRY( 0x016b, NtUserSetTimer, 40 ) \ - SYSCALL_ENTRY( 0x016c, NtUserSetWinEventHook, 64 ) \ - SYSCALL_ENTRY( 0x016d, NtUserSetWindowLong, 32 ) \ - SYSCALL_ENTRY( 0x016e, NtUserSetWindowLongPtr, 32 ) \ - SYSCALL_ENTRY( 0x016f, NtUserSetWindowPlacement, 16 ) \ - SYSCALL_ENTRY( 0x0170, NtUserSetWindowPos, 56 ) \ - SYSCALL_ENTRY( 0x0171, NtUserSetWindowRgn, 24 ) \ - SYSCALL_ENTRY( 0x0172, NtUserSetWindowWord, 24 ) \ - SYSCALL_ENTRY( 0x0173, NtUserSetWindowsHookEx, 48 ) \ - SYSCALL_ENTRY( 0x0174, NtUserShowCaret, 8 ) \ - SYSCALL_ENTRY( 0x0175, NtUserShowCursor, 8 ) \ - SYSCALL_ENTRY( 0x0176, NtUserShowScrollBar, 24 ) \ - SYSCALL_ENTRY( 0x0177, NtUserShowWindow, 16 ) \ - SYSCALL_ENTRY( 0x0178, NtUserShowWindowAsync, 16 ) \ - SYSCALL_ENTRY( 0x0179, NtUserSystemParametersInfo, 32 ) \ - SYSCALL_ENTRY( 0x017a, NtUserSystemParametersInfoForDpi, 40 ) \ - SYSCALL_ENTRY( 0x017b, NtUserThunkedMenuInfo, 16 ) \ - SYSCALL_ENTRY( 0x017c, NtUserThunkedMenuItemInfo, 48 ) \ - SYSCALL_ENTRY( 0x017d, NtUserToUnicodeEx, 56 ) \ - SYSCALL_ENTRY( 0x017e, NtUserTrackMouseEvent, 8 ) \ - SYSCALL_ENTRY( 0x017f, NtUserTrackPopupMenuEx, 48 ) \ - SYSCALL_ENTRY( 0x0180, NtUserTranslateAccelerator, 24 ) \ - SYSCALL_ENTRY( 0x0181, NtUserTranslateMessage, 16 ) \ - SYSCALL_ENTRY( 0x0182, NtUserUnhookWinEvent, 8 ) \ - SYSCALL_ENTRY( 0x0183, NtUserUnhookWindowsHookEx, 8 ) \ - SYSCALL_ENTRY( 0x0184, NtUserUnregisterClass, 24 ) \ - SYSCALL_ENTRY( 0x0185, NtUserUnregisterHotKey, 16 ) \ - SYSCALL_ENTRY( 0x0186, NtUserUpdateInputContext, 24 ) \ - SYSCALL_ENTRY( 0x0187, NtUserUpdateLayeredWindow, 80 ) \ - SYSCALL_ENTRY( 0x0188, NtUserValidateRect, 16 ) \ - SYSCALL_ENTRY( 0x0189, NtUserVkKeyScanEx, 16 ) \ - SYSCALL_ENTRY( 0x018a, NtUserWaitForInputIdle, 24 ) \ - SYSCALL_ENTRY( 0x018b, NtUserWaitMessage, 0 ) \ - SYSCALL_ENTRY( 0x018c, NtUserWindowFromDC, 8 ) \ - SYSCALL_ENTRY( 0x018d, NtUserWindowFromPoint, 16 ) \ - SYSCALL_ENTRY( 0x018e, __wine_get_file_outline_text_metric, 32 ) \ - SYSCALL_ENTRY( 0x018f, __wine_get_icm_profile, 32 ) \ - SYSCALL_ENTRY( 0x0190, __wine_send_input, 24 ) + SYSCALL_ENTRY( 0x0023, NtGdiDdDDIEnumAdapters2, 8 ) \ + SYSCALL_ENTRY( 0x0024, NtGdiDdDDIEscape, 8 ) \ + SYSCALL_ENTRY( 0x0025, NtGdiDdDDIOpenAdapterFromDeviceName, 8 ) \ + SYSCALL_ENTRY( 0x0026, NtGdiDdDDIOpenAdapterFromHdc, 8 ) \ + SYSCALL_ENTRY( 0x0027, NtGdiDdDDIOpenAdapterFromLuid, 8 ) \ + SYSCALL_ENTRY( 0x0028, NtGdiDdDDIQueryAdapterInfo, 8 ) \ + SYSCALL_ENTRY( 0x0029, NtGdiDdDDIQueryStatistics, 8 ) \ + SYSCALL_ENTRY( 0x002a, NtGdiDdDDIQueryVideoMemoryInfo, 8 ) \ + SYSCALL_ENTRY( 0x002b, NtGdiDdDDISetQueuedLimit, 8 ) \ + SYSCALL_ENTRY( 0x002c, NtGdiDdDDISetVidPnSourceOwner, 8 ) \ + SYSCALL_ENTRY( 0x002d, NtGdiDeleteClientObj, 8 ) \ + SYSCALL_ENTRY( 0x002e, NtGdiDeleteObjectApp, 8 ) \ + SYSCALL_ENTRY( 0x002f, NtGdiDescribePixelFormat, 32 ) \ + SYSCALL_ENTRY( 0x0030, NtGdiDoPalette, 48 ) \ + SYSCALL_ENTRY( 0x0031, NtGdiDrawStream, 24 ) \ + SYSCALL_ENTRY( 0x0032, NtGdiEllipse, 40 ) \ + SYSCALL_ENTRY( 0x0033, NtGdiEndDoc, 8 ) \ + SYSCALL_ENTRY( 0x0034, NtGdiEndPage, 8 ) \ + SYSCALL_ENTRY( 0x0035, NtGdiEndPath, 8 ) \ + SYSCALL_ENTRY( 0x0036, NtGdiEnumFonts, 64 ) \ + SYSCALL_ENTRY( 0x0037, NtGdiEqualRgn, 16 ) \ + SYSCALL_ENTRY( 0x0038, NtGdiExcludeClipRect, 40 ) \ + SYSCALL_ENTRY( 0x0039, NtGdiExtCreatePen, 88 ) \ + SYSCALL_ENTRY( 0x003a, NtGdiExtCreateRegion, 24 ) \ + SYSCALL_ENTRY( 0x003b, NtGdiExtEscape, 64 ) \ + SYSCALL_ENTRY( 0x003c, NtGdiExtFloodFill, 40 ) \ + SYSCALL_ENTRY( 0x003d, NtGdiExtGetObjectW, 24 ) \ + SYSCALL_ENTRY( 0x003e, NtGdiExtSelectClipRgn, 24 ) \ + SYSCALL_ENTRY( 0x003f, NtGdiExtTextOutW, 72 ) \ + SYSCALL_ENTRY( 0x0040, NtGdiFillPath, 8 ) \ + SYSCALL_ENTRY( 0x0041, NtGdiFillRgn, 24 ) \ + SYSCALL_ENTRY( 0x0042, NtGdiFlattenPath, 8 ) \ + SYSCALL_ENTRY( 0x0043, NtGdiFlush, 0 ) \ + SYSCALL_ENTRY( 0x0044, NtGdiFontIsLinked, 8 ) \ + SYSCALL_ENTRY( 0x0045, NtGdiFrameRgn, 40 ) \ + SYSCALL_ENTRY( 0x0046, NtGdiGetAndSetDCDword, 32 ) \ + SYSCALL_ENTRY( 0x0047, NtGdiGetAppClipBox, 16 ) \ + SYSCALL_ENTRY( 0x0048, NtGdiGetBitmapBits, 24 ) \ + SYSCALL_ENTRY( 0x0049, NtGdiGetBitmapDimension, 16 ) \ + SYSCALL_ENTRY( 0x004a, NtGdiGetBoundsRect, 24 ) \ + SYSCALL_ENTRY( 0x004b, NtGdiGetCharABCWidthsW, 48 ) \ + SYSCALL_ENTRY( 0x004c, NtGdiGetCharWidthInfo, 16 ) \ + SYSCALL_ENTRY( 0x004d, NtGdiGetCharWidthW, 48 ) \ + SYSCALL_ENTRY( 0x004e, NtGdiGetColorAdjustment, 16 ) \ + SYSCALL_ENTRY( 0x004f, NtGdiGetDCDword, 24 ) \ + SYSCALL_ENTRY( 0x0050, NtGdiGetDCObject, 16 ) \ + SYSCALL_ENTRY( 0x0051, NtGdiGetDCPoint, 24 ) \ + SYSCALL_ENTRY( 0x0052, NtGdiGetDIBitsInternal, 72 ) \ + SYSCALL_ENTRY( 0x0053, NtGdiGetDeviceCaps, 16 ) \ + SYSCALL_ENTRY( 0x0054, NtGdiGetDeviceGammaRamp, 16 ) \ + SYSCALL_ENTRY( 0x0055, NtGdiGetFontData, 40 ) \ + SYSCALL_ENTRY( 0x0056, NtGdiGetFontFileData, 40 ) \ + SYSCALL_ENTRY( 0x0057, NtGdiGetFontFileInfo, 40 ) \ + SYSCALL_ENTRY( 0x0058, NtGdiGetFontUnicodeRanges, 16 ) \ + SYSCALL_ENTRY( 0x0059, NtGdiGetGlyphIndicesW, 40 ) \ + SYSCALL_ENTRY( 0x005a, NtGdiGetGlyphOutline, 64 ) \ + SYSCALL_ENTRY( 0x005b, NtGdiGetKerningPairs, 24 ) \ + SYSCALL_ENTRY( 0x005c, NtGdiGetNearestColor, 16 ) \ + SYSCALL_ENTRY( 0x005d, NtGdiGetNearestPaletteIndex, 16 ) \ + SYSCALL_ENTRY( 0x005e, NtGdiGetOutlineTextMetricsInternalW, 32 ) \ + SYSCALL_ENTRY( 0x005f, NtGdiGetPath, 32 ) \ + SYSCALL_ENTRY( 0x0060, NtGdiGetPixel, 24 ) \ + SYSCALL_ENTRY( 0x0061, NtGdiGetRandomRgn, 24 ) \ + SYSCALL_ENTRY( 0x0062, NtGdiGetRasterizerCaps, 16 ) \ + SYSCALL_ENTRY( 0x0063, NtGdiGetRealizationInfo, 16 ) \ + SYSCALL_ENTRY( 0x0064, NtGdiGetRegionData, 24 ) \ + SYSCALL_ENTRY( 0x0065, NtGdiGetRgnBox, 16 ) \ + SYSCALL_ENTRY( 0x0066, NtGdiGetSpoolMessage, 32 ) \ + SYSCALL_ENTRY( 0x0067, NtGdiGetSystemPaletteUse, 8 ) \ + SYSCALL_ENTRY( 0x0068, NtGdiGetTextCharsetInfo, 24 ) \ + SYSCALL_ENTRY( 0x0069, NtGdiGetTextExtentExW, 64 ) \ + SYSCALL_ENTRY( 0x006a, NtGdiGetTextFaceW, 32 ) \ + SYSCALL_ENTRY( 0x006b, NtGdiGetTextMetricsW, 24 ) \ + SYSCALL_ENTRY( 0x006c, NtGdiGetTransform, 24 ) \ + SYSCALL_ENTRY( 0x006d, NtGdiGradientFill, 48 ) \ + SYSCALL_ENTRY( 0x006e, NtGdiHfontCreate, 40 ) \ + SYSCALL_ENTRY( 0x006f, NtGdiIcmBrushInfo, 64 ) \ + SYSCALL_ENTRY( 0x0070, NtGdiInitSpool, 0 ) \ + SYSCALL_ENTRY( 0x0071, NtGdiIntersectClipRect, 40 ) \ + SYSCALL_ENTRY( 0x0072, NtGdiInvertRgn, 16 ) \ + SYSCALL_ENTRY( 0x0073, NtGdiLineTo, 24 ) \ + SYSCALL_ENTRY( 0x0074, NtGdiMaskBlt, 104 ) \ + SYSCALL_ENTRY( 0x0075, NtGdiModifyWorldTransform, 24 ) \ + SYSCALL_ENTRY( 0x0076, NtGdiMoveTo, 32 ) \ + SYSCALL_ENTRY( 0x0077, NtGdiOffsetClipRgn, 24 ) \ + SYSCALL_ENTRY( 0x0078, NtGdiOffsetRgn, 24 ) \ + SYSCALL_ENTRY( 0x0079, NtGdiOpenDCW, 64 ) \ + SYSCALL_ENTRY( 0x007a, NtGdiPatBlt, 48 ) \ + SYSCALL_ENTRY( 0x007b, NtGdiPathToRegion, 8 ) \ + SYSCALL_ENTRY( 0x007c, NtGdiPlgBlt, 88 ) \ + SYSCALL_ENTRY( 0x007d, NtGdiPolyDraw, 32 ) \ + SYSCALL_ENTRY( 0x007e, NtGdiPolyPolyDraw, 40 ) \ + SYSCALL_ENTRY( 0x007f, NtGdiPtInRegion, 24 ) \ + SYSCALL_ENTRY( 0x0080, NtGdiPtVisible, 24 ) \ + SYSCALL_ENTRY( 0x0081, NtGdiRectInRegion, 16 ) \ + SYSCALL_ENTRY( 0x0082, NtGdiRectVisible, 16 ) \ + SYSCALL_ENTRY( 0x0083, NtGdiRectangle, 40 ) \ + SYSCALL_ENTRY( 0x0084, NtGdiRemoveFontMemResourceEx, 8 ) \ + SYSCALL_ENTRY( 0x0085, NtGdiRemoveFontResourceW, 48 ) \ + SYSCALL_ENTRY( 0x0086, NtGdiResetDC, 40 ) \ + SYSCALL_ENTRY( 0x0087, NtGdiResizePalette, 16 ) \ + SYSCALL_ENTRY( 0x0088, NtGdiRestoreDC, 16 ) \ + SYSCALL_ENTRY( 0x0089, NtGdiRoundRect, 56 ) \ + SYSCALL_ENTRY( 0x008a, NtGdiSaveDC, 8 ) \ + SYSCALL_ENTRY( 0x008b, NtGdiScaleViewportExtEx, 48 ) \ + SYSCALL_ENTRY( 0x008c, NtGdiScaleWindowExtEx, 48 ) \ + SYSCALL_ENTRY( 0x008d, NtGdiSelectBitmap, 16 ) \ + SYSCALL_ENTRY( 0x008e, NtGdiSelectBrush, 16 ) \ + SYSCALL_ENTRY( 0x008f, NtGdiSelectClipPath, 16 ) \ + SYSCALL_ENTRY( 0x0090, NtGdiSelectFont, 16 ) \ + SYSCALL_ENTRY( 0x0091, NtGdiSelectPen, 16 ) \ + SYSCALL_ENTRY( 0x0092, NtGdiSetBitmapBits, 24 ) \ + SYSCALL_ENTRY( 0x0093, NtGdiSetBitmapDimension, 32 ) \ + SYSCALL_ENTRY( 0x0094, NtGdiSetBoundsRect, 24 ) \ + SYSCALL_ENTRY( 0x0095, NtGdiSetBrushOrg, 32 ) \ + SYSCALL_ENTRY( 0x0096, NtGdiSetColorAdjustment, 16 ) \ + SYSCALL_ENTRY( 0x0097, NtGdiSetDIBitsToDeviceInternal, 128 ) \ + SYSCALL_ENTRY( 0x0098, NtGdiSetDeviceGammaRamp, 16 ) \ + SYSCALL_ENTRY( 0x0099, NtGdiSetLayout, 24 ) \ + SYSCALL_ENTRY( 0x009a, NtGdiSetMagicColors, 24 ) \ + SYSCALL_ENTRY( 0x009b, NtGdiSetMetaRgn, 8 ) \ + SYSCALL_ENTRY( 0x009c, NtGdiSetPixel, 32 ) \ + SYSCALL_ENTRY( 0x009d, NtGdiSetPixelFormat, 16 ) \ + SYSCALL_ENTRY( 0x009e, NtGdiSetRectRgn, 40 ) \ + SYSCALL_ENTRY( 0x009f, NtGdiSetSystemPaletteUse, 16 ) \ + SYSCALL_ENTRY( 0x00a0, NtGdiSetTextJustification, 24 ) \ + SYSCALL_ENTRY( 0x00a1, NtGdiSetVirtualResolution, 40 ) \ + SYSCALL_ENTRY( 0x00a2, NtGdiStartDoc, 32 ) \ + SYSCALL_ENTRY( 0x00a3, NtGdiStartPage, 8 ) \ + SYSCALL_ENTRY( 0x00a4, NtGdiStretchBlt, 96 ) \ + SYSCALL_ENTRY( 0x00a5, NtGdiStretchDIBitsInternal, 128 ) \ + SYSCALL_ENTRY( 0x00a6, NtGdiStrokeAndFillPath, 8 ) \ + SYSCALL_ENTRY( 0x00a7, NtGdiStrokePath, 8 ) \ + SYSCALL_ENTRY( 0x00a8, NtGdiSwapBuffers, 8 ) \ + SYSCALL_ENTRY( 0x00a9, NtGdiTransformPoints, 40 ) \ + SYSCALL_ENTRY( 0x00aa, NtGdiTransparentBlt, 88 ) \ + SYSCALL_ENTRY( 0x00ab, NtGdiUnrealizeObject, 8 ) \ + SYSCALL_ENTRY( 0x00ac, NtGdiUpdateColors, 8 ) \ + SYSCALL_ENTRY( 0x00ad, NtGdiWidenPath, 8 ) \ + SYSCALL_ENTRY( 0x00ae, NtUserActivateKeyboardLayout, 16 ) \ + SYSCALL_ENTRY( 0x00af, NtUserAddClipboardFormatListener, 8 ) \ + SYSCALL_ENTRY( 0x00b0, NtUserAssociateInputContext, 24 ) \ + SYSCALL_ENTRY( 0x00b1, NtUserAttachThreadInput, 24 ) \ + SYSCALL_ENTRY( 0x00b2, NtUserBeginPaint, 16 ) \ + SYSCALL_ENTRY( 0x00b3, NtUserBuildHimcList, 32 ) \ + SYSCALL_ENTRY( 0x00b4, NtUserBuildHwndList, 64 ) \ + SYSCALL_ENTRY( 0x00b5, NtUserCallHwnd, 16 ) \ + SYSCALL_ENTRY( 0x00b6, NtUserCallHwndParam, 24 ) \ + SYSCALL_ENTRY( 0x00b7, NtUserCallMsgFilter, 16 ) \ + SYSCALL_ENTRY( 0x00b8, NtUserCallNextHookEx, 32 ) \ + SYSCALL_ENTRY( 0x00b9, NtUserCallNoParam, 8 ) \ + SYSCALL_ENTRY( 0x00ba, NtUserCallOneParam, 16 ) \ + SYSCALL_ENTRY( 0x00bb, NtUserCallTwoParam, 24 ) \ + SYSCALL_ENTRY( 0x00bc, NtUserChangeClipboardChain, 16 ) \ + SYSCALL_ENTRY( 0x00bd, NtUserChangeDisplaySettings, 40 ) \ + SYSCALL_ENTRY( 0x00be, NtUserCheckMenuItem, 24 ) \ + SYSCALL_ENTRY( 0x00bf, NtUserChildWindowFromPointEx, 32 ) \ + SYSCALL_ENTRY( 0x00c0, NtUserClipCursor, 8 ) \ + SYSCALL_ENTRY( 0x00c1, NtUserCloseClipboard, 0 ) \ + SYSCALL_ENTRY( 0x00c2, NtUserCloseDesktop, 8 ) \ + SYSCALL_ENTRY( 0x00c3, NtUserCloseWindowStation, 8 ) \ + SYSCALL_ENTRY( 0x00c4, NtUserCopyAcceleratorTable, 24 ) \ + SYSCALL_ENTRY( 0x00c5, NtUserCountClipboardFormats, 0 ) \ + SYSCALL_ENTRY( 0x00c6, NtUserCreateAcceleratorTable, 16 ) \ + SYSCALL_ENTRY( 0x00c7, NtUserCreateCaret, 32 ) \ + SYSCALL_ENTRY( 0x00c8, NtUserCreateDesktopEx, 48 ) \ + SYSCALL_ENTRY( 0x00c9, NtUserCreateInputContext, 8 ) \ + SYSCALL_ENTRY( 0x00ca, NtUserCreateWindowEx, 136 ) \ + SYSCALL_ENTRY( 0x00cb, NtUserCreateWindowStation, 56 ) \ + SYSCALL_ENTRY( 0x00cc, NtUserDeferWindowPosAndBand, 80 ) \ + SYSCALL_ENTRY( 0x00cd, NtUserDeleteMenu, 24 ) \ + SYSCALL_ENTRY( 0x00ce, NtUserDestroyAcceleratorTable, 8 ) \ + SYSCALL_ENTRY( 0x00cf, NtUserDestroyCursor, 16 ) \ + SYSCALL_ENTRY( 0x00d0, NtUserDestroyInputContext, 8 ) \ + SYSCALL_ENTRY( 0x00d1, NtUserDestroyMenu, 8 ) \ + SYSCALL_ENTRY( 0x00d2, NtUserDestroyWindow, 8 ) \ + SYSCALL_ENTRY( 0x00d3, NtUserDisableThreadIme, 8 ) \ + SYSCALL_ENTRY( 0x00d4, NtUserDispatchMessage, 8 ) \ + SYSCALL_ENTRY( 0x00d5, NtUserDisplayConfigGetDeviceInfo, 8 ) \ + SYSCALL_ENTRY( 0x00d6, NtUserDragDetect, 24 ) \ + SYSCALL_ENTRY( 0x00d7, NtUserDragObject, 40 ) \ + SYSCALL_ENTRY( 0x00d8, NtUserDrawCaptionTemp, 56 ) \ + SYSCALL_ENTRY( 0x00d9, NtUserDrawIconEx, 72 ) \ + SYSCALL_ENTRY( 0x00da, NtUserDrawMenuBarTemp, 40 ) \ + SYSCALL_ENTRY( 0x00db, NtUserEmptyClipboard, 0 ) \ + SYSCALL_ENTRY( 0x00dc, NtUserEnableMenuItem, 24 ) \ + SYSCALL_ENTRY( 0x00dd, NtUserEnableMouseInPointer, 8 ) \ + SYSCALL_ENTRY( 0x00de, NtUserEnableScrollBar, 24 ) \ + SYSCALL_ENTRY( 0x00df, NtUserEndDeferWindowPosEx, 16 ) \ + SYSCALL_ENTRY( 0x00e0, NtUserEndMenu, 0 ) \ + SYSCALL_ENTRY( 0x00e1, NtUserEndPaint, 16 ) \ + SYSCALL_ENTRY( 0x00e2, NtUserEnumDisplayDevices, 32 ) \ + SYSCALL_ENTRY( 0x00e3, NtUserEnumDisplayMonitors, 32 ) \ + SYSCALL_ENTRY( 0x00e4, NtUserEnumDisplaySettings, 32 ) \ + SYSCALL_ENTRY( 0x00e5, NtUserExcludeUpdateRgn, 16 ) \ + SYSCALL_ENTRY( 0x00e6, NtUserFindExistingCursorIcon, 24 ) \ + SYSCALL_ENTRY( 0x00e7, NtUserFindWindowEx, 40 ) \ + SYSCALL_ENTRY( 0x00e8, NtUserFlashWindowEx, 8 ) \ + SYSCALL_ENTRY( 0x00e9, NtUserGetAncestor, 16 ) \ + SYSCALL_ENTRY( 0x00ea, NtUserGetAsyncKeyState, 8 ) \ + SYSCALL_ENTRY( 0x00eb, NtUserGetAtomName, 16 ) \ + SYSCALL_ENTRY( 0x00ec, NtUserGetCaretBlinkTime, 0 ) \ + SYSCALL_ENTRY( 0x00ed, NtUserGetCaretPos, 8 ) \ + SYSCALL_ENTRY( 0x00ee, NtUserGetClassInfoEx, 40 ) \ + SYSCALL_ENTRY( 0x00ef, NtUserGetClassName, 24 ) \ + SYSCALL_ENTRY( 0x00f0, NtUserGetClipboardData, 16 ) \ + SYSCALL_ENTRY( 0x00f1, NtUserGetClipboardFormatName, 24 ) \ + SYSCALL_ENTRY( 0x00f2, NtUserGetClipboardOwner, 0 ) \ + SYSCALL_ENTRY( 0x00f3, NtUserGetClipboardSequenceNumber, 0 ) \ + SYSCALL_ENTRY( 0x00f4, NtUserGetClipboardViewer, 0 ) \ + SYSCALL_ENTRY( 0x00f5, NtUserGetCursor, 0 ) \ + SYSCALL_ENTRY( 0x00f6, NtUserGetCursorFrameInfo, 32 ) \ + SYSCALL_ENTRY( 0x00f7, NtUserGetCursorInfo, 8 ) \ + SYSCALL_ENTRY( 0x00f8, NtUserGetDC, 8 ) \ + SYSCALL_ENTRY( 0x00f9, NtUserGetDCEx, 24 ) \ + SYSCALL_ENTRY( 0x00fa, NtUserGetDisplayConfigBufferSizes, 24 ) \ + SYSCALL_ENTRY( 0x00fb, NtUserGetDoubleClickTime, 0 ) \ + SYSCALL_ENTRY( 0x00fc, NtUserGetDpiForMonitor, 32 ) \ + SYSCALL_ENTRY( 0x00fd, NtUserGetForegroundWindow, 0 ) \ + SYSCALL_ENTRY( 0x00fe, NtUserGetGUIThreadInfo, 16 ) \ + SYSCALL_ENTRY( 0x00ff, NtUserGetIconInfo, 48 ) \ + SYSCALL_ENTRY( 0x0100, NtUserGetIconSize, 32 ) \ + SYSCALL_ENTRY( 0x0101, NtUserGetInternalWindowPos, 24 ) \ + SYSCALL_ENTRY( 0x0102, NtUserGetKeyNameText, 24 ) \ + SYSCALL_ENTRY( 0x0103, NtUserGetKeyState, 8 ) \ + SYSCALL_ENTRY( 0x0104, NtUserGetKeyboardLayout, 8 ) \ + SYSCALL_ENTRY( 0x0105, NtUserGetKeyboardLayoutList, 16 ) \ + SYSCALL_ENTRY( 0x0106, NtUserGetKeyboardLayoutName, 8 ) \ + SYSCALL_ENTRY( 0x0107, NtUserGetKeyboardState, 8 ) \ + SYSCALL_ENTRY( 0x0108, NtUserGetLayeredWindowAttributes, 32 ) \ + SYSCALL_ENTRY( 0x0109, NtUserGetMenuBarInfo, 32 ) \ + SYSCALL_ENTRY( 0x010a, NtUserGetMenuItemRect, 32 ) \ + SYSCALL_ENTRY( 0x010b, NtUserGetMessage, 32 ) \ + SYSCALL_ENTRY( 0x010c, NtUserGetMouseMovePointsEx, 40 ) \ + SYSCALL_ENTRY( 0x010d, NtUserGetObjectInformation, 40 ) \ + SYSCALL_ENTRY( 0x010e, NtUserGetOpenClipboardWindow, 0 ) \ + SYSCALL_ENTRY( 0x010f, NtUserGetPointerInfoList, 64 ) \ + SYSCALL_ENTRY( 0x0110, NtUserGetPriorityClipboardFormat, 16 ) \ + SYSCALL_ENTRY( 0x0111, NtUserGetProcessDpiAwarenessContext, 8 ) \ + SYSCALL_ENTRY( 0x0112, NtUserGetProcessWindowStation, 0 ) \ + SYSCALL_ENTRY( 0x0113, NtUserGetProp, 16 ) \ + SYSCALL_ENTRY( 0x0114, NtUserGetQueueStatus, 8 ) \ + SYSCALL_ENTRY( 0x0115, NtUserGetRawInputBuffer, 24 ) \ + SYSCALL_ENTRY( 0x0116, NtUserGetRawInputData, 40 ) \ + SYSCALL_ENTRY( 0x0117, NtUserGetRawInputDeviceInfo, 32 ) \ + SYSCALL_ENTRY( 0x0118, NtUserGetRawInputDeviceList, 24 ) \ + SYSCALL_ENTRY( 0x0119, NtUserGetRegisteredRawInputDevices, 24 ) \ + SYSCALL_ENTRY( 0x011a, NtUserGetScrollBarInfo, 24 ) \ + SYSCALL_ENTRY( 0x011b, NtUserGetSystemDpiForProcess, 8 ) \ + SYSCALL_ENTRY( 0x011c, NtUserGetSystemMenu, 16 ) \ + SYSCALL_ENTRY( 0x011d, NtUserGetThreadDesktop, 8 ) \ + SYSCALL_ENTRY( 0x011e, NtUserGetTitleBarInfo, 16 ) \ + SYSCALL_ENTRY( 0x011f, NtUserGetUpdateRect, 24 ) \ + SYSCALL_ENTRY( 0x0120, NtUserGetUpdateRgn, 24 ) \ + SYSCALL_ENTRY( 0x0121, NtUserGetUpdatedClipboardFormats, 24 ) \ + SYSCALL_ENTRY( 0x0122, NtUserGetWindowDC, 8 ) \ + SYSCALL_ENTRY( 0x0123, NtUserGetWindowPlacement, 16 ) \ + SYSCALL_ENTRY( 0x0124, NtUserGetWindowRgnEx, 24 ) \ + SYSCALL_ENTRY( 0x0125, NtUserHideCaret, 8 ) \ + SYSCALL_ENTRY( 0x0126, NtUserHiliteMenuItem, 32 ) \ + SYSCALL_ENTRY( 0x0127, NtUserInitializeClientPfnArrays, 32 ) \ + SYSCALL_ENTRY( 0x0128, NtUserInternalGetWindowIcon, 16 ) \ + SYSCALL_ENTRY( 0x0129, NtUserInternalGetWindowText, 24 ) \ + SYSCALL_ENTRY( 0x012a, NtUserInvalidateRect, 24 ) \ + SYSCALL_ENTRY( 0x012b, NtUserInvalidateRgn, 24 ) \ + SYSCALL_ENTRY( 0x012c, NtUserIsClipboardFormatAvailable, 8 ) \ + SYSCALL_ENTRY( 0x012d, NtUserIsMouseInPointerEnabled, 0 ) \ + SYSCALL_ENTRY( 0x012e, NtUserKillTimer, 16 ) \ + SYSCALL_ENTRY( 0x012f, NtUserLockWindowUpdate, 8 ) \ + SYSCALL_ENTRY( 0x0130, NtUserLogicalToPerMonitorDPIPhysicalPoint, 16 ) \ + SYSCALL_ENTRY( 0x0131, NtUserMapVirtualKeyEx, 24 ) \ + SYSCALL_ENTRY( 0x0132, NtUserMenuItemFromPoint, 32 ) \ + SYSCALL_ENTRY( 0x0133, NtUserMessageCall, 56 ) \ + SYSCALL_ENTRY( 0x0134, NtUserMoveWindow, 48 ) \ + SYSCALL_ENTRY( 0x0135, NtUserMsgWaitForMultipleObjectsEx, 40 ) \ + SYSCALL_ENTRY( 0x0136, NtUserNotifyIMEStatus, 16 ) \ + SYSCALL_ENTRY( 0x0137, NtUserNotifyWinEvent, 32 ) \ + SYSCALL_ENTRY( 0x0138, NtUserOpenClipboard, 16 ) \ + SYSCALL_ENTRY( 0x0139, NtUserOpenDesktop, 24 ) \ + SYSCALL_ENTRY( 0x013a, NtUserOpenInputDesktop, 24 ) \ + SYSCALL_ENTRY( 0x013b, NtUserOpenWindowStation, 16 ) \ + SYSCALL_ENTRY( 0x013c, NtUserPeekMessage, 40 ) \ + SYSCALL_ENTRY( 0x013d, NtUserPerMonitorDPIPhysicalToLogicalPoint, 16 ) \ + SYSCALL_ENTRY( 0x013e, NtUserPostMessage, 32 ) \ + SYSCALL_ENTRY( 0x013f, NtUserPostThreadMessage, 32 ) \ + SYSCALL_ENTRY( 0x0140, NtUserPrintWindow, 24 ) \ + SYSCALL_ENTRY( 0x0141, NtUserQueryDisplayConfig, 48 ) \ + SYSCALL_ENTRY( 0x0142, NtUserQueryInputContext, 16 ) \ + SYSCALL_ENTRY( 0x0143, NtUserRealChildWindowFromPoint, 24 ) \ + SYSCALL_ENTRY( 0x0144, NtUserRedrawWindow, 32 ) \ + SYSCALL_ENTRY( 0x0145, NtUserRegisterClassExWOW, 56 ) \ + SYSCALL_ENTRY( 0x0146, NtUserRegisterHotKey, 32 ) \ + SYSCALL_ENTRY( 0x0147, NtUserRegisterRawInputDevices, 24 ) \ + SYSCALL_ENTRY( 0x0148, NtUserReleaseDC, 16 ) \ + SYSCALL_ENTRY( 0x0149, NtUserRemoveClipboardFormatListener, 8 ) \ + SYSCALL_ENTRY( 0x014a, NtUserRemoveMenu, 24 ) \ + SYSCALL_ENTRY( 0x014b, NtUserRemoveProp, 16 ) \ + SYSCALL_ENTRY( 0x014c, NtUserScrollDC, 56 ) \ + SYSCALL_ENTRY( 0x014d, NtUserScrollWindowEx, 64 ) \ + SYSCALL_ENTRY( 0x014e, NtUserSelectPalette, 24 ) \ + SYSCALL_ENTRY( 0x014f, NtUserSendInput, 24 ) \ + SYSCALL_ENTRY( 0x0150, NtUserSetActiveWindow, 8 ) \ + SYSCALL_ENTRY( 0x0151, NtUserSetCapture, 8 ) \ + SYSCALL_ENTRY( 0x0152, NtUserSetClassLong, 32 ) \ + SYSCALL_ENTRY( 0x0153, NtUserSetClassLongPtr, 32 ) \ + SYSCALL_ENTRY( 0x0154, NtUserSetClassWord, 24 ) \ + SYSCALL_ENTRY( 0x0155, NtUserSetClipboardData, 24 ) \ + SYSCALL_ENTRY( 0x0156, NtUserSetClipboardViewer, 8 ) \ + SYSCALL_ENTRY( 0x0157, NtUserSetCursor, 8 ) \ + SYSCALL_ENTRY( 0x0158, NtUserSetCursorIconData, 32 ) \ + SYSCALL_ENTRY( 0x0159, NtUserSetCursorPos, 16 ) \ + SYSCALL_ENTRY( 0x015a, NtUserSetFocus, 8 ) \ + SYSCALL_ENTRY( 0x015b, NtUserSetInternalWindowPos, 32 ) \ + SYSCALL_ENTRY( 0x015c, NtUserSetKeyboardState, 8 ) \ + SYSCALL_ENTRY( 0x015d, NtUserSetLayeredWindowAttributes, 32 ) \ + SYSCALL_ENTRY( 0x015e, NtUserSetMenu, 16 ) \ + SYSCALL_ENTRY( 0x015f, NtUserSetMenuContextHelpId, 16 ) \ + SYSCALL_ENTRY( 0x0160, NtUserSetMenuDefaultItem, 24 ) \ + SYSCALL_ENTRY( 0x0161, NtUserSetObjectInformation, 32 ) \ + SYSCALL_ENTRY( 0x0162, NtUserSetParent, 16 ) \ + SYSCALL_ENTRY( 0x0163, NtUserSetProcessDpiAwarenessContext, 16 ) \ + SYSCALL_ENTRY( 0x0164, NtUserSetProcessWindowStation, 8 ) \ + SYSCALL_ENTRY( 0x0165, NtUserSetProp, 24 ) \ + SYSCALL_ENTRY( 0x0166, NtUserSetScrollInfo, 32 ) \ + SYSCALL_ENTRY( 0x0167, NtUserSetShellWindowEx, 16 ) \ + SYSCALL_ENTRY( 0x0168, NtUserSetSysColors, 24 ) \ + SYSCALL_ENTRY( 0x0169, NtUserSetSystemMenu, 16 ) \ + SYSCALL_ENTRY( 0x016a, NtUserSetSystemTimer, 24 ) \ + SYSCALL_ENTRY( 0x016b, NtUserSetThreadDesktop, 8 ) \ + SYSCALL_ENTRY( 0x016c, NtUserSetTimer, 40 ) \ + SYSCALL_ENTRY( 0x016d, NtUserSetWinEventHook, 64 ) \ + SYSCALL_ENTRY( 0x016e, NtUserSetWindowLong, 32 ) \ + SYSCALL_ENTRY( 0x016f, NtUserSetWindowLongPtr, 32 ) \ + SYSCALL_ENTRY( 0x0170, NtUserSetWindowPlacement, 16 ) \ + SYSCALL_ENTRY( 0x0171, NtUserSetWindowPos, 56 ) \ + SYSCALL_ENTRY( 0x0172, NtUserSetWindowRgn, 24 ) \ + SYSCALL_ENTRY( 0x0173, NtUserSetWindowWord, 24 ) \ + SYSCALL_ENTRY( 0x0174, NtUserSetWindowsHookEx, 48 ) \ + SYSCALL_ENTRY( 0x0175, NtUserShowCaret, 8 ) \ + SYSCALL_ENTRY( 0x0176, NtUserShowCursor, 8 ) \ + SYSCALL_ENTRY( 0x0177, NtUserShowScrollBar, 24 ) \ + SYSCALL_ENTRY( 0x0178, NtUserShowWindow, 16 ) \ + SYSCALL_ENTRY( 0x0179, NtUserShowWindowAsync, 16 ) \ + SYSCALL_ENTRY( 0x017a, NtUserSystemParametersInfo, 32 ) \ + SYSCALL_ENTRY( 0x017b, NtUserSystemParametersInfoForDpi, 40 ) \ + SYSCALL_ENTRY( 0x017c, NtUserThunkedMenuInfo, 16 ) \ + SYSCALL_ENTRY( 0x017d, NtUserThunkedMenuItemInfo, 48 ) \ + SYSCALL_ENTRY( 0x017e, NtUserToUnicodeEx, 56 ) \ + SYSCALL_ENTRY( 0x017f, NtUserTrackMouseEvent, 8 ) \ + SYSCALL_ENTRY( 0x0180, NtUserTrackPopupMenuEx, 48 ) \ + SYSCALL_ENTRY( 0x0181, NtUserTranslateAccelerator, 24 ) \ + SYSCALL_ENTRY( 0x0182, NtUserTranslateMessage, 16 ) \ + SYSCALL_ENTRY( 0x0183, NtUserUnhookWinEvent, 8 ) \ + SYSCALL_ENTRY( 0x0184, NtUserUnhookWindowsHookEx, 8 ) \ + SYSCALL_ENTRY( 0x0185, NtUserUnregisterClass, 24 ) \ + SYSCALL_ENTRY( 0x0186, NtUserUnregisterHotKey, 16 ) \ + SYSCALL_ENTRY( 0x0187, NtUserUpdateInputContext, 24 ) \ + SYSCALL_ENTRY( 0x0188, NtUserUpdateLayeredWindow, 80 ) \ + SYSCALL_ENTRY( 0x0189, NtUserValidateRect, 16 ) \ + SYSCALL_ENTRY( 0x018a, NtUserVkKeyScanEx, 16 ) \ + SYSCALL_ENTRY( 0x018b, NtUserWaitForInputIdle, 24 ) \ + SYSCALL_ENTRY( 0x018c, NtUserWaitMessage, 0 ) \ + SYSCALL_ENTRY( 0x018d, NtUserWindowFromDC, 8 ) \ + SYSCALL_ENTRY( 0x018e, NtUserWindowFromPoint, 16 ) \ + SYSCALL_ENTRY( 0x018f, __wine_get_file_outline_text_metric, 32 ) \ + SYSCALL_ENTRY( 0x0190, __wine_get_icm_profile, 32 ) \ + SYSCALL_ENTRY( 0x0191, __wine_send_input, 24 ) diff --git a/dlls/win32u/win32u.spec b/dlls/win32u/win32u.spec index 24dccb6ec1d..76a60bf1dc8 100644 --- a/dlls/win32u/win32u.spec +++ b/dlls/win32u/win32u.spec @@ -223,7 +223,7 @@ @ stub NtGdiDdDDIDispMgrSourceOperation @ stub NtGdiDdDDIDispMgrTargetOperation @ stub NtGdiDdDDIEnumAdapters -@ stub NtGdiDdDDIEnumAdapters2 +@ stdcall -syscall NtGdiDdDDIEnumAdapters2(ptr) @ stdcall -syscall NtGdiDdDDIEscape(ptr) @ stub NtGdiDdDDIEvict @ stub NtGdiDdDDIExtractBundleObject diff --git a/dlls/wow64win/gdi.c b/dlls/wow64win/gdi.c index 36af173405c..993580c32c3 100644 --- a/dlls/wow64win/gdi.c +++ b/dlls/wow64win/gdi.c @@ -507,6 +507,28 @@ NTSTATUS WINAPI wow64_NtGdiDdDDIDestroyDevice( UINT *args ) return NtGdiDdDDIDestroyDevice( desc ); }
+NTSTATUS WINAPI wow64_NtGdiDdDDIEnumAdapters2( UINT *args ) +{ + struct + { + ULONG NumAdapters; + ULONG pAdapters; + } *desc32 = get_ptr( &args ); + D3DKMT_ENUMADAPTERS2 desc; + NTSTATUS status; + + if (!desc32) return STATUS_INVALID_PARAMETER; + + desc.NumAdapters = desc32->NumAdapters; + desc.pAdapters = UlongToPtr( desc32->pAdapters ); + + status = NtGdiDdDDIEnumAdapters2( &desc ); + + desc32->NumAdapters = desc.NumAdapters; + + return status; +} + NTSTATUS WINAPI wow64_NtGdiDdDDIEscape( UINT *args ) { const struct diff --git a/include/ddk/d3dkmthk.h b/include/ddk/d3dkmthk.h index 6f92f9e4fe5..ee0b6f3a6c3 100644 --- a/include/ddk/d3dkmthk.h +++ b/include/ddk/d3dkmthk.h @@ -785,6 +785,7 @@ NTSTATUS WINAPI D3DKMTCreateDCFromMemory(D3DKMT_CREATEDCFROMMEMORY *desc); NTSTATUS WINAPI D3DKMTDestroyDCFromMemory(const D3DKMT_DESTROYDCFROMMEMORY *desc); NTSTATUS WINAPI D3DKMTDestroyDevice(const D3DKMT_DESTROYDEVICE *desc); NTSTATUS WINAPI D3DKMTEscape( const D3DKMT_ESCAPE *desc ); +NTSTATUS WINAPI D3DKMTEnumAdapters2(D3DKMT_ENUMADAPTERS2 *desc); NTSTATUS WINAPI D3DKMTOpenAdapterFromGdiDisplayName(D3DKMT_OPENADAPTERFROMGDIDISPLAYNAME *desc); NTSTATUS WINAPI D3DKMTOpenAdapterFromHdc( D3DKMT_OPENADAPTERFROMHDC *desc ); NTSTATUS WINAPI D3DKMTOpenAdapterFromLuid( D3DKMT_OPENADAPTERFROMLUID * desc ); diff --git a/include/ntgdi.h b/include/ntgdi.h index c2cb1924730..50973535c7a 100644 --- a/include/ntgdi.h +++ b/include/ntgdi.h @@ -481,6 +481,7 @@ W32KAPI NTSTATUS WINAPI NtGdiDdDDICreateDCFromMemory( D3DKMT_CREATEDCFROMMEMORY W32KAPI NTSTATUS WINAPI NtGdiDdDDICreateDevice( D3DKMT_CREATEDEVICE *desc ); W32KAPI NTSTATUS WINAPI NtGdiDdDDIDestroyDCFromMemory( const D3DKMT_DESTROYDCFROMMEMORY *desc ); W32KAPI NTSTATUS WINAPI NtGdiDdDDIDestroyDevice( const D3DKMT_DESTROYDEVICE *desc ); +W32KAPI NTSTATUS WINAPI NtGdiDdDDIEnumAdapters2( D3DKMT_ENUMADAPTERS2 *desc ); W32KAPI NTSTATUS WINAPI NtGdiDdDDIEscape( const D3DKMT_ESCAPE *desc ); W32KAPI NTSTATUS WINAPI NtGdiDdDDIOpenAdapterFromHdc( D3DKMT_OPENADAPTERFROMHDC *desc ); W32KAPI NTSTATUS WINAPI NtGdiDdDDIOpenAdapterFromDeviceName( D3DKMT_OPENADAPTERFROMDEVICENAME *desc );
From: Krzysztof Bogacki krzysztof.bogacki@leancode.pl
Signed-off-by: Krzysztof Bogacki krzysztof.bogacki@leancode.pl --- dlls/win32u/sysparams.c | 73 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 72 insertions(+), 1 deletion(-)
diff --git a/dlls/win32u/sysparams.c b/dlls/win32u/sysparams.c index c494a95aff9..fc188091c41 100644 --- a/dlls/win32u/sysparams.c +++ b/dlls/win32u/sysparams.c @@ -233,6 +233,13 @@ struct display_device WCHAR device_key[128]; /* DeviceKey in DISPLAY_DEVICEW */ };
+struct gpu +{ + struct list entry; + LUID luid; + unsigned int adapter_count; +}; + struct adapter { LONG refcount; @@ -275,6 +282,7 @@ struct monitor struct edid_monitor_info edid_info; };
+static struct list gpus = LIST_INIT(gpus); static struct list adapters = LIST_INIT(adapters); static struct list monitors = LIST_INIT(monitors); static INT64 last_query_display_time; @@ -1672,6 +1680,7 @@ static void clear_display_devices(void) { struct adapter *adapter; struct monitor *monitor; + struct gpu *gpu;
if (list_head( &monitors ) == &virtual_monitor.entry) { @@ -1693,19 +1702,32 @@ static void clear_display_devices(void) list_remove( &adapter->entry ); adapter_release( adapter ); } + + while (!list_empty( &gpus )) + { + gpu = LIST_ENTRY( list_head( &gpus ), struct gpu, entry ); + list_remove( &gpu->entry ); + free( gpu ); + } }
static BOOL update_display_cache_from_registry(void) { + char buffer[1024]; DWORD adapter_id, monitor_id, monitor_count = 0, size; - KEY_BASIC_INFORMATION key; + KEY_VALUE_PARTIAL_INFORMATION *value = (void *)buffer; + KEY_BASIC_INFORMATION key, *key2 = (void *)buffer; + HKEY pci_key, device_key, gpu_key, prop_key; struct adapter *adapter; struct monitor *monitor, *monitor2; HANDLE mutex = NULL; NTSTATUS status; + struct gpu *gpu; BOOL ret;
/* If user driver did initialize the registry, then exit */ + if (!enum_key && !(enum_key = reg_open_key( NULL, enum_keyW, sizeof(enum_keyW) ))) + return FALSE; if (!video_key && !(video_key = reg_open_key( NULL, devicemap_video_keyW, sizeof(devicemap_video_keyW) ))) return FALSE; @@ -1761,6 +1783,55 @@ static BOOL update_display_cache_from_registry(void) } }
+ if ((pci_key = reg_open_key( enum_key, pciW, sizeof(pciW) ))) + { + unsigned int i = 0; + + while (!NtEnumerateKey( pci_key, i++, KeyBasicInformation, key2, sizeof(buffer), &size )) + { + unsigned int j = 0; + + if (!(device_key = reg_open_key( pci_key, key2->Name, key2->NameLength ))) + continue; + + while (!NtEnumerateKey( device_key, j++, KeyBasicInformation, key2, sizeof(buffer), &size )) + { + if (!(gpu_key = reg_open_key( device_key, key2->Name, key2->NameLength ))) + continue; + + size = query_reg_value( gpu_key, class_guidW, value, sizeof(buffer) ); + if (size != sizeof(guid_devclass_displayW) + || wcscmp( (WCHAR *)value->Data, guid_devclass_displayW ) + || !(gpu = calloc( 1, sizeof(*gpu) ))) + { + NtClose( gpu_key ); + continue; + } + + if ((prop_key = reg_open_key( gpu_key, devpropkey_gpu_luidW, + sizeof(devpropkey_gpu_luidW) ))) + { + if (query_reg_value( prop_key, NULL, value, sizeof(buffer) ) == sizeof(LUID)) + gpu->luid = *(const LUID *)value->Data; + NtClose( prop_key ); + } + + LIST_FOR_EACH_ENTRY(adapter, &adapters, struct adapter, entry) + { + if (!memcmp( &adapter->gpu_luid, &gpu->luid, sizeof(LUID) )) + gpu->adapter_count++; + } + + list_add_tail( &gpus, &gpu->entry ); + NtClose( gpu_key ); + } + + NtClose( device_key ); + } + + NtClose( pci_key ); + } + if ((ret = !list_empty( &adapters ) && !list_empty( &monitors ))) last_query_display_time = key.LastWriteTime.QuadPart; pthread_mutex_unlock( &display_lock );
From: Krzysztof Bogacki krzysztof.bogacki@leancode.pl
Signed-off-by: Krzysztof Bogacki krzysztof.bogacki@leancode.pl --- dlls/gdi32/tests/driver.c | 2 +- dlls/win32u/sysparams.c | 78 ++++++++++++++++++++++++++++++++++++++- 2 files changed, 77 insertions(+), 3 deletions(-)
diff --git a/dlls/gdi32/tests/driver.c b/dlls/gdi32/tests/driver.c index f4967f023be..e70740eb20f 100644 --- a/dlls/gdi32/tests/driver.c +++ b/dlls/gdi32/tests/driver.c @@ -199,7 +199,7 @@ static void test_D3DKMTEnumAdapters2(void)
if (!pD3DKMTEnumAdapters2 || pD3DKMTEnumAdapters2(&enum_adapters_2_desc) == STATUS_PROCEDURE_NOT_FOUND) { - skip("D3DKMTEnumAdapters2() is unavailable.\n"); + win_skip("D3DKMTEnumAdapters2() is unavailable.\n"); return; }
diff --git a/dlls/win32u/sysparams.c b/dlls/win32u/sysparams.c index fc188091c41..d2d9860fe98 100644 --- a/dlls/win32u/sysparams.c +++ b/dlls/win32u/sysparams.c @@ -6651,6 +6651,80 @@ NTSTATUS WINAPI NtUserDisplayConfigGetDeviceInfo( DISPLAYCONFIG_DEVICE_INFO_HEAD */ NTSTATUS WINAPI NtGdiDdDDIEnumAdapters2( D3DKMT_ENUMADAPTERS2 *desc ) { - FIXME(" (%p): stub\n", desc ); - return STATUS_PROCEDURE_NOT_FOUND; + D3DKMT_OPENADAPTERFROMLUID open_adapter_from_luid; + static const ULONG max_adapters = 34; + D3DKMT_CLOSEADAPTER close_adapter; + NTSTATUS status = STATUS_SUCCESS; + ULONG idx = 0, count; + struct gpu *gpu; + + TRACE( "(%p)\n", desc ); + + if (!desc) return STATUS_INVALID_PARAMETER; + + if (!desc->pAdapters) + { + desc->NumAdapters = max_adapters; + return STATUS_SUCCESS; + } + + if (!lock_display_devices()) return STATUS_UNSUCCESSFUL; + + if ((count = list_count( &gpus )) > max_adapters) + { + WARN( "Too many adapters (%u), only up to %u can be enumerated.\n", + (unsigned int)count, (unsigned int)max_adapters ); + count = max_adapters; + } + + if (count > desc->NumAdapters) + { + status = STATUS_BUFFER_TOO_SMALL; + goto done; + } + + LIST_FOR_EACH_ENTRY( gpu, &gpus, struct gpu, entry ) + { + if (gpu->luid.LowPart || gpu->luid.HighPart) + { + open_adapter_from_luid.AdapterLuid = gpu->luid; + + /* give the GDI driver a chance to be notified about new adapter handle */ + if (NT_SUCCESS( NtGdiDdDDIOpenAdapterFromLuid( &open_adapter_from_luid ) )) + { + desc->pAdapters[idx].hAdapter = open_adapter_from_luid.hAdapter; + desc->pAdapters[idx].AdapterLuid = gpu->luid; + desc->pAdapters[idx].NumOfSources = gpu->adapter_count; + desc->pAdapters[idx].bPrecisePresentRegionsPreferred = FALSE; + idx += 1; + continue; + } + else + { + ERR( "Failed to open adapter %u from LUID.\n", (unsigned int)idx ); + } + } + else + { + ERR( "Adapter %u does not have a LUID.\n", (unsigned int)idx ); + } + + while (idx--) + { + close_adapter.hAdapter = desc->pAdapters[idx].hAdapter; + NtGdiDdDDICloseAdapter( &close_adapter ); + } + + memset( desc->pAdapters, 0, desc->NumAdapters * sizeof(D3DKMT_ADAPTERINFO) ); + status = STATUS_UNSUCCESSFUL; + break; + } + +done: + if (status == STATUS_SUCCESS) + desc->NumAdapters = idx; + + unlock_display_devices(); + + return status; }
On Fri Feb 2 22:42:57 2024 +0000, Krzysztof Bogacki wrote:
changed this line in [version 6 of the diff](/wine/wine/-/merge_requests/4857/diffs?diff_id=97527&start_sha=3a9937dd0dddba48eec28c1e2afa4a32c11fd582#519bad39b244429996d3f48980a90aaee1e90c48_211_211)
It is zero-initialized, but won't be zeroed at this point. In line 200 I'm checking `pD3DKMTEnumAdapters2(&enum_adapters_2_desc) == STATUS_PROCEDURE_NOT_FOUND` to see if current version of Wine/Windows implements this API. I chose to pass a valid pointer instead of `NULL` when doing the availability check because I didn't want to consider a stub that does `return params ? STATUS_PROCEDURE_NOT_FOUND : STATUS_INVALID_PARAMETER;` to be a valid implementation worth running the rest of this test against (and this would be pretty much how wow64 stub would behave unless we changed it to `if (!desc32) return NtGdiDdDDIEnumAdapters2( NULL );`). But if it's not a stub, the structure will pretty much already contain the maximum number of supported adapters, so I'm zeroing it again.
You are right, however, that this is not necessary. If `pAdapters` is `NULL`, Windows (and Wine) will ignore whatever was passed in `NumAdapters` and always overwrite it with the expected result. With this in mind, we can:
1. Just remove this memset. We'd be then implicitly relying on `pAdapters` staying `NULL` between calls but this is probably fine. 1. Let this memset stay or change it to just `enum_adapters_2_desc->pAdapters = NULL;`. 1. Save the result of first `pD3DKMTEnumAdapters2(&enum_adapters_2_desc)` in `status` and if it succeeds, immediately consider the "Query the array to allocate" part of the test to have succeeded as well, effectively reusing the result. So something like this:
```c { … if (!pD3DKMTEnumAdapters2) { skip("D3DKMTEnumAdapters2() is missing.\n"); return; }
/* Query the array to allocate */ status = pD3DKMTEnumAdapters2(&enum_adapters_2_desc); if (status == STATUS_PROCEDURE_NOT_FOUND) { skip("D3DKMTEnumAdapters2() is not supported.\n"); return; }
ok(status == STATUS_SUCCESS, "Got unexpected return code %#lx.\n", status); … /* at the very end of the test, Invalid parameters */ status = pD3DKMTEnumAdapters2(NULL); ok(status == STATUS_INVALID_PARAMETER, "Got unexpected return code %#lx.\n", status); } ```
… which would make this test more similar to how the test for `D3DKMTOpenAdapterFromHdc` is written. For now I'll go with simple removal of this `memset` but if you prefer another solution, let me know and I'll change it.
On Fri Feb 2 03:32:50 2024 +0000, Zhiyi Zhang wrote:
Let rename the subject to "gdi32: Add D3DKMTEnumAdapters2() stub."
Okay, done.
On Fri Feb 2 22:42:58 2024 +0000, Krzysztof Bogacki wrote:
changed this line in [version 6 of the diff](/wine/wine/-/merge_requests/4857/diffs?diff_id=97527&start_sha=3a9937dd0dddba48eec28c1e2afa4a32c11fd582#85770a8b187bd82db4dbb9a2b8a5f34616049d0f_1772_1804)
Oh whoops, my bad, I juggled this allocation a few times not too sure where would be the best place to put it and somehow I committed both, sorry about that! :sweat_smile:
I've removed the one below and inlined this one into the `if` above to reduce the branching since the action to take was the same in both cases.
On Fri Feb 2 22:42:59 2024 +0000, Krzysztof Bogacki wrote:
changed this line in [version 6 of the diff](/wine/wine/-/merge_requests/4857/diffs?diff_id=97527&start_sha=3a9937dd0dddba48eec28c1e2afa4a32c11fd582#85770a8b187bd82db4dbb9a2b8a5f34616049d0f_6710_6699)
Good point. `struct gpu` now has a `unsigned int adapter_count;` member with the number of adapters that have matching `gpu_luid`. In order to make it possible to construct the entire `struct gpu` in one go, I've moved the code that does it below adapter and monitor initialization in `update_display_cache_from_registry`.
An alternative would be to instead search matching GPUs when adding adapters and bumping their `adapter_count` there but that would make my changes less… self-contained.
(I also took the opportunity to reorder assignments above to match the order of members in the struct.)
New revision, this time with:
* one less `memset` in tests * the commit adding initial stub renamed as suggested * construction of GPUs cache moved below construction of adapters cache * first `calloc` moved a bit * second (duplicate) `calloc` removed * number of matching adapters added to cache * assignments to `pAdapters[i]` reordered
On Fri Feb 2 23:54:43 2024 +0000, Krzysztof Bogacki wrote:
It is zero-initialized, but won't be zeroed at this point. In line 200 I'm checking `pD3DKMTEnumAdapters2(&enum_adapters_2_desc) == STATUS_PROCEDURE_NOT_FOUND` to see if current version of Wine/Windows implements this API. I chose to pass a valid pointer instead of `NULL` when doing the availability check because I didn't want to consider a stub that does `return params ? STATUS_PROCEDURE_NOT_FOUND : STATUS_INVALID_PARAMETER;` to be a valid implementation worth running the rest of this test against (and this would be pretty much how wow64 stub would behave unless we changed it to `if (!desc32) return NtGdiDdDDIEnumAdapters2( NULL );`). But if it's not a stub, the structure will pretty much already contain the maximum number of supported adapters, so I'm zeroing it again. You are right, however, that this is not necessary. If `pAdapters` is `NULL`, Windows (and Wine) will ignore whatever was passed in `NumAdapters` and always overwrite it with the expected result. With this in mind, we can:
- Just remove this memset. We'd be then implicitly relying on
`pAdapters` staying `NULL` between calls but this is probably fine.
- Let this memset stay or change it to just
`enum_adapters_2_desc->pAdapters = NULL;`.
- Save the result of first
`pD3DKMTEnumAdapters2(&enum_adapters_2_desc)` in `status` and if it succeeds, immediately consider the "Query the array to allocate" part of the test to have succeeded as well, effectively reusing the result. So something like this:
{ … if (!pD3DKMTEnumAdapters2) { skip("D3DKMTEnumAdapters2() is missing.\n"); return; } /* Query the array to allocate */ status = pD3DKMTEnumAdapters2(&enum_adapters_2_desc); if (status == STATUS_PROCEDURE_NOT_FOUND) { skip("D3DKMTEnumAdapters2() is not supported.\n"); return; } ok(status == STATUS_SUCCESS, "Got unexpected return code %#lx.\n", status); … /* at the very end of the test, Invalid parameters */ status = pD3DKMTEnumAdapters2(NULL); ok(status == STATUS_INVALID_PARAMETER, "Got unexpected return code %#lx.\n", status); }
… which would make this test more similar to how the test for `D3DKMTOpenAdapterFromHdc` is written. For now I'll go with simple removal of this `memset` but if you prefer another solution, let me know and I'll change it.
Let's keep the memset(0) then.