415 Resource->OwnerThreads[1].OwnerCount = 1;
422 Resource->OwnerThreads[0].OwnerCount++;
440 if (!(
Resource->NumberOfExclusiveWaiters)) {
479 ThrdStruct->
Line = 0;
ULONG_PTR ERESOURCE_THREAD
#define PsGetCurrentThread()
PERESOURCE WaitingResource
VOID NTAPI KeAcquireSpinLock(PKSPIN_LOCK SpinLock, PKIRQL OldIrql)
ERESOURCE_THREAD ThreadId
PTHREAD_STRUCT DLDAllocFindThread(ULONG ThreadId)
_Acquires_exclusive_lock_ Resource _Acquires_shared_lock_ Resource _Inout_ PERESOURCE Resource
struct _KSEMAPHORE * PKSEMAPHORE
VOID NTAPI KeInitializeSemaphore(IN PKSEMAPHORE Semaphore, IN LONG Count, IN LONG Limit)
_In_opt_ PFILE_OBJECT _In_opt_ PETHREAD Thread
#define ExAllocatePoolWithTag(hernya, size, tag)
#define RESOURCE_SEMAFORE_TAG
Resource semaphore (SharedWaiters)
#define KeReleaseSpinLock(sl, irql)
ERESOURCE_THREAD OwnerThread
POWNER_ENTRY DLDpFindCurrentThread(IN PERESOURCE Resource, IN ERESOURCE_THREAD Thread)
VOID DLDpWaitForResource(IN PERESOURCE Resource, IN DISPATCHER_HEADER *DispatcherObject, IN PTHREAD_STRUCT ThrdStruct)
#define ResourceOwnedExclusive