VhdiVerifyBootDisk

UINT8 __stdcall VhdiVerifyBootDisk(_DEVICE_OBJECT *DeviceObject){
  bool v1; 
  __int64 v3; 
  UINT32 OutputBufferLength; 
  VOID **OutputBuffer; 
  PIRP *v6; 
  NTSTATUS Status; 
  _IO_STATUS_BLOCK IoStatusBlock; 
  __int128 Object; 
  __int64 v11; 

  v1 = 0;
  Object = 0i64;
  v11 = 0i64;
  IoStatusBlock = 0i64;
  if( DeviceObject )
  {
    if( *(&stru_140CF2E80 + 981) )
    {
      v3 = -1i64;
      do
        ++v3;
      while( *(_WORD *)(*(&stru_140CF2E80 + 981) + 2 * v3) );
      OutputBufferLength = 2 * v3 + 2;
      OutputBuffer = ExAllocatePoolWithTag(0x200ui64, OutputBufferLength, 1113876566i64);
      if( OutputBuffer )
      {
        KeInitializeEvent((INT64)&Object, 1, 0);
        v6 = IoBuildDeviceIoControlRequest(
               0x2D5928u,
               DeviceObject,
               0i64,
               0,
               OutputBuffer,
               OutputBufferLength,
               0,
               (PKEVENT)&Object,
               &IoStatusBlock);
        if( v6 )
        {
          Status = IofCallDriver((UINT64)DeviceObject, (UINT64)v6);
          if( Status == 259 )
          {
            KeWaitForSingleObject((UINT64)&Object, 0, 0, 0, 0i64);
            Status = IoStatusBlock.Status;
          }
          if( Status >= 0 )
            v1 = wcsicmp((const wchar_t *)OutputBuffer, (const wchar_t *)(*(&stru_140CF2E80 + 981) + 2i64)) == 0;
        }
        ExFreePoolWithTag(OutputBuffer, 0x42646856u);
      }
    }
  }
  return v1;
}

Referenced by:

IopCreateArcName