IopCancelWaitCompletionPacket
CHAR __fastcall IopCancelWaitCompletionPacket(KWAIT_BLOCK *Entry, CHAR a2, UINT8 a3){
void *Object;
unsigned __int64 v5;
__int16 *WaitObject;
__int16 *v8;
UINT8 v9;
void *SparePtr;
Object = Entry[1].Object;
v5 = a3;
WaitObject = (__int16 *)ObpGetWaitObject((INT64)Object - 48);
v8 = 0i64;
if( WaitObject != &ObpDefaultObject )
v8 = WaitObject;
v9 = KeDeregisterObjectNotification(v8, Entry);
SparePtr = Entry[1].SparePtr;
if( !v9 && (!a2 || !KeRemoveQueueEntry((_KQUEUE *)Entry[1].SparePtr, &Entry->WaitListEntry)) )
return 0;
Entry[1].SparePtr = 0i64;
LOBYTE(Entry[2].WaitListEntry.Blink) = 0;
KxReleaseSpinLock((UINT64 *)&Entry[2]);
__writecr8(v5);
ObfDereferenceObjectWithTag(Object, 0x746C6644ui64);
ObfDereferenceObjectWithTag(SparePtr, 0x746C6644ui64);
ObfDereferenceObjectWithTag(Entry, 0x746C6644ui64);
return 1;
}Referenced by:
IopCloseWaitCompletionPacket
NtCancelWaitCompletionPacket