RawPerformDevIoCtrl
NTSTATUS __stdcall RawPerformDevIoCtrl(
_DEVICE_OBJECT *Device,
VOID *OutputBuffer,
VOID *InputBuffer,
UINT64 InputBufferLength,
VOID *a5,
UINT64 OutputBufferLength,
UINT8 InternalDeviceIoControl,
UINT8 OverrideVerify,
_IO_STATUS_BLOCK *Iosb){
PIRP *v10;
NTSTATUS result;
_IO_STATUS_BLOCK IoStatusBlock;
__int128 Object;
__int64 v14;
IoStatusBlock.Pointer = 0i64;
IoStatusBlock.Information = 0i64;
v14 = 0i64;
Object = 0i64;
KeInitializeEvent((INT64)&Object, 0, 0);
v10 = IoBuildDeviceIoControlRequest(
0x70000u,
(PDEVICE_OBJECT)OutputBuffer,
0i64,
0,
a5,
0x18u,
0,
(PKEVENT)&Object,
&IoStatusBlock);
if( !v10 )
return -1073741670;
BYTE2(v10[23][-1].Tail.DriverContext[2]) |= 2u;
result = IofCallDriver((UINT64)OutputBuffer, (UINT64)v10);
if( result == 259 )
{
KeWaitForSingleObject((UINT64)&Object, 0, 0, 0, 0i64);
return IoStatusBlock.Status;
}
return result;
}Referenced by:
RawQueryFileSystemInformation