IoCancelFileOpen
VOID __stdcall IoCancelFileOpen(_DEVICE_OBJECT *DeviceObject, _FILE_OBJECT *FileObject){
bool v2;
UINT64 v5;
UINT8 v6;
UINT8 v7;
_IRP *IrpMustSucceed;
_ETHREAD *CurrentThread;
__int64 v10;
UINT64 v11;
UINT8 v12;
UINT8 v13;
IRP *v14;
struct _KEVENT Event;
v2 = (FileObject->Flags & 0x40000) == 0;
memset(&Event, 0, sizeof(Event));
if( !v2 )
KeBugCheckEx(0xE8u, (ULONG_PTR)FileObject, (ULONG_PTR)DeviceObject, 0i64, 0i64);
KeInitializeEvent(&Event, SynchronizationEvent, 0);
if( (FileObject->Flags & 0x4000000) == 0 )
KeResetEvent(&FileObject->Event, v5, v6, v7, v14);
IrpMustSucceed = IopAllocateIrpMustSucceed(DeviceObject, *((_BYTE *)DeviceObject + 76));
*((_QWORD *)IrpMustSucceed + 24) = FileObject;
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
*((_QWORD *)IrpMustSucceed + 11) = 0i64;
*((_QWORD *)IrpMustSucceed + 19) = CurrentThread;
*((_QWORD *)IrpMustSucceed + 9) = (char *)IrpMustSucceed + 48;
v10 = *((_QWORD *)IrpMustSucceed + 23);
*((_BYTE *)IrpMustSucceed + 64) = 0;
*((_QWORD *)IrpMustSucceed + 10) = &Event;
*((_DWORD *)IrpMustSucceed + 4) = 1028;
*(_BYTE *)(v10 - 72) = 18;
*(_QWORD *)(v10 - 24) = FileObject;
IopQueueThreadIrp(IrpMustSucceed);
if( PoCallDriver(DeviceObject, IrpMustSucceed) == 259 )
KeWaitForSingleObject(&Event, UserRequest, 0, 0, 0i64);
IopDequeueIrpFromThread(IrpMustSucceed);
IoFreeIrp(IrpMustSucceed);
KeResetEvent(&FileObject->Event, v11, v12, v13, v14);
FileObject->Flags |= 0x200000u;
if( FileObject->FileObjectExtension )
IopCloseFileObjectExtension(FileObject);
}Referenced by:
IopParseDevice