FsRtlIssueDeviceIoControl

NTSTATUS __stdcall FsRtlIssueDeviceIoControl(
        _DEVICE_OBJECT *DeviceObject,
        UINT64 IoCtl,
        UINT8 IrpFlags,
        PVOID InputBuffer,
        UINT64 InputBufferLength,
        PVOID OutputBuffer,
        UINT64 OutputBufferLength,
        UINT64 *IosbInformation){
  ULONG v9; 
  PIRP v12; 
  int Status; 
  struct _IO_STATUS_BLOCK IoStatusBlock; 
  struct _KEVENT Object; 
  v9 = IoCtl;
  memset(&Object, 0, sizeof(Object));
  IoStatusBlock = 0i64;
  KeInitializeEvent(&Object, NotificationEvent, 0);
  v12 = IoBuildDeviceIoControlRequest(
          v9,
          DeviceObject,
          InputBuffer,
          InputBufferLength,
          OutputBuffer,
          OutputBufferLength,
          0,
          &Object,
          &IoStatusBlock);
  if( !v12 )
    return -1073741670;
  *(_BYTE *)(*((_QWORD *)v12 + 23) - 70i64) |= IrpFlags;
  Status = IofCallDriver(DeviceObject, v12);
  if( Status == 259 )
  {
    KeWaitForSingleObject(&Object, Executive, 0, 0, 0i64);
    Status = IoStatusBlock.Status;
  }
  if( Status >= 0 )
  {
    if( IosbInformation )
      *IosbInformation = IoStatusBlock.Information;
  }
  return Status;
}

Referenced by:

FsRtlGetSectorSizeInformation
FsRtlVolumeDeviceToCorrelationId