ExpGetDriveGeometry
NTSTATUS __stdcall ExpGetDriveGeometry(UINT64 DiskNumber, _DISK_GEOMETRY *DiskGeometry){
unsigned int v3;
VOID **PoolWithTag;
wchar_t *v5;
int v6;
UINT64 ShareAccess;
UINT64 OpenOptions;
_UNICODE_STRING DestinationString;
_IO_STATUS_BLOCK IoStatusBlock;
_OBJECT_ATTRIBUTES ObjectAttributes;
VOID *FileHandle;
*(&ObjectAttributes.Length + 1) = 0;
*(&ObjectAttributes.Attributes + 1) = 0;
v3 = DiskNumber;
FileHandle = 0i64;
DestinationString = 0i64;
PoolWithTag = ExAllocatePoolWithTag(0x200ui64, 0x4Cui64, 1920364101i64);
v5 = (wchar_t *)PoolWithTag;
if( !PoolWithTag )
return -1073741670;
swprintf_s((WCHAR *)PoolWithTag, 0x26ui64, (WCHAR *)L"\\Device\\Harddisk%lu\\Partition0", v3);
RtlInitUnicodeString(&DestinationString, v5);
ObjectAttributes.RootDirectory = 0i64;
LODWORD(OpenOptions) = 96;
ObjectAttributes.ObjectName = &DestinationString;
ObjectAttributes.Length = 48;
ObjectAttributes.Attributes = 576;
LODWORD(ShareAccess) = 3;
*(_OWORD *)&ObjectAttributes.SecurityDescriptor = 0i64;
IoStatusBlock = 0i64;
v6 = ZwOpenFile(&FileHandle, 0x100080ui64, &ObjectAttributes, &IoStatusBlock, ShareAccess, OpenOptions);
if( v6 >= 0 )
{
v6 = ZwDeviceIoControlFile(
(_HANDLE)FileHandle,
0,
0i64,
0i64,
&IoStatusBlock,
0x70000u,
0i64,
0,
DiskGeometry,
0x18u);
ZwClose((_HANDLE)FileHandle);
if( v6 >= 0 && DiskGeometry->BytesPerSector < 0x200 )
v6 = -1073741823;
}
ExFreePoolWithTag(v5, 0);
return v6;
}Referenced by:
ExpCreateOutputEFI
ExpTranslateEfiPath