FsRtlIssueDeviceIoControl

NTSTATUS __stdcall FsRtlIssueDeviceIoControl(
        _DEVICE_OBJECT *DeviceObject,
        UINT64 IoCtl,
        UINT8 IrpFlags,
        VOID *InputBuffer,
        UINT64 InputBufferLength,
        VOID *OutputBuffer,
        UINT64 OutputBufferLength,
        UINT64 *IosbInformation){
  UINT32 v9; 
  PIRP *v12; 
  int Status; 
  _IO_STATUS_BLOCK IoStatusBlock; 
  __int128 Object; 
  __int64 v17; 

  v9 = IoCtl;
  Object = 0i64;
  v17 = 0i64;
  IoStatusBlock = 0i64;
  KeInitializeEvent((INT64)&Object, 0, 0);
  v12 = IoBuildDeviceIoControlRequest(
          v9,
          DeviceObject,
          InputBuffer,
          InputBufferLength,
          OutputBuffer,
          OutputBufferLength,
          0,
          (PKEVENT)&Object,
          &IoStatusBlock);
  if( !v12 )
    return -1073741670;
  BYTE2(v12[23][-1].Tail.DriverContext[2]) |= IrpFlags;
  Status = IofCallDriver((UINT64)DeviceObject, (UINT64)v12);
  if( Status == 259 )
  {
    KeWaitForSingleObject((UINT64)&Object, 0, 0, 0, 0i64);
    Status = IoStatusBlock.Status;
  }
  if( Status >= 0 )
  {
    if( IosbInformation )
      *IosbInformation = IoStatusBlock.Information;
  }
  return Status;
}

Referenced by:

FsRtlGetSectorSizeInformation
FsRtlVolumeDeviceToCorrelationId