IopCloseWaitCompletionPacket
VOID __stdcall IopCloseWaitCompletionPacket(
_EPROCESS *Process,
PVOID Object,
UINT64 ProcessHandleCount,
UINT64 SystemHandleCount){
UINT64 *v4;
UINT64 *v6;
unsigned __int8 v7;
unsigned __int64 v8;
UINT64 v9;
UINT8 v10;
unsigned __int64 v11;
struct _KLOCK_QUEUE_HANDLE LockHandle;
if( SystemHandleCount == 1 )
{
v4 = (UINT64 *)((char *)Object + 96);
memset(&LockHandle, 0, sizeof(LockHandle));
KeAcquireSpinLockRaiseToDpc((UINT64 *)Object + 12, (UINT64)Object);
v6 = (UINT64 *)*((_QWORD *)Object + 11);
v8 = v7;
if( v6 )
ObfReferenceObjectWithTag(*((PVOID *)Object + 11), 0x746C6644u);
KxReleaseSpinLock(v4);
__writecr8(v8);
if( v6 )
{
KeAcquireInStackQueuedSpinLock(v6 + 8, &LockHandle);
KeAcquireSpinLockRaiseToDpc(v4, v9);
v11 = v10;
if( !*((_BYTE *)Object + 104) || !IopCancelWaitCompletionPacket((KWAIT_BLOCK *)Object, 1, v10) )
{
KxReleaseSpinLock(v4);
__writecr8(v11);
}
KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockHandle);
__writecr8(LockHandle.OldIrql);
ObfDereferenceObjectWithTag(v6, 0x746C6644ui64);
}
}
}Referenced by:
No references.