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