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