From: Rémi Bernon rbernon@codeweavers.com
--- dlls/wow64win/gdi.c | 40 ++++++++++++++++++++++++++++++++++++++-- 1 file changed, 38 insertions(+), 2 deletions(-)
diff --git a/dlls/wow64win/gdi.c b/dlls/wow64win/gdi.c index cec41199086..243a17d1eea 100644 --- a/dlls/wow64win/gdi.c +++ b/dlls/wow64win/gdi.c @@ -481,6 +481,7 @@ NTSTATUS WINAPI wow64_NtGdiDdDDICreateAllocation( UINT *args )
desc.hDevice = desc32->hDevice; desc.hResource = desc32->hResource; + desc.hGlobalShare = desc32->hGlobalShare; desc.pPrivateRuntimeData = UlongToPtr( desc32->pPrivateRuntimeData ); desc.PrivateRuntimeDataSize = desc32->PrivateRuntimeDataSize; if (!desc32->Flags.StandardAllocation) @@ -587,6 +588,7 @@ NTSTATUS WINAPI wow64_NtGdiDdDDICreateAllocation2( UINT *args )
desc.hDevice = desc32->hDevice; desc.hResource = desc32->hResource; + desc.hGlobalShare = desc32->hGlobalShare; desc.pPrivateRuntimeData = UlongToPtr( desc32->pPrivateRuntimeData ); desc.PrivateRuntimeDataSize = desc32->PrivateRuntimeDataSize; if (!desc32->Flags.StandardAllocation) @@ -660,6 +662,8 @@ NTSTATUS WINAPI wow64_NtGdiDdDDICreateDCFromMemory( UINT *args ) desc.Pitch = desc32->Pitch; desc.hDeviceDc = UlongToHandle( desc32->hDeviceDc ); desc.pColorTable = UlongToPtr( desc32->pColorTable ); + desc.hDc = UlongToHandle( desc32->hDc ); + desc.hBitmap = UlongToHandle( desc32->hBitmap );
if (!(status = NtGdiDdDDICreateDCFromMemory( &desc ))) { @@ -689,6 +693,7 @@ NTSTATUS WINAPI wow64_NtGdiDdDDICreateDevice( UINT *args )
if (!desc32) return STATUS_INVALID_PARAMETER; desc.hAdapter = desc32->hAdapter; + desc.hDevice = desc32->hDevice; desc.Flags = desc32->Flags; desc.pCommandBuffer = UlongToPtr( desc32->pCommandBuffer ); desc.CommandBufferSize = desc32->CommandBufferSize; @@ -723,6 +728,7 @@ NTSTATUS WINAPI wow64_NtGdiDdDDICreateKeyedMutex2( UINT *args )
desc.InitialValue = desc32->InitialValue; desc.hSharedHandle = desc32->hSharedHandle; + desc.hKeyedMutex = desc32->hKeyedMutex; desc.pPrivateRuntimeData = ULongToPtr( desc32->pPrivateRuntimeData ); desc.PrivateRuntimeDataSize = desc32->PrivateRuntimeDataSize; desc.Flags = desc32->Flags; @@ -891,6 +897,8 @@ NTSTATUS WINAPI wow64_NtGdiDdDDIOpenAdapterFromDeviceName( UINT *args )
if (!desc32) return STATUS_INVALID_PARAMETER; desc.pDeviceName = UlongToPtr( desc32->pDeviceName ); + desc.hAdapter = desc32->hAdapter; + desc.AdapterLuid = desc32->AdapterLuid;
if (!(status = NtGdiDdDDIOpenAdapterFromDeviceName( &desc ))) { @@ -915,6 +923,10 @@ NTSTATUS WINAPI wow64_NtGdiDdDDIOpenAdapterFromHdc( UINT *args )
if (!desc32) return STATUS_INVALID_PARAMETER; desc.hDc = UlongToHandle( desc32->hDc ); + desc.hAdapter = desc32->hAdapter; + desc.AdapterLuid = desc32->AdapterLuid; + desc.VidPnSourceId = desc32->VidPnSourceId; + if (!(status = NtGdiDdDDIOpenAdapterFromHdc( &desc ))) { desc32->hAdapter = desc.hAdapter; @@ -950,6 +962,7 @@ NTSTATUS WINAPI wow64_NtGdiDdDDIOpenKeyedMutex2( UINT *args ) NTSTATUS status;
desc.hSharedHandle = desc32->hSharedHandle; + desc.hKeyedMutex = desc32->hKeyedMutex; desc.pPrivateRuntimeData = UlongToPtr( desc32->pPrivateRuntimeData ); desc.PrivateRuntimeDataSize = desc32->PrivateRuntimeDataSize; status = NtGdiDdDDIOpenKeyedMutex2( &desc ); @@ -970,6 +983,7 @@ NTSTATUS WINAPI wow64_NtGdiDdDDIOpenKeyedMutexFromNtHandle( UINT *args ) NTSTATUS status;
desc.hNtHandle = UlongToHandle( desc32->hNtHandle ); + desc.hKeyedMutex = desc32->hKeyedMutex; desc.pPrivateRuntimeData = UlongToPtr( desc32->pPrivateRuntimeData ); desc.PrivateRuntimeDataSize = desc32->PrivateRuntimeDataSize; status = NtGdiDdDDIOpenKeyedMutexFromNtHandle( &desc ); @@ -991,6 +1005,7 @@ NTSTATUS WINAPI wow64_NtGdiDdDDIOpenNtHandleFromName( UINT *args )
desc.dwDesiredAccess = desc32->dwDesiredAccess; desc.pObjAttrib = objattr_32to64( &attr, UlongToPtr( desc32->pObjAttrib ) ); + desc.hNtHandle = UlongToHandle( desc32->hNtHandle ); status = NtGdiDdDDIOpenNtHandleFromName( &desc ); desc32->hNtHandle = HandleToUlong( desc.hNtHandle ); return status; @@ -1045,6 +1060,7 @@ NTSTATUS WINAPI wow64_NtGdiDdDDIOpenResource( UINT *args ) desc.pResourcePrivateDriverData = UlongToPtr( desc32->pResourcePrivateDriverData ); desc.TotalPrivateDriverDataBufferSize = desc32->TotalPrivateDriverDataBufferSize; desc.pTotalPrivateDriverDataBuffer = UlongToPtr( desc32->pTotalPrivateDriverDataBuffer ); + desc.hResource = desc32->hResource;
status = NtGdiDdDDIOpenResource( &desc ); desc32->TotalPrivateDriverDataBufferSize = desc.TotalPrivateDriverDataBufferSize; @@ -1095,6 +1111,7 @@ NTSTATUS WINAPI wow64_NtGdiDdDDIOpenResource2( UINT *args ) desc.pOpenAllocationInfo2[i].hAllocation = allocs32->hAllocation; desc.pOpenAllocationInfo2[i].pPrivateDriverData = UlongToPtr( allocs32->pPrivateDriverData ); desc.pOpenAllocationInfo2[i].PrivateDriverDataSize = allocs32->PrivateDriverDataSize; + desc.pOpenAllocationInfo2[i].GpuVirtualAddress = allocs32->GpuVirtualAddress; } } desc.PrivateRuntimeDataSize = desc32->PrivateRuntimeDataSize; @@ -1103,6 +1120,7 @@ NTSTATUS WINAPI wow64_NtGdiDdDDIOpenResource2( UINT *args ) desc.pResourcePrivateDriverData = UlongToPtr( desc32->pResourcePrivateDriverData ); desc.TotalPrivateDriverDataBufferSize = desc32->TotalPrivateDriverDataBufferSize; desc.pTotalPrivateDriverDataBuffer = UlongToPtr( desc32->pTotalPrivateDriverDataBuffer ); + desc.hResource = desc32->hResource;
status = NtGdiDdDDIOpenResource2( &desc ); desc32->TotalPrivateDriverDataBufferSize = desc.TotalPrivateDriverDataBufferSize; @@ -1159,6 +1177,7 @@ NTSTATUS WINAPI wow64_NtGdiDdDDIOpenResourceFromNtHandle( UINT *args ) desc.pOpenAllocationInfo2[i].hAllocation = allocs32->hAllocation; desc.pOpenAllocationInfo2[i].pPrivateDriverData = UlongToPtr( allocs32->pPrivateDriverData ); desc.pOpenAllocationInfo2[i].PrivateDriverDataSize = allocs32->PrivateDriverDataSize; + desc.pOpenAllocationInfo2[i].GpuVirtualAddress = allocs32->GpuVirtualAddress; } } desc.PrivateRuntimeDataSize = desc32->PrivateRuntimeDataSize; @@ -1169,6 +1188,9 @@ NTSTATUS WINAPI wow64_NtGdiDdDDIOpenResourceFromNtHandle( UINT *args ) desc.pTotalPrivateDriverDataBuffer = UlongToPtr( desc32->pTotalPrivateDriverDataBuffer ); desc.pKeyedMutexPrivateRuntimeData = UlongToPtr( desc32->pKeyedMutexPrivateRuntimeData ); desc.KeyedMutexPrivateRuntimeDataSize = desc32->KeyedMutexPrivateRuntimeDataSize; + desc.hResource = desc32->hResource; + desc.hKeyedMutex = desc32->hKeyedMutex; + desc.hSyncObject = desc32->hSyncObject;
status = NtGdiDdDDIOpenResourceFromNtHandle( &desc ); desc32->TotalPrivateDriverDataBufferSize = desc.TotalPrivateDriverDataBufferSize; @@ -1191,6 +1213,7 @@ NTSTATUS WINAPI wow64_NtGdiDdDDIOpenSyncObjectFromNtHandle( UINT *args ) NTSTATUS status;
desc.hNtHandle = UlongToHandle( desc32->hNtHandle ); + desc.hSyncObject = desc32->hSyncObject; status = NtGdiDdDDIOpenSyncObjectFromNtHandle( &desc ); desc32->hSyncObject = desc.hSyncObject; return status; @@ -1221,7 +1244,10 @@ NTSTATUS WINAPI wow64_NtGdiDdDDIOpenSyncObjectFromNtHandle2( UINT *args ) desc.hNtHandle = ULongToHandle( desc32->hNtHandle ); desc.hDevice = desc32->hDevice; desc.Flags = desc32->Flags; + desc.hSyncObject = desc32->hSyncObject; desc.MonitoredFence.EngineAffinity = desc32->MonitoredFence.EngineAffinity; + desc.MonitoredFence.FenceValueCPUVirtualAddress = UlongToPtr( desc32->MonitoredFence.FenceValueCPUVirtualAddress ); + desc.MonitoredFence.FenceValueGPUVirtualAddress = desc32->MonitoredFence.FenceValueGPUVirtualAddress;
status = NtGdiDdDDIOpenSyncObjectFromNtHandle2( &desc ); desc32->MonitoredFence.FenceValueCPUVirtualAddress = PtrToUlong( desc.MonitoredFence.FenceValueCPUVirtualAddress ); @@ -1244,6 +1270,7 @@ NTSTATUS WINAPI wow64_NtGdiDdDDIOpenSyncObjectNtHandleFromName( UINT *args )
desc.dwDesiredAccess = desc32->dwDesiredAccess; desc.pObjAttrib = objattr_32to64( &attr, UlongToPtr( desc32->pObjAttrib ) ); + desc.hNtHandle = UlongToHandle( desc32->hNtHandle ); status = NtGdiDdDDIOpenSyncObjectNtHandleFromName( &desc ); desc32->hNtHandle = HandleToUlong( desc.hNtHandle ); return status; @@ -1295,6 +1322,9 @@ NTSTATUS WINAPI wow64_NtGdiDdDDIQueryResourceInfo( UINT *args ) desc.hGlobalShare = desc32->hGlobalShare; desc.pPrivateRuntimeData = UlongToPtr( desc32->pPrivateRuntimeData ); desc.PrivateRuntimeDataSize = desc32->PrivateRuntimeDataSize; + desc.TotalPrivateDriverDataSize = desc32->TotalPrivateDriverDataSize; + desc.ResourcePrivateDriverDataSize = desc32->ResourcePrivateDriverDataSize; + desc.NumAllocations = desc32->NumAllocations; status = NtGdiDdDDIQueryResourceInfo( &desc ); desc32->PrivateRuntimeDataSize = desc.PrivateRuntimeDataSize; desc32->TotalPrivateDriverDataSize = desc.TotalPrivateDriverDataSize; @@ -1322,6 +1352,9 @@ NTSTATUS WINAPI wow64_NtGdiDdDDIQueryResourceInfoFromNtHandle( UINT *args ) desc.hNtHandle = UlongToHandle( desc32->hNtHandle ); desc.pPrivateRuntimeData = UlongToPtr( desc32->pPrivateRuntimeData ); desc.PrivateRuntimeDataSize = desc32->PrivateRuntimeDataSize; + desc.TotalPrivateDriverDataSize = desc32->TotalPrivateDriverDataSize; + desc.ResourcePrivateDriverDataSize = desc32->ResourcePrivateDriverDataSize; + desc.NumAllocations = desc32->NumAllocations; status = NtGdiDdDDIQueryResourceInfoFromNtHandle( &desc ); desc32->PrivateRuntimeDataSize = desc.PrivateRuntimeDataSize; desc32->TotalPrivateDriverDataSize = desc.TotalPrivateDriverDataSize; @@ -1358,6 +1391,10 @@ NTSTATUS WINAPI wow64_NtGdiDdDDIQueryVideoMemoryInfo( UINT *args ) desc.hAdapter = desc32->hAdapter; desc.MemorySegmentGroup = desc32->MemorySegmentGroup; desc.PhysicalAdapterIndex = desc32->PhysicalAdapterIndex; + desc.Budget = desc32->Budget; + desc.CurrentUsage = desc32->CurrentUsage; + desc.CurrentReservation = desc32->CurrentReservation; + desc.AvailableForReservation = desc32->AvailableForReservation;
if (!(status = NtGdiDdDDIQueryVideoMemoryInfo( &desc ))) { @@ -1405,10 +1442,9 @@ NTSTATUS WINAPI wow64_NtGdiDdDDIShareObjects( UINT *args ) ULONG *handle_ptr = get_ptr( &args );
struct object_attr64 attr; - HANDLE handle = 0; + HANDLE handle = UlongToHandle( *handle_ptr ); NTSTATUS status;
- *handle_ptr = 0; status = NtGdiDdDDIShareObjects( count, handles, objattr_32to64( &attr, attr32 ), access, &handle ); *handle_ptr = HandleToULong( handle ); return status;