IopCreateArcNamesDisk
INT64 __stdcall IopCreateArcNamesDisk(){
unsigned int DiskCount;
int ConfigurationInformation;
WCHAR v2;
const WCHAR *v3;
bool v4;
unsigned int i;
unsigned int v6;
__int64 v7;
WCHAR v9;
UINT64 NumberFound;
PCWSTR SourceString;
PDEVICE_OBJECT DeviceObject;
PFILE_OBJECT FileObject;
struct _UNICODE_STRING DestinationString;
GUID InterfaceClassGuid;
wchar_t pszDest[64];
DestinationString = 0i64;
DeviceObject = 0i64;
SourceString = 0i64;
FileObject = 0i64;
LODWORD(NumberFound) = 0;
DiskCount = IoGetConfigurationInformation()->DiskCount;
InterfaceClassGuid = GUID_DEVINTERFACE_DISK;
ConfigurationInformation = IopFetchConfigurationInformation(
(WCHAR **)&SourceString,
&InterfaceClassGuid,
DiskCount,
&NumberFound);
v3 = SourceString;
v4 = ConfigurationInformation < 0;
if( (unsigned int)NumberFound > DiskCount )
DiskCount = NumberFound;
if( ConfigurationInformation < 0 && !(_DWORD)NumberFound )
DiskCount += 20;
for( i = 0; i < DiskCount; ++i )
{
if( v3 && *v3 )
{
v6 = -1;
RtlInitUnicodeString(&DestinationString, v3, v2);
v7 = -1i64;
do
++v7;
while( v3[v7] );
v3 += v7 + 1;
if( v4 && !*v3 )
DiskCount = i + 20;
}
else
{
v6 = i;
RtlStringCchPrintfW(pszDest, 0x40ui64, (WCHAR *)L"\\Device\\Harddisk%d\\Partition0");
RtlInitUnicodeString(&DestinationString, pszDest, v9);
}
if( IoGetDeviceObjectPointer(&DestinationString, 0x80ui64, &FileObject, &DeviceObject) >= 0 )
{
IopCreateArcName(DeviceObject, v6);
ObfDereferenceObjectWithTag(FileObject, 0x746C6644ui64);
}
}
if( SourceString )
ExFreePoolWithTag((PVOID)SourceString, 0);
return 0i64;
}Referenced by:
IopCreateArcNames