FsRtlGetVirtualDiskNestingLevel

NTSTATUS __stdcall FsRtlGetVirtualDiskNestingLevel(
        _DEVICE_OBJECT *DeviceObject,
        UINT64 *NestingLevel,
        UINT64 *NestingFlags){
  unsigned __int64 v3; 
  ULONG MaximumVirtualDiskNestingLevel; 
  int v8; 
  __int64 v9; 
  UINT8 v10; 
  _IRP *v11; 
  int Status; 
  int v14; 
  UINT64 OutputBufferLength; 
  _KEVENT Object; 
  __int64 InputBuffer; 
  _IO_STATUS_BLOCK IoStatusBlock; 
  __int128 OutputBuffer; 
  ULONG v20; 
  PVOID ReturnAddress; 
  v3 = *((unsigned int *)DeviceObject + 18);
  Object.Header.Reserved1 = 0;
  MaximumVirtualDiskNestingLevel = 0;
  v8 = 1;
  IoStatusBlock = 0i64;
  if( (unsigned int)v3 > 0x24 )
    return -1073741808;
  v9 = 0x100000018Ci64;
  if( !_bittest64(&v9, v3) )
    return -1073741808;
  LOWORD(Object.Header.Lock) = 0;
  Object.Header.WaitListHead.Blink = &Object.Header.WaitListHead;
  Object.Header.Size = 6;
  Object.Header.WaitListHead.Flink = &Object.Header.WaitListHead;
  Object.Header.SignalState = 0;
  v10 = IoSetThreadHardErrorMode(0);
  InputBuffer = 1i64;
  v20 = 0;
  LODWORD(OutputBufferLength) = 20;
  OutputBuffer = 0i64;
  v11 = IopBuildDeviceIoControlRequest(
          0x2D1190ui64,
          DeviceObject,
          &InputBuffer,
          8ui64,
          &OutputBuffer,
          OutputBufferLength,
          0,
          &Object,
          &IoStatusBlock,
          ReturnAddress);
  if( v11 )
  {
    Status = IofCallDriver(DeviceObject, v11);
    if( Status == 259 )
    {
      KeWaitForSingleObject(&Object, Executive, 0, 0, 0i64);
      Status = IoStatusBlock.Status;
    }
    if( Status >= 0 && IoStatusBlock.Information >= 0x14 && (_DWORD)OutputBuffer == 1 )
    {
      if( v20 > FsRtlQueryMaximumVirtualDiskNestingLevel() )
      {
        MaximumVirtualDiskNestingLevel = FsRtlQueryMaximumVirtualDiskNestingLevel();
      }
      else if( v20 )
      {
        MaximumVirtualDiskNestingLevel = v20;
      }
      if( BYTE4(OutputBuffer) )
        v8 = 0;
      v14 = v8;
      v8 |= 2u;
      if( (BYTE12(OutputBuffer) & 2) == 0 )
        v8 = v14;
    }
    else if( Status != -1073741670 )
    {
      Status = 0;
    }
  }
  else
  {
    Status = -1073741670;
  }
  *(_DWORD *)NestingLevel = MaximumVirtualDiskNestingLevel;
  if( NestingFlags )
    *(_DWORD *)NestingFlags = v8;
  IoSetThreadHardErrorMode(v10);
  return Status;
}

Referenced by:

No references.