This implements most of `D3DKMTEnumAdapters2` function, which is [indirectly used by all games using NVIDIA Streamline SDK](https://github.com/NVIDIAGameWorks/Streamline/blob/7ac42e47c7dd55b5b6dd6176c...). Having it (and [one another D3DKMT function](https://github.com/NVIDIAGameWorks/Streamline/blob/7ac42e47c7dd55b5b6dd6176c...) but one thing at a time) working is a requirement to enable some interesting features like DLFG (also known as DLSS-G / DLSS Frame Generation). Although currently not supported by NVIDIA on Unix systems, the lack of these functions also prevents [some game modifications that hijack DLSS-G](https://github.com/Nukem9/dlssg-to-fsr3) from working altogether because the adapter check still has to be performed.
The way I chose to tackle this was adding a new GDI driver function which winex11 then implements. This mirrors how `D3DKMTOpenAdapterFromLuid` is implemented, but a not-so-short conversation I had with Paul Gofman made me realize that there could be a better way to do this by tapping into win32u's adapter cache. More on that closer to the end, first I'll explain my initial idea.
The handle assignment is quite tricky; because this is done in win32u, we need to prepare as many handles as the number of elements in the array we were passed. However, this array can be much larger than the actual number of GPUs in the system (Windows 10 machine I ran some tests on always responded with 32 `NumAdapters` when given `NULL` in `pAdapters` even though there were just 2 adapters available). I chose to resolve this by allocating that many handles, then calling GDI driver function while still holding the mutex, then freeing unused handles from the end of the list. Some possible alternatives would be:
* Not holding the mutex while calling GDI driver function. We would still allocate more handles than needed but other functions would not be blocked while winex11 is doing its thing. We would then acquire the mutex again to free unused handles, which would require us to search for them first because it would no longer be guaranteed that they are at the end of the list. * Calling the GDI driver function more than once, the first time to actually enumerate GPUs and the second time to give their handles GDI driver to save them, which would complicate the API contract between win32u and GDI driver quite a bit. * Pass an additional parameter to let GDI driver allocate handles itself. It could be something as simple as pointer to the next handle variable, or something as complicated as an allocator function than can do anything win32 needs it to do (plus maybe a deallocator function to handle errors). But I suppose it would still require the mutex to be held for the entire call. * … or something else I didn't think of.
There are two more members returned in each adapter info struct, `NumOfSources` and `bPrecisePresentRegionsPreferred`. I'm not exactly sure how am I supposed to handle them so for now they will always be left zeroed. VidPN and related stuff are just too arcane for me, sorry 😅
However, Paul suggested that I don't actually need to add a new GDI driver function to implement this. If I considered win32u's adapter list as maintained in `sysparams.c` to be the source of truth here, I could avoid calling into GDI driver and just perform the enumeration within win32u. But with how other D3DKMT functions are currently implemented, this will almost surely cause issues when interacting with some of them; e.g. handles returned by `EnumAdapters2` wouldn't be usable with `D3DKMTQueryVideoMemoryInfo` because that function _does_ forward most of the heavy lifting to be done by the GDI driver and winex11 would be unaware of what the given handle represents, hence unable to query appropriate `VkPhysicalDevice`.
(In the short term this could probably be avoided by calling `D3DKMTOpenAdapterFromLuid` for each enumerated LUID but this in turn relies on adapters actually having valid LUIDs assigned. On my current machine, Intel/Nvidia dual GPU laptop running Plasma Wayland, mainline Wine without some patches pulled from Proton seems to have… issues doing this properly…)
On the other hand, if everything in D3DKMT family of functions already went through win32u caches, this would have been much simpler. _Probably._ But because it does not, I feel like I should ask: why was it done like that? If there was a specific reason for avoiding win32u caches, what would be the correct way of implementing `EnumAdapters2` then? Following the way of `OpenAdapterFromLuid` and mapping UUIDs to LUIDs manually via the registry (my first/existing version, which also makes this fully reliant on Vulkan) or rewriting all this to go through win32u adapter cache? If the latter, then shouldn't existing D3DKMT functions perhaps be rewritten to use the cache as well and avoid calling GDI driver/Vulkan?
I'm open to suggestions so please let me know if you have any.
(I'm aware Wine is currently in code freeze, but I wanted to send this to gather some early feedback, I'm fine with waiting a few weeks before this becomes eligible for merging.)
From: Krzysztof Bogacki krzysztof.bogacki@leancode.pl
Signed-off-by: Krzysztof Bogacki krzysztof.bogacki@leancode.pl --- dlls/gdi32/tests/driver.c | 68 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+)
diff --git a/dlls/gdi32/tests/driver.c b/dlls/gdi32/tests/driver.c index 0c976a87c62..b816712ffdc 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,71 @@ 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) + { + /* This is a stub in some drivers (e.g. nulldrv) */ + 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 */ + memset(&enum_adapters_2_desc, 0, sizeof(enum_adapters_2_desc)); + 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"); + + /* Allocate the array */ + enum_adapters_2_desc.pAdapters = calloc(enum_adapters_2_desc.NumAdapters + 1, sizeof(D3DKMT_ADAPTERINFO)); + ok(!!enum_adapters_2_desc.pAdapters, "Expect not null.\n"); + + /* Enumerate adapters */ + status = pD3DKMTEnumAdapters2(&enum_adapters_2_desc); + + if (status == STATUS_UNSUCCESSFUL) + { + /* fails on Wine without a Vulkan adapter */ + skip("No adapters found.\n"); + free(enum_adapters_2_desc.pAdapters); + return; + } + + 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"); + + /* on Wine, not every adapter is successfully assigned a LUID */ + flaky_wine 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); + } + + ok(!enum_adapters_2_desc.pAdapters[i].hAdapter, "Expect null.\n"); + + /* 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 +1143,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 +1155,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/driver.c | 9 + dlls/win32u/main.c | 5 + 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/driver.c b/dlls/win32u/driver.c index bc3409a9e34..94fe968f2fe 100644 --- a/dlls/win32u/driver.c +++ b/dlls/win32u/driver.c @@ -1513,6 +1513,15 @@ NTSTATUS WINAPI NtGdiDdDDICloseAdapter( const D3DKMT_CLOSEADAPTER *desc ) return status; }
+/****************************************************************************** + * NtGdiDdDDIEnumAdapters2 (win32u.@) + */ +NTSTATUS WINAPI NtGdiDdDDIEnumAdapters2( D3DKMT_ENUMADAPTERS2 *desc ) +{ + FIXME("(%p): stub\n", desc); + return STATUS_PROCEDURE_NOT_FOUND; +} + /****************************************************************************** * NtGdiDdDDIOpenAdapterFromDeviceName (win32u.@) */ 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/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 2d30bdd8777..918a4ad4ed2 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/dibdrv/dc.c | 2 + dlls/win32u/driver.c | 75 ++++++++++++++++++++++++++++++++++++-- dlls/win32u/emfdrv.c | 1 + dlls/win32u/font.c | 1 + dlls/win32u/path.c | 1 + dlls/winex11.drv/xrender.c | 1 + include/wine/gdi_driver.h | 1 + 7 files changed, 78 insertions(+), 4 deletions(-)
diff --git a/dlls/win32u/dibdrv/dc.c b/dlls/win32u/dibdrv/dc.c index 7fe4b765a78..0a4b0ac3da0 100644 --- a/dlls/win32u/dibdrv/dc.c +++ b/dlls/win32u/dibdrv/dc.c @@ -709,6 +709,7 @@ const struct gdi_dc_funcs dib_driver = NULL, /* pUnrealizePalette */ NULL, /* pD3DKMTCheckVidPnExclusiveOwnership */ NULL, /* pD3DKMTCloseAdapter */ + NULL, /* pD3DKMTEnumAdapters2 */ NULL, /* pD3DKMTOpenAdapterFromLuid */ NULL, /* pD3DKMTQueryVideoMemoryInfo */ NULL, /* pD3DKMTSetVidPnSourceOwner */ @@ -1270,6 +1271,7 @@ static const struct gdi_dc_funcs window_driver = NULL, /* pUnrealizePalette */ NULL, /* pD3DKMTCheckVidPnExclusiveOwnership */ NULL, /* pD3DKMTCloseAdapter */ + NULL, /* pD3DKMTEnumAdapters2 */ NULL, /* pD3DKMTOpenAdapterFromLuid */ NULL, /* pD3DKMTQueryVideoMemoryInfo */ NULL, /* pD3DKMTSetVidPnSourceOwner */ diff --git a/dlls/win32u/driver.c b/dlls/win32u/driver.c index 94fe968f2fe..4f524baa3e2 100644 --- a/dlls/win32u/driver.c +++ b/dlls/win32u/driver.c @@ -54,6 +54,7 @@ static struct user_driver_funcs null_user_driver;
static struct list d3dkmt_adapters = LIST_INIT( d3dkmt_adapters ); static struct list d3dkmt_devices = LIST_INIT( d3dkmt_devices ); +static D3DKMT_HANDLE adapter_handle_start = 0;
static pthread_mutex_t driver_lock = PTHREAD_MUTEX_INITIALIZER; static WCHAR driver_load_error[80]; @@ -549,6 +550,11 @@ static NTSTATUS nulldrv_D3DKMTCloseAdapter( const D3DKMT_CLOSEADAPTER *desc ) return STATUS_PROCEDURE_NOT_FOUND; }
+static NTSTATUS nulldrv_D3DKMTEnumAdapters2( D3DKMT_ENUMADAPTERS2 *desc ) +{ + return STATUS_PROCEDURE_NOT_FOUND; +} + static NTSTATUS nulldrv_D3DKMTOpenAdapterFromLuid( D3DKMT_OPENADAPTERFROMLUID *desc ) { return STATUS_PROCEDURE_NOT_FOUND; @@ -657,6 +663,7 @@ const struct gdi_dc_funcs null_driver = nulldrv_UnrealizePalette, /* pUnrealizePalette */ nulldrv_D3DKMTCheckVidPnExclusiveOwnership, /* pD3DKMTCheckVidPnExclusiveOwnership */ nulldrv_D3DKMTCloseAdapter, /* pD3DKMTCloseAdapter */ + nulldrv_D3DKMTEnumAdapters2, /* pD3DKMTEnumAdapters2 */ nulldrv_D3DKMTOpenAdapterFromLuid, /* pD3DKMTOpenAdapterFromLuid */ nulldrv_D3DKMTQueryVideoMemoryInfo, /* pD3DKMTQueryVideoMemoryInfo */ nulldrv_D3DKMTSetVidPnSourceOwner, /* pD3DKMTSetVidPnSourceOwner */ @@ -1518,8 +1525,69 @@ NTSTATUS WINAPI NtGdiDdDDICloseAdapter( const D3DKMT_CLOSEADAPTER *desc ) */ NTSTATUS WINAPI NtGdiDdDDIEnumAdapters2( D3DKMT_ENUMADAPTERS2 *desc ) { - FIXME("(%p): stub\n", desc); - return STATUS_PROCEDURE_NOT_FOUND; + D3DKMT_ADAPTERINFO *adapter_infos = NULL; + struct d3dkmt_adapter *adapter, *prev; + D3DKMT_ENUMADAPTERS2 local_desc; + NTSTATUS status; + ULONG i; + + TRACE("(%p)\n", desc); + + if (!desc) return STATUS_INVALID_PARAMETER; + + if (!get_display_driver()->pD3DKMTEnumAdapters2) return STATUS_PROCEDURE_NOT_FOUND; + + if (!desc->NumAdapters || !desc->pAdapters) + /* Querying the size or zero length array, no need to allocate handles */ + return get_display_driver()->pD3DKMTEnumAdapters2( desc ); + + if (!(adapter_infos = calloc( desc->NumAdapters, sizeof(*adapter_infos) ))) return STATUS_NO_MEMORY; + + pthread_mutex_lock( &driver_lock ); + + for (i = 0; i < desc->NumAdapters; ++i) + { + if (!(adapter = malloc( sizeof( *adapter ) ))) + { + pthread_mutex_unlock( &driver_lock ); + free( adapter_infos ); + return STATUS_NO_MEMORY; + } + + adapter_infos[i].hAdapter = adapter->handle = ++adapter_handle_start; + list_add_tail( &d3dkmt_adapters, &adapter->entry ); + } + + /* This lets us avoid modifying desc->pAdapters until we know how many elements we are allowed to touch */ + local_desc.NumAdapters = desc->NumAdapters; + local_desc.pAdapters = adapter_infos; + status = get_display_driver()->pD3DKMTEnumAdapters2( &local_desc ); + + if (status != STATUS_SUCCESS) + /* Driver failed, free all the adapter handles we allocated earlier */ + local_desc.NumAdapters = 0; + + /* Some (or all) handles may remain unused, free them */ + LIST_FOR_EACH_ENTRY_SAFE_REV( adapter, prev, &d3dkmt_adapters, struct d3dkmt_adapter, entry ) + { + if (i-- <= local_desc.NumAdapters) break; + + list_remove( &adapter->entry ); + free( adapter ); + } + + pthread_mutex_unlock( &driver_lock ); + + if (status == STATUS_SUCCESS) + { + /* Update desc only once the call succeeded and we know the result */ + if ((desc->NumAdapters = local_desc.NumAdapters)) + memcpy( desc->pAdapters, adapter_infos, local_desc.NumAdapters * sizeof( *adapter_infos ) ); + } + + free( adapter_infos ); + + return status; }
/****************************************************************************** @@ -1547,13 +1615,12 @@ NTSTATUS WINAPI NtGdiDdDDIOpenAdapterFromDeviceName( D3DKMT_OPENADAPTERFROMDEVIC */ NTSTATUS WINAPI NtGdiDdDDIOpenAdapterFromLuid( D3DKMT_OPENADAPTERFROMLUID *desc ) { - static D3DKMT_HANDLE handle_start = 0; struct d3dkmt_adapter *adapter;
if (!(adapter = malloc( sizeof( *adapter ) ))) return STATUS_NO_MEMORY;
pthread_mutex_lock( &driver_lock ); - desc->hAdapter = adapter->handle = ++handle_start; + desc->hAdapter = adapter->handle = ++adapter_handle_start; list_add_tail( &d3dkmt_adapters, &adapter->entry ); pthread_mutex_unlock( &driver_lock );
diff --git a/dlls/win32u/emfdrv.c b/dlls/win32u/emfdrv.c index 069ad9d1297..9c07f9ef341 100644 --- a/dlls/win32u/emfdrv.c +++ b/dlls/win32u/emfdrv.c @@ -521,6 +521,7 @@ static const struct gdi_dc_funcs emfdrv_driver = NULL, /* pUnrealizePalette */ NULL, /* pD3DKMTCheckVidPnExclusiveOwnership */ NULL, /* pD3DKMTCloseAdapter */ + NULL, /* pD3DKMTEnumAdapters2 */ NULL, /* pD3DKMTOpenAdapterFromLuid */ NULL, /* pD3DKMTQueryVideoMemoryInfo */ NULL, /* pD3DKMTSetVidPnSourceOwner */ diff --git a/dlls/win32u/font.c b/dlls/win32u/font.c index af1a9b97f67..2f84ff37e39 100644 --- a/dlls/win32u/font.c +++ b/dlls/win32u/font.c @@ -4774,6 +4774,7 @@ const struct gdi_dc_funcs font_driver = NULL, /* pUnrealizePalette */ NULL, /* pD3DKMTCheckVidPnExclusiveOwnership */ NULL, /* pD3DKMTCloseAdapter */ + NULL, /* pD3DKMTEnumAdapters2 */ NULL, /* pD3DKMTOpenAdapterFromLuid */ NULL, /* pD3DKMTQueryVideoMemoryInfo */ NULL, /* pD3DKMTSetVidPnSourceOwner */ diff --git a/dlls/win32u/path.c b/dlls/win32u/path.c index e0c96f5ef6f..6d494a92233 100644 --- a/dlls/win32u/path.c +++ b/dlls/win32u/path.c @@ -2120,6 +2120,7 @@ const struct gdi_dc_funcs path_driver = NULL, /* pUnrealizePalette */ NULL, /* pD3DKMTCheckVidPnExclusiveOwnership */ NULL, /* pD3DKMTCloseAdapter */ + NULL, /* pD3DKMTEnumAdapters2 */ NULL, /* pD3DKMTOpenAdapterFromLuid */ NULL, /* pD3DKMTQueryVideoMemoryInfo */ NULL, /* pD3DKMTSetVidPnSourceOwner */ diff --git a/dlls/winex11.drv/xrender.c b/dlls/winex11.drv/xrender.c index 74723915fc5..7e605f9b3d5 100644 --- a/dlls/winex11.drv/xrender.c +++ b/dlls/winex11.drv/xrender.c @@ -2236,6 +2236,7 @@ static const struct gdi_dc_funcs xrender_funcs = NULL, /* pUnrealizePalette */ NULL, /* pD3DKMTCheckVidPnExclusiveOwnership */ NULL, /* pD3DKMTCloseAdapter */ + NULL, /* pD3DKMTEnumAdapters2 */ NULL, /* pD3DKMTOpenAdapterFromLuid */ NULL, /* pD3DKMTQueryVideoMemoryInfo */ NULL, /* pD3DKMTSetVidPnSourceOwner */ diff --git a/include/wine/gdi_driver.h b/include/wine/gdi_driver.h index 26562bfef2b..ba37098f7ad 100644 --- a/include/wine/gdi_driver.h +++ b/include/wine/gdi_driver.h @@ -168,6 +168,7 @@ struct gdi_dc_funcs BOOL (*pUnrealizePalette)(HPALETTE); NTSTATUS (*pD3DKMTCheckVidPnExclusiveOwnership)(const D3DKMT_CHECKVIDPNEXCLUSIVEOWNERSHIP *); NTSTATUS (*pD3DKMTCloseAdapter)(const D3DKMT_CLOSEADAPTER *); + NTSTATUS (*pD3DKMTEnumAdapters2)(D3DKMT_ENUMADAPTERS2 *); NTSTATUS (*pD3DKMTOpenAdapterFromLuid)(D3DKMT_OPENADAPTERFROMLUID *); NTSTATUS (*pD3DKMTQueryVideoMemoryInfo)(D3DKMT_QUERYVIDEOMEMORYINFO *); NTSTATUS (*pD3DKMTSetVidPnSourceOwner)(const D3DKMT_SETVIDPNSOURCEOWNER *);
From: Krzysztof Bogacki krzysztof.bogacki@leancode.pl
Signed-off-by: Krzysztof Bogacki krzysztof.bogacki@leancode.pl --- dlls/winex11.drv/init.c | 1 + dlls/winex11.drv/x11drv.h | 1 + dlls/winex11.drv/x11drv_main.c | 248 +++++++++++++++++++++++++++++++++ 3 files changed, 250 insertions(+)
diff --git a/dlls/winex11.drv/init.c b/dlls/winex11.drv/init.c index 2cef05d2140..647a0d8da8c 100644 --- a/dlls/winex11.drv/init.c +++ b/dlls/winex11.drv/init.c @@ -386,6 +386,7 @@ static const struct user_driver_funcs x11drv_funcs = .dc_funcs.pUnrealizePalette = X11DRV_UnrealizePalette, .dc_funcs.pD3DKMTCheckVidPnExclusiveOwnership = X11DRV_D3DKMTCheckVidPnExclusiveOwnership, .dc_funcs.pD3DKMTCloseAdapter = X11DRV_D3DKMTCloseAdapter, + .dc_funcs.pD3DKMTEnumAdapters2 = X11DRV_D3DKMTEnumAdapters2, .dc_funcs.pD3DKMTOpenAdapterFromLuid = X11DRV_D3DKMTOpenAdapterFromLuid, .dc_funcs.pD3DKMTQueryVideoMemoryInfo = X11DRV_D3DKMTQueryVideoMemoryInfo, .dc_funcs.pD3DKMTSetVidPnSourceOwner = X11DRV_D3DKMTSetVidPnSourceOwner, diff --git a/dlls/winex11.drv/x11drv.h b/dlls/winex11.drv/x11drv.h index c80e4b3d3c9..7ea88400d3f 100644 --- a/dlls/winex11.drv/x11drv.h +++ b/dlls/winex11.drv/x11drv.h @@ -160,6 +160,7 @@ extern BOOL X11DRV_Chord( PHYSDEV dev, INT left, INT top, INT right, INT bottom, INT xstart, INT ystart, INT xend, INT yend ); extern NTSTATUS X11DRV_D3DKMTCheckVidPnExclusiveOwnership( const D3DKMT_CHECKVIDPNEXCLUSIVEOWNERSHIP *desc ); extern NTSTATUS X11DRV_D3DKMTCloseAdapter( const D3DKMT_CLOSEADAPTER *desc ); +extern NTSTATUS X11DRV_D3DKMTEnumAdapters2( D3DKMT_ENUMADAPTERS2 *desc ); extern NTSTATUS X11DRV_D3DKMTOpenAdapterFromLuid( D3DKMT_OPENADAPTERFROMLUID *desc ); extern NTSTATUS X11DRV_D3DKMTQueryVideoMemoryInfo( D3DKMT_QUERYVIDEOMEMORYINFO *desc ); extern NTSTATUS X11DRV_D3DKMTSetVidPnSourceOwner( const D3DKMT_SETVIDPNSOURCEOWNER *desc ); diff --git a/dlls/winex11.drv/x11drv_main.c b/dlls/winex11.drv/x11drv_main.c index d1f31081b09..59b6095d8f8 100644 --- a/dlls/winex11.drv/x11drv_main.c +++ b/dlls/winex11.drv/x11drv_main.c @@ -1019,6 +1019,254 @@ static void release_display_device_init_mutex(HANDLE mutex) NtClose( mutex ); }
+/* Find the LUID corresponding to a Vulkan device UUID */ +static BOOL get_luid_from_vulkan_uuid( const GUID *uuid, LUID *luid ) +{ + static const WCHAR class_guidW[] = {'C','l','a','s','s','G','U','I','D',0}; + static const WCHAR devpropkey_gpu_vulkan_uuidW[] = + { + 'P','r','o','p','e','r','t','i','e','s', + '\','{','2','3','3','A','9','E','F','3','-','A','F','C','4','-','4','A','B','D', + '-','B','5','6','4','-','C','3','2','F','2','1','F','1','5','3','5','C','}', + '\','0','0','0','2' + }; + static const WCHAR devpropkey_gpu_luidW[] = + { + 'P','r','o','p','e','r','t','i','e','s', + '\','{','6','0','B','1','9','3','C','B','-','5','2','7','6','-','4','D','0','F', + '-','9','6','F','C','-','F','1','7','3','A','B','A','D','3','E','C','6','}', + '\','0','0','0','2' + }; + static const WCHAR guid_devclass_displayW[] = + {'{','4','D','3','6','E','9','6','8','-','E','3','2','5','-','1','1','C','E','-', + 'B','F','C','1','-','0','8','0','0','2','B','E','1','0','3','1','8','}',0}; + static const WCHAR pci_keyW[] = + { + '\','R','e','g','i','s','t','r','y', + '\','M','a','c','h','i','n','e', + '\','S','y','s','t','e','m', + '\','C','u','r','r','e','n','t','C','o','n','t','r','o','l','S','e','t', + '\','E','n','u','m', + '\','P','C','I' + }; + char buffer[4096]; + KEY_VALUE_PARTIAL_INFORMATION *value = (void *)buffer; + HKEY subkey, device_key, prop_key, pci_key; + KEY_NODE_INFORMATION *key = (void *)buffer; + DWORD size, i = 0; + HANDLE mutex; + + mutex = get_display_device_init_mutex(); + + pci_key = reg_open_key(NULL, pci_keyW, sizeof(pci_keyW)); + while (!NtEnumerateKey(pci_key, i++, KeyNodeInformation, key, sizeof(buffer), &size)) + { + unsigned int j = 0; + + if (!(subkey = reg_open_key(pci_key, key->Name, key->NameLength))) + continue; + + while (!NtEnumerateKey(subkey, j++, KeyNodeInformation, key, sizeof(buffer), &size)) + { + if (!(device_key = reg_open_key(subkey, key->Name, key->NameLength))) + continue; + + size = query_reg_value(device_key, class_guidW, value, sizeof(buffer)); + if (size != sizeof(guid_devclass_displayW) || + wcscmp((WCHAR *)value->Data, guid_devclass_displayW)) + { + NtClose(device_key); + continue; + } + + if (!(prop_key = reg_open_key(device_key, devpropkey_gpu_vulkan_uuidW, + sizeof(devpropkey_gpu_vulkan_uuidW)))) + { + NtClose(device_key); + continue; + } + + size = query_reg_value(prop_key, NULL, value, sizeof(buffer)); + NtClose(prop_key); + if (size != sizeof(GUID) || memcmp(value->Data, uuid, sizeof(GUID))) + { + NtClose(device_key); + continue; + } + + if (!(prop_key = reg_open_key(device_key, devpropkey_gpu_luidW, + sizeof(devpropkey_gpu_luidW)))) + { + NtClose(device_key); + continue; + } + + size = query_reg_value(prop_key, NULL, value, sizeof(buffer)); + NtClose(prop_key); + if (size != sizeof(LUID)) + { + NtClose(device_key); + continue; + } + + *luid = *(const LUID *)value->Data; + NtClose(device_key); + NtClose(subkey); + NtClose(pci_key); + release_display_device_init_mutex(mutex); + return TRUE; + } + NtClose(subkey); + } + NtClose(pci_key); + + release_display_device_init_mutex(mutex); + return FALSE; +} + +NTSTATUS X11DRV_D3DKMTEnumAdapters2( D3DKMT_ENUMADAPTERS2 *desc ) +{ + static const UINT max_adapters = 32; + static const char *extensions[] = + { + VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME, + VK_KHR_EXTERNAL_MEMORY_CAPABILITIES_EXTENSION_NAME, + }; + const struct vulkan_funcs *vulkan_funcs; + PFN_vkGetPhysicalDeviceProperties2KHR pvkGetPhysicalDeviceProperties2KHR; + PFN_vkEnumeratePhysicalDevices pvkEnumeratePhysicalDevices; + VkPhysicalDevice *vk_physical_devices = NULL; + struct x11_d3dkmt_adapter *adapter, *prev; + VkPhysicalDeviceProperties2 properties2; + NTSTATUS status = STATUS_UNSUCCESSFUL; + UINT device_count = 0, device_idx = 0; + VkInstanceCreateInfo create_info; + VkPhysicalDeviceIDProperties id; + VkResult vr; + LUID luid; + + if (!desc->pAdapters) + { + desc->NumAdapters = max_adapters; + return STATUS_SUCCESS; + } + + if (!(vulkan_funcs = get_vulkan_driver(WINE_VULKAN_DRIVER_VERSION))) + { + WARN("Vulkan is unavailable.\n"); + return status; + } + + pthread_mutex_lock(&d3dkmt_mutex); + + if (!d3dkmt_vk_instance) + { + memset(&create_info, 0, sizeof(create_info)); + create_info.sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO; + create_info.enabledExtensionCount = ARRAY_SIZE(extensions); + create_info.ppEnabledExtensionNames = extensions; + + vr = vulkan_funcs->p_vkCreateInstance(&create_info, NULL, &d3dkmt_vk_instance); + if (vr != VK_SUCCESS) + { + WARN("Failed to create a Vulkan instance, vr %d.\n", vr); + goto done; + } + } + +#define LOAD_VK_FUNC(f) \ + if (!(p##f = (void *)vulkan_funcs->p_vkGetInstanceProcAddr(d3dkmt_vk_instance, #f))) \ + { \ + WARN("Failed to load " #f ".\n"); \ + goto done; \ + } + + LOAD_VK_FUNC(vkEnumeratePhysicalDevices) + LOAD_VK_FUNC(vkGetPhysicalDeviceProperties2KHR) +#undef LOAD_VK_FUNC + + vr = pvkEnumeratePhysicalDevices(d3dkmt_vk_instance, &device_count, NULL); + if (vr != VK_SUCCESS || !device_count) + { + WARN("No Vulkan device found, vr %d, device_count %d.\n", vr, device_count); + goto done; + } + + if (!(vk_physical_devices = calloc(device_count, sizeof(*vk_physical_devices)))) + { + status = STATUS_NO_MEMORY; + goto done; + } + + vr = pvkEnumeratePhysicalDevices(d3dkmt_vk_instance, &device_count, vk_physical_devices); + if (vr != VK_SUCCESS) + { + WARN("vkEnumeratePhysicalDevices failed, vr %d.\n", vr); + goto done; + } + + if (device_count > max_adapters) + { + FIXME("Vulkan reported %d devices but only up to %d adapters can be enumerated.\n", device_count, max_adapters); + device_count = max_adapters; + } + + if (desc->NumAdapters < device_count) + { + status = STATUS_BUFFER_TOO_SMALL; + goto done; + } + + for (device_idx = 0; device_idx < device_count; ++device_idx) + { + memset(&id, 0, sizeof(id)); + id.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES; + properties2.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2; + properties2.pNext = &id; + + pvkGetPhysicalDeviceProperties2KHR(vk_physical_devices[device_idx], &properties2); + + if (!(adapter = malloc(sizeof(*adapter)))) + { + status = STATUS_NO_MEMORY; + goto done; + } + + adapter->handle = desc->pAdapters[device_idx].hAdapter; + adapter->vk_device = vk_physical_devices[device_idx]; + list_add_tail(&x11_d3dkmt_adapters, &adapter->entry); + + if (get_luid_from_vulkan_uuid((const GUID *)id.deviceUUID, &luid)) + desc->pAdapters[device_idx].AdapterLuid = luid; + else + WARN("get_luid_from_vulkan_uuid failed, AdapterLuid will remain empty.\n"); + } + + desc->NumAdapters = device_count; + status = STATUS_SUCCESS; + +done: + if (status != STATUS_SUCCESS) + { + LIST_FOR_EACH_ENTRY_SAFE_REV(adapter, prev, &x11_d3dkmt_adapters, struct x11_d3dkmt_adapter, entry) + { + if (!device_idx--) break; + + list_remove(&adapter->entry); + free(adapter); + } + } + + if (d3dkmt_vk_instance && list_empty(&x11_d3dkmt_adapters)) + { + vulkan_funcs->p_vkDestroyInstance(d3dkmt_vk_instance, NULL); + d3dkmt_vk_instance = NULL; + } + pthread_mutex_unlock(&d3dkmt_mutex); + free(vk_physical_devices); + return status; +} + /* Find the Vulkan device UUID corresponding to a LUID */ static BOOL get_vulkan_uuid_from_luid( const LUID *luid, GUID *uuid ) {
Adding @zhiyi as a reviewer, due to off-list request from @Saancreed. Feel free to revert, though!
But because it does not, I feel like I should ask: why was it done like that?
I guess that the main reason is that win32u device cache didn't exist when those D3DKMT functions were implemented (there was some caching in user32, but its scope was limited and user32 generally depended on the driver to do more of device management). I think it would be interesting to try to move adapters handles management to win32u eventually.
I guess that the main reason is that win32u device cache didn't exist when those D3DKMT functions were implemented (there was some caching in user32, but its scope was limited and user32 generally depended on the driver to do more of device management). I think it would be interesting to try to move adapters handles management to win32u eventually.
Thanks, that's more or less what I expected to hear. Having all that in win32u certainly sounds nice, but it also sounds like a long(er) term goal, not something I'd expect to be done, let's say, this month. With that in mind, how should I proceed? The current revision delegates most of the work to GDI driver for best interoperability with other D3DKMT functions but it's also another piece of code that would need to be rewritten at some point in the future. Is that something acceptable for Wine project, or should I instead wait for the move to happen and only then try to contribute an implementation for EnumAdapters2?
Maybe it is possible to introduce KMT adapter list and implement enumeration purely on win32u (adding some field to gdi driver gpu data and win32u caches on the way if that turns out to be necessary)? Then probably existing functions which go to gdi driver can be moved to win32u on top of that later.
Maybe it is possible to introduce KMT adapter list and implement enumeration purely on win32u (adding some field to gdi driver gpu data and win32u caches on the way if that turns out to be necessary)? Then probably existing functions which go to gdi driver can be moved to win32u on top of that later.
I can experiment with that, sure. I have no idea yet what sort of field would need to be added to GDI driver data and/or win32u caches for this to work; after all, the enumeration itself shouldn't be too hard, it's the interactions with other existing D3DKMT functions I'm worried about. That in turn makes it very tempting to just try the "call `D3DKMTOpenAdapterFromLuid` for each LUID" idea and accept that in the future this function would have to be updated. But in any case, it will introduce some inconsistencies that I'm not sure if everyone would be comfortable with for the time being.
I tried to [rework this by taking advantage of win32u adapters cache](https://gitlab.winehq.org/Saancreed/wine/-/commit/89925539b6400ecf6243814c7c...) but it appears that on my machine nothing ever adds my Nvidia GPU to that list. No matter if I'm currently using winex11 or winewayland, it contains only one entry (corresponding to my Intel GPU), which frankly would make this entire patchset worthless.
Of course, while this points to a bug where not all GPUs are properly detected somewhere else (which will hopefully be fixed one day), this makes avoiding Vulkan calls in GDI driver unfeasible and probably not worth pursuing for as long as the issue remains.
This merge request was closed by Huw Davies.
Closing in favour of !4857