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