IopAssignBootDriveLetter

NTSTATUS __stdcall IopAssignBootDriveLetter(){
  NTSTATUS result; 
  _IRP *v1; 
  NTSTATUS Status; 
  UINT64 v3; 
  _UNICODE_STRING DestinationString; 
  _IO_STATUS_BLOCK IoStatusBlock; 
  __int16 Object; 
  char v7; 
  char v8; 
  int v9; 
  __int64 v10[3]; 
  VOID *ReturnAddress; 
  PDEVICE_OBJECT DeviceObject; 
  PFILE_OBJECT FileObject; 

  FileObject = 0i64;
  DeviceObject = 0i64;
  v8 = 0;
  DestinationString = 0i64;
  IoStatusBlock = 0i64;
  RtlInitUnicodeString(&DestinationString, L"\\Device\\MountPointManager");
  result = IoGetDeviceObjectPointer(&DestinationString, 0x80ui64, &FileObject, &DeviceObject);
  if( result >= 0 )
  {
    Object = 0;
    v9 = 0;
    v10[1] = (__int64)v10;
    v7 = 6;
    v10[0] = (__int64)v10;
    LODWORD(v3) = 0;
    v1 = IopBuildDeviceIoControlRequest(
           0x6DC044ui64,
           DeviceObject,
           0i64,
           0i64,
           0i64,
           v3,
           0,
           (_KEVENT *)&Object,
           &IoStatusBlock,
           ReturnAddress);
    if( v1 )
    {
      Status = IofCallDriver((UINT64)DeviceObject, (UINT64)v1);
      if( Status == 259 )
      {
        KeWaitForSingleObject((UINT64)&Object, 0, 0, 0, 0i64);
        Status = IoStatusBlock.Status;
      }
    }
    else
    {
      Status = -1073741670;
    }
    ObfDereferenceObjectWithTag(FileObject, 0x746C6644ui64);
    return Status;
  }
  return result;
}

Referenced by:

IopMarkBootPartition