ExReferenceHandleDebugInfo
_HANDLE_TRACE_DEBUG_INFO *__stdcall ExReferenceHandleDebugInfo(_HANDLE_TABLE *HandleTable){
_ETHREAD *CurrentThread;
_EX_PUSH_LOCK *p_HandleTableLock;
_HANDLE_TRACE_DEBUG_INFO *DebugInfo;
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
--CurrentThread->Tcb.KernelApcDisable;
p_HandleTableLock = &HandleTable->HandleTableLock;
ExAcquirePushLockExclusiveEx(&HandleTable->HandleTableLock, 0i64);
DebugInfo = HandleTable->DebugInfo;
if( DebugInfo )
_InterlockedIncrement(&DebugInfo->RefCount);
if( (_InterlockedExchangeAdd64(&p_HandleTableLock->_bf_0, 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
ExfTryToWakePushLock(p_HandleTableLock);
KeAbPostRelease(p_HandleTableLock);
KeLeaveCriticalRegionThread(&CurrentThread->Tcb);
return DebugInfo;
}Referenced by:
ExpUpdateDebugInfo
NtQueryInformationProcess