diff --git a/reactos/include/reactos/drivers/directx/dxeng.h b/reactos/include/reactos/drivers/directx/dxeng.h index 05213c55474..e523859ad86 100644 --- a/reactos/include/reactos/drivers/directx/dxeng.h +++ b/reactos/include/reactos/drivers/directx/dxeng.h @@ -87,14 +87,15 @@ BOOLEAN DxEngCleanDC(HDC hdc); DWORD DxEngGetHdevData(HDEV, DXEGSHDEVDATA); BOOLEAN DxEngSetHdevData(HDEV, DXEGSHDEVDATA, DWORD); BOOLEAN DxEngIncDispUniq(); +BOOLEAN DxEngLockHdev(HDEV hdev); +BOOLEAN DxEngUnlockHdev(HDEV hdev); /* prototypes are not done yet, I need gather all my notes * to make them correct */ DWORD DxEngCreateMemoryDC(DWORD x1); DWORD DxEngScreenAccessCheck(); -DWORD DxEngLockHdev(DWORD x1); -DWORD DxEngUnlockHdev(DWORD x1); + DWORD DxEngReferenceHdev(DWORD x1); DWORD DxEngIsHdevLockedByCurrentThread(DWORD x1); DWORD DxEngUnreferenceHdev(DWORD x1); diff --git a/reactos/subsystems/win32/win32k/ntddraw/dxeng.c b/reactos/subsystems/win32/win32k/ntddraw/dxeng.c index c766274255a..a94ce96beff 100644 --- a/reactos/subsystems/win32/win32k/ntddraw/dxeng.c +++ b/reactos/subsystems/win32/win32k/ntddraw/dxeng.c @@ -465,6 +465,67 @@ DxEngIncDispUniq() return TRUE; } +/*++ +* @name DxEngLockHdev +* @implemented +* +* The function DxEngLockHdev lock the internal PDEV +* +* @param HDEV type +* it is a pointer to win32k internal pdev struct known as PGDIDEVICE + +* @return +* This function returns TRUE no matter what. +* +* @remarks. +* none +* +*--*/ +BOOLEAN +DxEngLockHdev(HDEV hDev) +{ + PGDIDEVICE pPDev = (PGDIDEVICE)hDev; + PERESOURCE Resource = pPDev->hsemDevLock; + + if (Resource) + { + KeEnterCriticalRegion(); + ExAcquireResourceExclusiveLite( Resource , TRUE); // Lock monitor. + } + return TRUE; +} + +/*++ +* @name DxEngUnlockHdev +* @implemented +* +* The function DxEngUnlockHdev unlock the internal PDEV +* +* @param HDEV type +* it is a pointer to win32k internal pdev struct known as PGDIDEVICE + +* @return +* This function returns TRUE no matter what. +* +* @remarks. +* none +* +*--*/ +BOOLEAN +DxEngUnlockHdev(HDEV hDev) +{ + PGDIDEVICE pPDev = (PGDIDEVICE)hDev; + PERESOURCE Resource = pPDev->hsemDevLock; + + if (Resource) + { + ExReleaseResourceLite( Resource ); + KeLeaveCriticalRegion(); + } + return TRUE; +} + + /************************************************************************/ /* DxEngNUIsTermSrv */ /************************************************************************/ @@ -532,23 +593,7 @@ DWORD DxEngScreenAccessCheck() return FALSE; } -/************************************************************************/ -/* DxEngLockHdev */ -/************************************************************************/ -DWORD DxEngLockHdev(DWORD x1) -{ - UNIMPLEMENTED; - return FALSE; -} -/************************************************************************/ -/* DxEngUnlockHdev */ -/************************************************************************/ -DWORD DxEngUnlockHdev(DWORD x1) -{ - UNIMPLEMENTED; - return FALSE; -} /************************************************************************/ /* DxEngReferenceHdev */