From: Rémi Bernon rbernon@codeweavers.com
--- dlls/gdi32/gdi32.spec | 1 + dlls/win32u/d3dkmt.c | 9 +++++++++ dlls/win32u/main.c | 5 +++++ dlls/win32u/win32syscalls.h | 5 ++--- dlls/win32u/win32u.spec | 2 +- dlls/wow64win/gdi.c | 19 +++++++++++++++++++ include/ddk/d3dkmthk.h | 8 ++++++++ include/ntgdi.h | 1 + 8 files changed, 46 insertions(+), 4 deletions(-)
diff --git a/dlls/gdi32/gdi32.spec b/dlls/gdi32/gdi32.spec index 28dab037a74..ae097e607ba 100644 --- a/dlls/gdi32/gdi32.spec +++ b/dlls/gdi32/gdi32.spec @@ -126,6 +126,7 @@ @ stdcall D3DKMTOpenKeyedMutex(ptr) win32u.NtGdiDdDDIOpenKeyedMutex @ stdcall D3DKMTOpenKeyedMutex2(ptr) win32u.NtGdiDdDDIOpenKeyedMutex2 @ stdcall D3DKMTOpenKeyedMutexFromNtHandle(ptr) win32u.NtGdiDdDDIOpenKeyedMutexFromNtHandle +@ stdcall D3DKMTOpenNtHandleFromName(ptr) win32u.NtGdiDdDDIOpenNtHandleFromName @ stdcall D3DKMTOpenResource(ptr) win32u.NtGdiDdDDIOpenResource @ stdcall D3DKMTOpenResource2(ptr) win32u.NtGdiDdDDIOpenResource2 @ stdcall D3DKMTOpenResourceFromNtHandle(ptr) win32u.NtGdiDdDDIOpenResourceFromNtHandle diff --git a/dlls/win32u/d3dkmt.c b/dlls/win32u/d3dkmt.c index cdad56d1448..13f05f2d069 100644 --- a/dlls/win32u/d3dkmt.c +++ b/dlls/win32u/d3dkmt.c @@ -797,6 +797,15 @@ NTSTATUS WINAPI NtGdiDdDDIOpenResourceFromNtHandle( D3DKMT_OPENRESOURCEFROMNTHAN return STATUS_NOT_IMPLEMENTED; }
+/****************************************************************************** + * NtGdiDdDDIOpenNtHandleFromName (win32u.@) + */ +NTSTATUS WINAPI NtGdiDdDDIOpenNtHandleFromName( D3DKMT_OPENNTHANDLEFROMNAME *params ) +{ + FIXME( "params %p stub!\n", params ); + return STATUS_NOT_IMPLEMENTED; +} + /****************************************************************************** * NtGdiDdDDIQueryResourceInfo (win32u.@) */ diff --git a/dlls/win32u/main.c b/dlls/win32u/main.c index 53b9d25143b..103c0d4ed9a 100644 --- a/dlls/win32u/main.c +++ b/dlls/win32u/main.c @@ -341,6 +341,11 @@ NTSTATUS SYSCALL_API NtGdiDdDDIOpenKeyedMutexFromNtHandle( D3DKMT_OPENKEYEDMUTEX SYSCALL_FUNC( NtGdiDdDDIOpenKeyedMutexFromNtHandle ); }
+NTSTATUS SYSCALL_API NtGdiDdDDIOpenNtHandleFromName( D3DKMT_OPENNTHANDLEFROMNAME *desc ) +{ + SYSCALL_FUNC( NtGdiDdDDIOpenNtHandleFromName ); +} + NTSTATUS SYSCALL_API NtGdiDdDDIOpenResource( D3DKMT_OPENRESOURCE *desc ) { SYSCALL_FUNC( NtGdiDdDDIOpenResource ); diff --git a/dlls/win32u/win32syscalls.h b/dlls/win32u/win32syscalls.h index 6fe9b47087c..f37eae3551b 100644 --- a/dlls/win32u/win32syscalls.h +++ b/dlls/win32u/win32syscalls.h @@ -307,7 +307,7 @@ SYSCALL_ENTRY( 0x112f, NtGdiDdDDIOpenKeyedMutex, 4 ) \ SYSCALL_ENTRY( 0x1130, NtGdiDdDDIOpenKeyedMutex2, 4 ) \ SYSCALL_ENTRY( 0x1131, NtGdiDdDDIOpenKeyedMutexFromNtHandle, 4 ) \ - SYSCALL_ENTRY( 0x1132, NtGdiDdDDIOpenNtHandleFromName, 0 ) \ + SYSCALL_ENTRY( 0x1132, NtGdiDdDDIOpenNtHandleFromName, 4 ) \ SYSCALL_ENTRY( 0x1133, NtGdiDdDDIOpenProtectedSessionFromNtHandle, 0 ) \ SYSCALL_ENTRY( 0x1134, NtGdiDdDDIOpenResource, 4 ) \ SYSCALL_ENTRY( 0x1135, NtGdiDdDDIOpenResource2, 4 ) \ @@ -1849,7 +1849,7 @@ SYSCALL_ENTRY( 0x112f, NtGdiDdDDIOpenKeyedMutex, 8 ) \ SYSCALL_ENTRY( 0x1130, NtGdiDdDDIOpenKeyedMutex2, 8 ) \ SYSCALL_ENTRY( 0x1131, NtGdiDdDDIOpenKeyedMutexFromNtHandle, 8 ) \ - SYSCALL_ENTRY( 0x1132, NtGdiDdDDIOpenNtHandleFromName, 0 ) \ + SYSCALL_ENTRY( 0x1132, NtGdiDdDDIOpenNtHandleFromName, 8 ) \ SYSCALL_ENTRY( 0x1133, NtGdiDdDDIOpenProtectedSessionFromNtHandle, 0 ) \ SYSCALL_ENTRY( 0x1134, NtGdiDdDDIOpenResource, 8 ) \ SYSCALL_ENTRY( 0x1135, NtGdiDdDDIOpenResource2, 8 ) \ @@ -3337,7 +3337,6 @@ SYSCALL_STUB( NtGdiDdDDINetDispStopMiracastDisplayDevice ) \ SYSCALL_STUB( NtGdiDdDDIOfferAllocations ) \ SYSCALL_STUB( NtGdiDdDDIOpenBundleObjectNtHandleFromName ) \ - SYSCALL_STUB( NtGdiDdDDIOpenNtHandleFromName ) \ SYSCALL_STUB( NtGdiDdDDIOpenProtectedSessionFromNtHandle ) \ SYSCALL_STUB( NtGdiDdDDIOpenSwapChain ) \ SYSCALL_STUB( NtGdiDdDDIOutputDuplGetFrameInfo ) \ diff --git a/dlls/win32u/win32u.spec b/dlls/win32u/win32u.spec index adc5f2f19b5..2273c1fbb4d 100644 --- a/dlls/win32u/win32u.spec +++ b/dlls/win32u/win32u.spec @@ -305,7 +305,7 @@ @ stdcall -syscall NtGdiDdDDIOpenKeyedMutex(ptr) @ stdcall -syscall NtGdiDdDDIOpenKeyedMutex2(ptr) @ stdcall -syscall NtGdiDdDDIOpenKeyedMutexFromNtHandle(ptr) -@ stub -syscall NtGdiDdDDIOpenNtHandleFromName +@ stdcall -syscall NtGdiDdDDIOpenNtHandleFromName(ptr) @ stub -syscall NtGdiDdDDIOpenProtectedSessionFromNtHandle @ stdcall -syscall NtGdiDdDDIOpenResource(ptr) @ stdcall -syscall NtGdiDdDDIOpenResource2(ptr) diff --git a/dlls/wow64win/gdi.c b/dlls/wow64win/gdi.c index 8ec1e2e0d98..cec41199086 100644 --- a/dlls/wow64win/gdi.c +++ b/dlls/wow64win/gdi.c @@ -977,6 +977,25 @@ NTSTATUS WINAPI wow64_NtGdiDdDDIOpenKeyedMutexFromNtHandle( UINT *args ) return status; }
+NTSTATUS WINAPI wow64_NtGdiDdDDIOpenNtHandleFromName( UINT *args ) +{ + struct + { + DWORD dwDesiredAccess; + ULONG pObjAttrib; + ULONG hNtHandle; + } *desc32 = get_ptr( &args ); + D3DKMT_OPENNTHANDLEFROMNAME desc; + struct object_attr64 attr; + NTSTATUS status; + + desc.dwDesiredAccess = desc32->dwDesiredAccess; + desc.pObjAttrib = objattr_32to64( &attr, UlongToPtr( desc32->pObjAttrib ) ); + status = NtGdiDdDDIOpenNtHandleFromName( &desc ); + desc32->hNtHandle = HandleToUlong( desc.hNtHandle ); + return status; +} + NTSTATUS WINAPI wow64_NtGdiDdDDIOpenResource( UINT *args ) { struct diff --git a/include/ddk/d3dkmthk.h b/include/ddk/d3dkmthk.h index de12ef4a527..0cac5c7beaf 100644 --- a/include/ddk/d3dkmthk.h +++ b/include/ddk/d3dkmthk.h @@ -876,6 +876,13 @@ typedef struct _D3DKMT_OPENKEYEDMUTEXFROMNTHANDLE UINT PrivateRuntimeDataSize; } D3DKMT_OPENKEYEDMUTEXFROMNTHANDLE;
+typedef struct _D3DKMT_OPENNTHANDLEFROMNAME +{ + DWORD dwDesiredAccess; + OBJECT_ATTRIBUTES *pObjAttrib; + HANDLE hNtHandle; +} D3DKMT_OPENNTHANDLEFROMNAME; + typedef ULONGLONG D3DGPU_VIRTUAL_ADDRESS;
#ifndef D3DDDI_SYNCHRONIZATIONOBJECT_FLAGS_EXT @@ -1312,6 +1319,7 @@ NTSTATUS WINAPI D3DKMTOpenAdapterFromLuid( D3DKMT_OPENADAPTERFROMLUID * desc ); NTSTATUS WINAPI D3DKMTOpenKeyedMutex( D3DKMT_OPENKEYEDMUTEX *params ); NTSTATUS WINAPI D3DKMTOpenKeyedMutex2( D3DKMT_OPENKEYEDMUTEX2 *params ); NTSTATUS WINAPI D3DKMTOpenKeyedMutexFromNtHandle( D3DKMT_OPENKEYEDMUTEXFROMNTHANDLE *params ); +NTSTATUS WINAPI D3DKMTOpenNtHandleFromName( D3DKMT_OPENNTHANDLEFROMNAME *params ); NTSTATUS WINAPI D3DKMTOpenResource( D3DKMT_OPENRESOURCE *params ); NTSTATUS WINAPI D3DKMTOpenResource2( D3DKMT_OPENRESOURCE *params ); NTSTATUS WINAPI D3DKMTOpenResourceFromNtHandle( D3DKMT_OPENRESOURCEFROMNTHANDLE *params ); diff --git a/include/ntgdi.h b/include/ntgdi.h index 81fa1eff14a..f073cf5ac61 100644 --- a/include/ntgdi.h +++ b/include/ntgdi.h @@ -540,6 +540,7 @@ W32KAPI NTSTATUS WINAPI NtGdiDdDDIOpenAdapterFromLuid( D3DKMT_OPENADAPTERFROMLUI W32KAPI NTSTATUS WINAPI NtGdiDdDDIOpenKeyedMutex( D3DKMT_OPENKEYEDMUTEX *params ); W32KAPI NTSTATUS WINAPI NtGdiDdDDIOpenKeyedMutex2( D3DKMT_OPENKEYEDMUTEX2 *params ); W32KAPI NTSTATUS WINAPI NtGdiDdDDIOpenKeyedMutexFromNtHandle( D3DKMT_OPENKEYEDMUTEXFROMNTHANDLE *params ); +W32KAPI NTSTATUS WINAPI NtGdiDdDDIOpenNtHandleFromName( D3DKMT_OPENNTHANDLEFROMNAME *params ); W32KAPI NTSTATUS WINAPI NtGdiDdDDIOpenResource( D3DKMT_OPENRESOURCE *params ); W32KAPI NTSTATUS WINAPI NtGdiDdDDIOpenResource2( D3DKMT_OPENRESOURCE *params ); W32KAPI NTSTATUS WINAPI NtGdiDdDDIOpenResourceFromNtHandle( D3DKMT_OPENRESOURCEFROMNTHANDLE *params );