IoGetDeviceInterfaces
NTSTATUS __stdcall IoGetDeviceInterfaces(
_GUID *InterfaceClassGuid,
_DEVICE_OBJECT *PhysicalDeviceObject,
UINT64 Flags,
WCHAR **SymbolicLinkList){
_UNICODE_STRING *v5;
NTSTATUS result;
char *DeviceNode;
_DRIVER_OBJECT *DriverObject;
_UNICODE_STRING *p_DriverName;
VOID **v10;
VOID **v11;
_DEVOBJ_EXTENSION *DeviceObjectExtension;
_WORD *v13;
__int64 v14;
_WORD *v15;
__int64 v16;
v5 = 0i64;
if( PhysicalDeviceObject )
{
DeviceNode = (char *)PhysicalDeviceObject->DeviceObjectExtension->DeviceNode;
if( !DeviceNode || (*((_DWORD *)DeviceNode + 99) & 0x20000) != 0 )
{
IoAddTriageDumpDataBlock(PhysicalDeviceObject, (_BYTE *)PhysicalDeviceObject->Size);
DriverObject = PhysicalDeviceObject->DriverObject;
if( DriverObject )
{
IoAddTriageDumpDataBlock(DriverObject, (_BYTE *)(unsigned int)DriverObject->Size);
p_DriverName = &PhysicalDeviceObject->DriverObject->DriverName;
if( p_DriverName->Length )
{
IoAddTriageDumpDataBlock(p_DriverName, (_BYTE *)2);
IoAddTriageDumpDataBlock(
PhysicalDeviceObject->DriverObject->DriverName.Buffer,
(_BYTE *)PhysicalDeviceObject->DriverObject->DriverName.Length);
}
}
v10 = (VOID **)PhysicalDeviceObject->DeviceObjectExtension->DeviceNode;
if( v10 )
{
v11 = v10 + 5;
IoAddTriageDumpDataBlock(v10, (_BYTE *)0x310);
if( *(_WORD *)v11 )
{
IoAddTriageDumpDataBlock(v11, (_BYTE *)2);
IoAddTriageDumpDataBlock(v11[1], (_BYTE *)*(unsigned __int16 *)v11);
}
DeviceObjectExtension = PhysicalDeviceObject->DeviceObjectExtension;
v13 = (char *)DeviceObjectExtension->DeviceNode + 56;
if( *v13 )
{
IoAddTriageDumpDataBlock(v13, (_BYTE *)2);
IoAddTriageDumpDataBlock(
*((VOID **)PhysicalDeviceObject->DeviceObjectExtension->DeviceNode + 8),
(_BYTE *)*((unsigned __int16 *)PhysicalDeviceObject->DeviceObjectExtension->DeviceNode + 28));
DeviceObjectExtension = PhysicalDeviceObject->DeviceObjectExtension;
}
v14 = *((_QWORD *)DeviceObjectExtension->DeviceNode + 2);
if( v14 )
{
v15 = (_WORD *)(v14 + 56);
if( *v15 )
{
IoAddTriageDumpDataBlock(v15, (_BYTE *)2);
v16 = *((_QWORD *)PhysicalDeviceObject->DeviceObjectExtension->DeviceNode + 2);
IoAddTriageDumpDataBlock(*(VOID **)(v16 + 64), (_BYTE *)*(unsigned __int16 *)(v16 + 56));
}
}
}
KeBugCheckEx(0xCAu, (PVOID)2, PhysicalDeviceObject, 0i64, 0i64);
}
v5 = (_UNICODE_STRING *)(DeviceNode + 40);
}
IopGetDeviceInterfaces(InterfaceClassGuid, v5, Flags, 0, SymbolicLinkList, 0i64);
return result;
}Referenced by:
IopFetchConfigurationInformation
PnprIsMemoryDevice
PnprIsProcessorDevice
VhdiMountVhdFile