mirror of
https://github.com/reactos/reactos.git
synced 2025-08-04 23:45:42 +00:00
[WIN32K]
- Annotate eng/device.c and semaphor.c. - Get rid of IntGdiAcquire/ReleaseSemaphore - Move some prototypes where they belong svn path=/trunk/; revision=66647
This commit is contained in:
parent
d33bc192ba
commit
b673073aa1
7 changed files with 153 additions and 113 deletions
|
@ -1581,10 +1581,13 @@ PATHOBJ*
|
||||||
APIENTRY
|
APIENTRY
|
||||||
EngCreatePath(VOID);
|
EngCreatePath(VOID);
|
||||||
|
|
||||||
|
__drv_allocatesMem(Mem)
|
||||||
|
_Post_writable_byte_size_(sizeof(ERESOURCE))
|
||||||
ENGAPI
|
ENGAPI
|
||||||
HSEMAPHORE
|
HSEMAPHORE
|
||||||
APIENTRY
|
APIENTRY
|
||||||
EngCreateSemaphore(VOID);
|
EngCreateSemaphore(
|
||||||
|
VOID);
|
||||||
|
|
||||||
/* EngCreateWnd.fl constants */
|
/* EngCreateWnd.fl constants */
|
||||||
#define WO_RGN_CLIENT_DELTA 0x00000001
|
#define WO_RGN_CLIENT_DELTA 0x00000001
|
||||||
|
@ -1667,13 +1670,14 @@ ENGAPI
|
||||||
VOID
|
VOID
|
||||||
APIENTRY
|
APIENTRY
|
||||||
EngDeleteSafeSemaphore(
|
EngDeleteSafeSemaphore(
|
||||||
_Inout_ ENGSAFESEMAPHORE *pssem);
|
_Inout_ _Post_invalid_ ENGSAFESEMAPHORE *pssem);
|
||||||
|
|
||||||
|
_Requires_lock_not_held_(*hsem)
|
||||||
ENGAPI
|
ENGAPI
|
||||||
VOID
|
VOID
|
||||||
APIENTRY
|
APIENTRY
|
||||||
EngDeleteSemaphore(
|
EngDeleteSemaphore(
|
||||||
_In_ _Post_ptr_invalid_ HSEMAPHORE hsem);
|
_Inout_ __drv_freesMem(Mem) HSEMAPHORE hsem);
|
||||||
|
|
||||||
ENGAPI
|
ENGAPI
|
||||||
BOOL
|
BOOL
|
||||||
|
@ -2302,11 +2306,14 @@ APIENTRY
|
||||||
EngReadStateEvent(
|
EngReadStateEvent(
|
||||||
_In_ PEVENT pEvent);
|
_In_ PEVENT pEvent);
|
||||||
|
|
||||||
|
_Requires_lock_held_(*hsem)
|
||||||
|
_Releases_lock_(*hsem)
|
||||||
|
_Releases_lock_(_Global_critical_region_)
|
||||||
ENGAPI
|
ENGAPI
|
||||||
VOID
|
VOID
|
||||||
APIENTRY
|
APIENTRY
|
||||||
EngReleaseSemaphore(
|
EngReleaseSemaphore(
|
||||||
_In_ HSEMAPHORE hsem);
|
_Inout_ HSEMAPHORE hsem);
|
||||||
|
|
||||||
#if defined(_M_AMD64) && (NTDDI_VERSION >= NTDDI_VISTA)
|
#if defined(_M_AMD64) && (NTDDI_VERSION >= NTDDI_VISTA)
|
||||||
|
|
||||||
|
@ -3303,11 +3310,14 @@ EngRenderHint(
|
||||||
_In_ SIZE_T Length,
|
_In_ SIZE_T Length,
|
||||||
_In_reads_bytes_opt_(Length) PVOID Data);
|
_In_reads_bytes_opt_(Length) PVOID Data);
|
||||||
|
|
||||||
|
_Requires_lock_not_held_(*hsem)
|
||||||
|
_Acquires_exclusive_lock_(*hsem)
|
||||||
|
_Acquires_lock_(_Global_critical_region_)
|
||||||
ENGAPI
|
ENGAPI
|
||||||
VOID
|
VOID
|
||||||
APIENTRY
|
APIENTRY
|
||||||
EngAcquireSemaphoreShared(
|
EngAcquireSemaphore(
|
||||||
_In_ HSEMAPHORE hsem);
|
_Inout_ HSEMAPHORE hsem);
|
||||||
|
|
||||||
ENGAPI
|
ENGAPI
|
||||||
BOOL
|
BOOL
|
||||||
|
@ -3315,11 +3325,14 @@ APIENTRY
|
||||||
EngAcquireSemaphoreNoWait(
|
EngAcquireSemaphoreNoWait(
|
||||||
_In_ HSEMAPHORE hsem);
|
_In_ HSEMAPHORE hsem);
|
||||||
|
|
||||||
|
_Acquires_lock_(_Global_critical_region_)
|
||||||
|
_Requires_lock_not_held_(*hsem)
|
||||||
|
_Acquires_shared_lock_(*hsem)
|
||||||
ENGAPI
|
ENGAPI
|
||||||
BOOL
|
VOID
|
||||||
APIENTRY
|
NTAPI
|
||||||
EngAcquireSemaphoreSharedNoWait(
|
EngAcquireSemaphoreShared(
|
||||||
_In_ HSEMAPHORE hsem);
|
_Inout_ HSEMAPHORE hsem);
|
||||||
|
|
||||||
ENGAPI
|
ENGAPI
|
||||||
BOOL
|
BOOL
|
||||||
|
|
|
@ -21,7 +21,7 @@ static ULONG giDevNum = 1;
|
||||||
INIT_FUNCTION
|
INIT_FUNCTION
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
NTAPI
|
NTAPI
|
||||||
InitDeviceImpl()
|
InitDeviceImpl(VOID)
|
||||||
{
|
{
|
||||||
ghsemGraphicsDeviceList = EngCreateSemaphore();
|
ghsemGraphicsDeviceList = EngCreateSemaphore();
|
||||||
if (!ghsemGraphicsDeviceList)
|
if (!ghsemGraphicsDeviceList)
|
||||||
|
@ -34,10 +34,10 @@ InitDeviceImpl()
|
||||||
PGRAPHICS_DEVICE
|
PGRAPHICS_DEVICE
|
||||||
NTAPI
|
NTAPI
|
||||||
EngpRegisterGraphicsDevice(
|
EngpRegisterGraphicsDevice(
|
||||||
PUNICODE_STRING pustrDeviceName,
|
_In_ PUNICODE_STRING pustrDeviceName,
|
||||||
PUNICODE_STRING pustrDiplayDrivers,
|
_In_ PUNICODE_STRING pustrDiplayDrivers,
|
||||||
PUNICODE_STRING pustrDescription,
|
_In_ PUNICODE_STRING pustrDescription,
|
||||||
PDEVMODEW pdmDefault)
|
_In_ PDEVMODEW pdmDefault)
|
||||||
{
|
{
|
||||||
PGRAPHICS_DEVICE pGraphicsDevice;
|
PGRAPHICS_DEVICE pGraphicsDevice;
|
||||||
PDEVICE_OBJECT pDeviceObject;
|
PDEVICE_OBJECT pDeviceObject;
|
||||||
|
@ -259,9 +259,9 @@ EngpRegisterGraphicsDevice(
|
||||||
PGRAPHICS_DEVICE
|
PGRAPHICS_DEVICE
|
||||||
NTAPI
|
NTAPI
|
||||||
EngpFindGraphicsDevice(
|
EngpFindGraphicsDevice(
|
||||||
PUNICODE_STRING pustrDevice,
|
_In_opt_ PUNICODE_STRING pustrDevice,
|
||||||
ULONG iDevNum,
|
_In_ ULONG iDevNum,
|
||||||
DWORD dwFlags)
|
_In_ DWORD dwFlags)
|
||||||
{
|
{
|
||||||
UNICODE_STRING ustrCurrent;
|
UNICODE_STRING ustrCurrent;
|
||||||
PGRAPHICS_DEVICE pGraphicsDevice;
|
PGRAPHICS_DEVICE pGraphicsDevice;
|
||||||
|
@ -305,12 +305,12 @@ EngpFindGraphicsDevice(
|
||||||
static
|
static
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
EngpFileIoRequest(
|
EngpFileIoRequest(
|
||||||
PFILE_OBJECT pFileObject,
|
_In_ PFILE_OBJECT pFileObject,
|
||||||
ULONG ulMajorFunction,
|
_In_ ULONG ulMajorFunction,
|
||||||
LPVOID lpBuffer,
|
_In_reads_(nBufferSize) PVOID lpBuffer,
|
||||||
SIZE_T nBufferSize,
|
_In_ SIZE_T nBufferSize,
|
||||||
ULONGLONG ullStartOffset,
|
_In_ ULONGLONG ullStartOffset,
|
||||||
OUT PULONG_PTR lpInformation)
|
_Out_ PULONG_PTR lpInformation)
|
||||||
{
|
{
|
||||||
PDEVICE_OBJECT pDeviceObject;
|
PDEVICE_OBJECT pDeviceObject;
|
||||||
KEVENT Event;
|
KEVENT Event;
|
||||||
|
@ -363,29 +363,36 @@ EngpFileIoRequest(
|
||||||
VOID
|
VOID
|
||||||
APIENTRY
|
APIENTRY
|
||||||
EngFileWrite(
|
EngFileWrite(
|
||||||
IN PFILE_OBJECT pFileObject,
|
_In_ PFILE_OBJECT pFileObject,
|
||||||
IN PVOID lpBuffer,
|
_In_reads_(nLength) PVOID lpBuffer,
|
||||||
IN SIZE_T nLength,
|
_In_ SIZE_T nLength,
|
||||||
IN PSIZE_T lpBytesWritten)
|
_Out_ PSIZE_T lpBytesWritten)
|
||||||
{
|
{
|
||||||
EngpFileIoRequest(pFileObject,
|
NTSTATUS status;
|
||||||
IRP_MJ_WRITE,
|
|
||||||
lpBuffer,
|
status = EngpFileIoRequest(pFileObject,
|
||||||
nLength,
|
IRP_MJ_WRITE,
|
||||||
0,
|
lpBuffer,
|
||||||
lpBytesWritten);
|
nLength,
|
||||||
|
0,
|
||||||
|
lpBytesWritten);
|
||||||
|
if (!NT_SUCCESS(status))
|
||||||
|
{
|
||||||
|
*lpBytesWritten = 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_Success_(return>=0)
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
APIENTRY
|
APIENTRY
|
||||||
EngFileIoControl(
|
EngFileIoControl(
|
||||||
IN PFILE_OBJECT pFileObject,
|
_In_ PFILE_OBJECT pFileObject,
|
||||||
IN DWORD dwIoControlCode,
|
_In_ DWORD dwIoControlCode,
|
||||||
IN PVOID lpInBuffer,
|
_In_reads_(nInBufferSize) PVOID lpInBuffer,
|
||||||
IN SIZE_T nInBufferSize,
|
_In_ SIZE_T nInBufferSize,
|
||||||
OUT PVOID lpOutBuffer,
|
_Out_writes_(nOutBufferSize) PVOID lpOutBuffer,
|
||||||
IN SIZE_T nOutBufferSize,
|
_In_ SIZE_T nOutBufferSize,
|
||||||
OUT PULONG_PTR lpInformation)
|
_Out_ PULONG_PTR lpInformation)
|
||||||
{
|
{
|
||||||
PDEVICE_OBJECT pDeviceObject;
|
PDEVICE_OBJECT pDeviceObject;
|
||||||
KEVENT Event;
|
KEVENT Event;
|
||||||
|
|
|
@ -1,48 +1,36 @@
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
#define TAG_GDEV 'gdev'
|
#define TAG_GDEV 'gdev'
|
||||||
|
|
||||||
|
extern PGRAPHICS_DEVICE gpPrimaryGraphicsDevice;
|
||||||
|
extern PGRAPHICS_DEVICE gpVgaGraphicsDevice;
|
||||||
|
|
||||||
VOID
|
VOID
|
||||||
APIENTRY
|
APIENTRY
|
||||||
EngFileWrite(
|
EngFileWrite(
|
||||||
IN PFILE_OBJECT pFileObject,
|
_In_ PFILE_OBJECT pFileObject,
|
||||||
IN PVOID lpBuffer,
|
_In_reads_(nLength) PVOID lpBuffer,
|
||||||
IN SIZE_T nLength,
|
_In_ SIZE_T nLength,
|
||||||
IN PSIZE_T lpBytesWritten);
|
_Out_ PSIZE_T lpBytesWritten);
|
||||||
|
|
||||||
PGRAPHICS_DEVICE
|
PGRAPHICS_DEVICE
|
||||||
NTAPI
|
NTAPI
|
||||||
EngpFindGraphicsDevice(
|
EngpFindGraphicsDevice(
|
||||||
PUNICODE_STRING pustrDevice,
|
_In_opt_ PUNICODE_STRING pustrDevice,
|
||||||
DWORD iDevNum,
|
_In_ ULONG iDevNum,
|
||||||
DWORD dwFlags);
|
_In_ DWORD dwFlags);
|
||||||
|
|
||||||
PGRAPHICS_DEVICE
|
PGRAPHICS_DEVICE
|
||||||
NTAPI
|
NTAPI
|
||||||
EngpRegisterGraphicsDevice(
|
EngpRegisterGraphicsDevice(
|
||||||
PUNICODE_STRING pustrDeviceName,
|
_In_ PUNICODE_STRING pustrDeviceName,
|
||||||
PUNICODE_STRING pustrDiplayDrivers,
|
_In_ PUNICODE_STRING pustrDiplayDrivers,
|
||||||
PUNICODE_STRING pustrDescription,
|
_In_ PUNICODE_STRING pustrDescription,
|
||||||
PDEVMODEW pdmDefault);
|
_In_ PDEVMODEW pdmDefault);
|
||||||
|
|
||||||
INIT_FUNCTION
|
INIT_FUNCTION
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
NTAPI
|
NTAPI
|
||||||
InitDeviceImpl(VOID);
|
InitDeviceImpl(VOID);
|
||||||
|
|
||||||
//#define KeRosDumpStackFrames(Frames, Count) KdSystemDebugControl(TAG('R', 'o', 's', 'D'), (PVOID)Frames, Count, NULL, 0, NULL, KernelMode)
|
|
||||||
NTSYSAPI ULONG APIENTRY RtlWalkFrameChain(OUT PVOID *Callers, IN ULONG Count, IN ULONG Flags);
|
|
||||||
|
|
||||||
BOOL
|
|
||||||
NTAPI
|
|
||||||
PDEVOBJ_bSwitchMode(
|
|
||||||
PPDEVOBJ ppdev,
|
|
||||||
PDEVMODEW pdm);
|
|
||||||
|
|
||||||
PDEVMODEW
|
|
||||||
NTAPI
|
|
||||||
PDEVOBJ_pdmMatchDevMode(
|
|
||||||
PPDEVOBJ ppdev,
|
|
||||||
PDEVMODEW pdm);
|
|
||||||
|
|
||||||
extern PGRAPHICS_DEVICE gpPrimaryGraphicsDevice;
|
|
||||||
extern PGRAPHICS_DEVICE gpVgaGraphicsDevice;
|
|
||||||
|
|
|
@ -6,10 +6,15 @@ extern const BYTE gajRop2ToRop3[16];
|
||||||
(((ULONG)gajRop2ToRop3[((mix) - 1) & 0xF]) | \
|
(((ULONG)gajRop2ToRop3[((mix) - 1) & 0xF]) | \
|
||||||
((ULONG)gajRop2ToRop3[(((mix) >> 8) - 1) & 0xF] << 8))
|
((ULONG)gajRop2ToRop3[(((mix) >> 8) - 1) & 0xF] << 8))
|
||||||
|
|
||||||
|
/* Copied from winddi.h, where it is only for vista+ */
|
||||||
|
_Acquires_lock_(_Global_critical_region_)
|
||||||
|
_Requires_lock_not_held_(*hsem)
|
||||||
|
_Acquires_shared_lock_(*hsem)
|
||||||
|
ENGAPI
|
||||||
VOID
|
VOID
|
||||||
NTAPI
|
NTAPI
|
||||||
EngAcquireSemaphoreShared(
|
EngAcquireSemaphoreShared(
|
||||||
IN HSEMAPHORE hsem);
|
_Inout_ HSEMAPHORE hsem);
|
||||||
|
|
||||||
BOOL
|
BOOL
|
||||||
APIENTRY
|
APIENTRY
|
||||||
|
@ -24,17 +29,27 @@ IntEngMaskBlt(
|
||||||
_In_ BRUSHOBJ *pbo,
|
_In_ BRUSHOBJ *pbo,
|
||||||
_In_ POINTL *pptlBrushOrg);
|
_In_ POINTL *pptlBrushOrg);
|
||||||
|
|
||||||
VOID FASTCALL
|
VOID
|
||||||
|
FASTCALL
|
||||||
IntEngWindowChanged(
|
IntEngWindowChanged(
|
||||||
_In_ PWND Window,
|
_In_ PWND Window,
|
||||||
_In_ FLONG flChanged);
|
_In_ FLONG flChanged);
|
||||||
|
|
||||||
VOID FASTCALL IntGdiAcquireSemaphore ( HSEMAPHORE hsem );
|
ULONGLONG
|
||||||
VOID FASTCALL IntGdiReleaseSemaphore ( HSEMAPHORE hsem );
|
APIENTRY
|
||||||
ULONGLONG APIENTRY EngGetTickCount(VOID);
|
EngGetTickCount(
|
||||||
|
VOID);
|
||||||
VOID DecompressBitmap(SIZEL Size, BYTE *CompressedBits, BYTE *UncompressedBits, LONG Delta, ULONG iFormat);
|
|
||||||
|
|
||||||
HANDLE
|
HANDLE
|
||||||
APIENTRY
|
APIENTRY
|
||||||
EngSecureMemForRead(PVOID Address, ULONG Length);
|
EngSecureMemForRead(
|
||||||
|
PVOID Address,
|
||||||
|
ULONG Length);
|
||||||
|
|
||||||
|
VOID
|
||||||
|
DecompressBitmap(
|
||||||
|
SIZEL Size,
|
||||||
|
BYTE *CompressedBits,
|
||||||
|
BYTE *UncompressedBits,
|
||||||
|
LONG Delta,
|
||||||
|
ULONG iFormat);
|
||||||
|
|
|
@ -189,4 +189,16 @@ PDEVOBJ_sizl(
|
||||||
_In_ PPDEVOBJ ppdev,
|
_In_ PPDEVOBJ ppdev,
|
||||||
_Out_ PSIZEL psizl);
|
_Out_ PSIZEL psizl);
|
||||||
|
|
||||||
|
BOOL
|
||||||
|
NTAPI
|
||||||
|
PDEVOBJ_bSwitchMode(
|
||||||
|
PPDEVOBJ ppdev,
|
||||||
|
PDEVMODEW pdm);
|
||||||
|
|
||||||
|
PDEVMODEW
|
||||||
|
NTAPI
|
||||||
|
PDEVOBJ_pdmMatchDevMode(
|
||||||
|
PPDEVOBJ ppdev,
|
||||||
|
PDEVMODEW pdm);
|
||||||
|
|
||||||
#endif /* !__WIN32K_PDEVOBJ_H */
|
#endif /* !__WIN32K_PDEVOBJ_H */
|
||||||
|
|
|
@ -6,12 +6,17 @@
|
||||||
/*
|
/*
|
||||||
* @implemented
|
* @implemented
|
||||||
*/
|
*/
|
||||||
|
__drv_allocatesMem(Mem)
|
||||||
|
_Post_writable_byte_size_(sizeof(ERESOURCE))
|
||||||
HSEMAPHORE
|
HSEMAPHORE
|
||||||
APIENTRY
|
APIENTRY
|
||||||
EngCreateSemaphore(VOID)
|
EngCreateSemaphore(
|
||||||
|
VOID)
|
||||||
{
|
{
|
||||||
// www.osr.com/ddk/graphics/gdifncs_95lz.htm
|
// www.osr.com/ddk/graphics/gdifncs_95lz.htm
|
||||||
PERESOURCE psem = ExAllocatePoolWithTag(NonPagedPool, sizeof(ERESOURCE), GDITAG_SEMAPHORE);
|
PERESOURCE psem = ExAllocatePoolWithTag(NonPagedPool,
|
||||||
|
sizeof(ERESOURCE),
|
||||||
|
GDITAG_SEMAPHORE);
|
||||||
if (!psem)
|
if (!psem)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
|
@ -24,57 +29,51 @@ EngCreateSemaphore(VOID)
|
||||||
return (HSEMAPHORE)psem;
|
return (HSEMAPHORE)psem;
|
||||||
}
|
}
|
||||||
|
|
||||||
VOID
|
|
||||||
FASTCALL
|
|
||||||
IntGdiAcquireSemaphore(HSEMAPHORE hsem)
|
|
||||||
{
|
|
||||||
KeEnterCriticalRegion();
|
|
||||||
ExAcquireResourceExclusiveLite ((PERESOURCE)hsem, TRUE);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* @implemented
|
* @implemented
|
||||||
*/
|
*/
|
||||||
|
_Requires_lock_not_held_(*hsem)
|
||||||
|
_Acquires_exclusive_lock_(*hsem)
|
||||||
|
_Acquires_lock_(_Global_critical_region_)
|
||||||
VOID
|
VOID
|
||||||
APIENTRY
|
APIENTRY
|
||||||
EngAcquireSemaphore(IN HSEMAPHORE hsem)
|
EngAcquireSemaphore(
|
||||||
|
_Inout_ HSEMAPHORE hsem)
|
||||||
{
|
{
|
||||||
// www.osr.com/ddk/graphics/gdifncs_14br.htm
|
// www.osr.com/ddk/graphics/gdifncs_14br.htm
|
||||||
PTHREADINFO W32Thread;
|
PTHREADINFO W32Thread;
|
||||||
ASSERT(hsem);
|
ASSERT(hsem);
|
||||||
IntGdiAcquireSemaphore(hsem);
|
ExEnterCriticalRegionAndAcquireResourceExclusive((PERESOURCE)hsem);
|
||||||
W32Thread = PsGetThreadWin32Thread(PsGetCurrentThread());
|
W32Thread = PsGetThreadWin32Thread(PsGetCurrentThread());
|
||||||
if (W32Thread) W32Thread->dwEngAcquireCount++;
|
if (W32Thread) W32Thread->dwEngAcquireCount++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
VOID
|
|
||||||
FASTCALL
|
|
||||||
IntGdiReleaseSemaphore ( HSEMAPHORE hsem )
|
|
||||||
{
|
|
||||||
ExReleaseResourceLite((PERESOURCE)hsem);
|
|
||||||
KeLeaveCriticalRegion();
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* @implemented
|
* @implemented
|
||||||
*/
|
*/
|
||||||
|
_Requires_lock_held_(*hsem)
|
||||||
|
_Releases_lock_(*hsem)
|
||||||
|
_Releases_lock_(_Global_critical_region_)
|
||||||
VOID
|
VOID
|
||||||
APIENTRY
|
APIENTRY
|
||||||
EngReleaseSemaphore ( IN HSEMAPHORE hsem )
|
EngReleaseSemaphore(
|
||||||
|
_Inout_ HSEMAPHORE hsem)
|
||||||
{
|
{
|
||||||
// www.osr.com/ddk/graphics/gdifncs_5u3r.htm
|
// www.osr.com/ddk/graphics/gdifncs_5u3r.htm
|
||||||
PTHREADINFO W32Thread;
|
PTHREADINFO W32Thread;
|
||||||
ASSERT(hsem);
|
ASSERT(hsem);
|
||||||
W32Thread = PsGetThreadWin32Thread(PsGetCurrentThread());
|
W32Thread = PsGetThreadWin32Thread(PsGetCurrentThread());
|
||||||
if (W32Thread) --W32Thread->dwEngAcquireCount;
|
if (W32Thread) --W32Thread->dwEngAcquireCount;
|
||||||
IntGdiReleaseSemaphore(hsem);
|
ExReleaseResourceAndLeaveCriticalRegion((PERESOURCE)hsem);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_Acquires_lock_(_Global_critical_region_)
|
||||||
|
_Requires_lock_not_held_(*hsem)
|
||||||
|
_Acquires_shared_lock_(*hsem)
|
||||||
VOID
|
VOID
|
||||||
NTAPI
|
NTAPI
|
||||||
EngAcquireSemaphoreShared(
|
EngAcquireSemaphoreShared(
|
||||||
IN HSEMAPHORE hsem)
|
_Inout_ HSEMAPHORE hsem)
|
||||||
{
|
{
|
||||||
PTHREADINFO pti;
|
PTHREADINFO pti;
|
||||||
|
|
||||||
|
@ -87,9 +86,11 @@ EngAcquireSemaphoreShared(
|
||||||
/*
|
/*
|
||||||
* @implemented
|
* @implemented
|
||||||
*/
|
*/
|
||||||
|
_Requires_lock_not_held_(*hsem)
|
||||||
VOID
|
VOID
|
||||||
APIENTRY
|
APIENTRY
|
||||||
EngDeleteSemaphore ( IN HSEMAPHORE hsem )
|
EngDeleteSemaphore(
|
||||||
|
_Inout_ __drv_freesMem(Mem) HSEMAPHORE hsem)
|
||||||
{
|
{
|
||||||
// www.osr.com/ddk/graphics/gdifncs_13c7.htm
|
// www.osr.com/ddk/graphics/gdifncs_13c7.htm
|
||||||
ASSERT(hsem);
|
ASSERT(hsem);
|
||||||
|
@ -103,7 +104,8 @@ EngDeleteSemaphore ( IN HSEMAPHORE hsem )
|
||||||
*/
|
*/
|
||||||
BOOL
|
BOOL
|
||||||
APIENTRY
|
APIENTRY
|
||||||
EngIsSemaphoreOwned ( IN HSEMAPHORE hsem )
|
EngIsSemaphoreOwned(
|
||||||
|
_In_ HSEMAPHORE hsem)
|
||||||
{
|
{
|
||||||
// www.osr.com/ddk/graphics/gdifncs_6wmf.htm
|
// www.osr.com/ddk/graphics/gdifncs_6wmf.htm
|
||||||
ASSERT(hsem);
|
ASSERT(hsem);
|
||||||
|
@ -115,7 +117,8 @@ EngIsSemaphoreOwned ( IN HSEMAPHORE hsem )
|
||||||
*/
|
*/
|
||||||
BOOL
|
BOOL
|
||||||
APIENTRY
|
APIENTRY
|
||||||
EngIsSemaphoreOwnedByCurrentThread ( IN HSEMAPHORE hsem )
|
EngIsSemaphoreOwnedByCurrentThread(
|
||||||
|
_In_ HSEMAPHORE hsem)
|
||||||
{
|
{
|
||||||
// www.osr.com/ddk/graphics/gdifncs_9yxz.htm
|
// www.osr.com/ddk/graphics/gdifncs_9yxz.htm
|
||||||
ASSERT(hsem);
|
ASSERT(hsem);
|
||||||
|
@ -125,9 +128,10 @@ EngIsSemaphoreOwnedByCurrentThread ( IN HSEMAPHORE hsem )
|
||||||
/*
|
/*
|
||||||
* @implemented
|
* @implemented
|
||||||
*/
|
*/
|
||||||
BOOL APIENTRY
|
BOOL
|
||||||
|
APIENTRY
|
||||||
EngInitializeSafeSemaphore(
|
EngInitializeSafeSemaphore(
|
||||||
OUT ENGSAFESEMAPHORE *Semaphore)
|
_Out_ ENGSAFESEMAPHORE *Semaphore)
|
||||||
{
|
{
|
||||||
HSEMAPHORE hSem;
|
HSEMAPHORE hSem;
|
||||||
|
|
||||||
|
@ -158,15 +162,16 @@ EngInitializeSafeSemaphore(
|
||||||
/*
|
/*
|
||||||
* @implemented
|
* @implemented
|
||||||
*/
|
*/
|
||||||
VOID APIENTRY
|
VOID
|
||||||
|
APIENTRY
|
||||||
EngDeleteSafeSemaphore(
|
EngDeleteSafeSemaphore(
|
||||||
IN OUT ENGSAFESEMAPHORE *Semaphore)
|
_Inout_ _Post_invalid_ ENGSAFESEMAPHORE *pssem)
|
||||||
{
|
{
|
||||||
if (InterlockedDecrement(&Semaphore->lCount) == 0)
|
if (InterlockedDecrement(&pssem->lCount) == 0)
|
||||||
{
|
{
|
||||||
/* FIXME: Not thread-safe! Use result of InterlockedCompareExchangePointer! */
|
/* FIXME: Not thread-safe! Use result of InterlockedCompareExchangePointer! */
|
||||||
EngDeleteSemaphore(Semaphore->hsem);
|
EngDeleteSemaphore(pssem->hsem);
|
||||||
(void)InterlockedExchangePointer((volatile PVOID *)&Semaphore->hsem, NULL);
|
(void)InterlockedExchangePointer((volatile PVOID *)&pssem->hsem, NULL);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -180,7 +180,7 @@ DxEngLockShareSem()
|
||||||
{
|
{
|
||||||
DPRINT1("ReactX Calling : DxEngLockShareSem\n");
|
DPRINT1("ReactX Calling : DxEngLockShareSem\n");
|
||||||
if(!ghsemShareDevLock) ghsemShareDevLock = EngCreateSemaphore(); // Hax, should be in dllmain.c
|
if(!ghsemShareDevLock) ghsemShareDevLock = EngCreateSemaphore(); // Hax, should be in dllmain.c
|
||||||
IntGdiAcquireSemaphore(ghsemShareDevLock);
|
EngAcquireSemaphore(ghsemShareDevLock);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -202,7 +202,7 @@ APIENTRY
|
||||||
DxEngUnlockShareSem()
|
DxEngUnlockShareSem()
|
||||||
{
|
{
|
||||||
DPRINT1("ReactX Calling : DxEngUnlockShareSem\n");
|
DPRINT1("ReactX Calling : DxEngUnlockShareSem\n");
|
||||||
IntGdiReleaseSemaphore(ghsemShareDevLock);
|
EngReleaseSemaphore(ghsemShareDevLock);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue