MiMarkSessionDeletePending
INT64 __fastcall MiMarkSessionDeletePending(INT64 a1){
UINT64 v2;
UINT8 v3;
UINT8 v4;
INT64 result;
struct _KLOCK_QUEUE_HANDLE LockHandle;
memset(&LockHandle, 0, sizeof(LockHandle));
KeAcquireInStackQueuedSpinLock(&WorkerRoutine, &LockHandle);
*(_DWORD *)(a1 + 4) |= 2u;
if( *(_DWORD *)(a1 + 100) )
{
*(_DWORD *)(a1 + 108) = 0;
*(_QWORD *)(a1 + 120) = a1 + 112;
*(_QWORD *)(a1 + 112) = a1 + 112;
*(_WORD *)(a1 + 104) = 263;
*(_BYTE *)(a1 + 106) = 6;
if( !dword_140C4DB48 )
KeResetEvent(&stru_140C4DB30, v2, v3, v4, (IRP *)LockHandle.LockQueue.Next);
++dword_140C4DB48;
KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockHandle);
__writecr8(LockHandle.OldIrql);
result = KeWaitForGate((PVOID)(a1 + 104), 18);
if( !--dword_140C4DB48 )
LODWORD(result) = KeSetEvent(&stru_140C4DB30, 0);
}
else
{
KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockHandle);
result = (unsigned int)KiIrqlFlags;
__writecr8(LockHandle.OldIrql);
}
return result;
}Referenced by:
MiDereferenceSessionFinal