IoGetDeviceInterfaces
NTSTATUS __stdcall IoGetDeviceInterfaces(
const GUID *InterfaceClassGuid,
PDEVICE_OBJECT PhysicalDeviceObject,
ULONG Flags,
PZZWSTR *SymbolicLinkList){
_UNICODE_STRING *v5;
NTSTATUS result;
__int64 v7;
__int16 *v8;
_WORD *v9;
PVOID *v10;
PVOID *v11;
__int64 v12;
_WORD *v13;
__int64 v14;
_WORD *v15;
__int64 v16;
v5 = 0i64;
if( PhysicalDeviceObject )
{
v7 = *(_QWORD *)(*((_QWORD *)PhysicalDeviceObject + 39) + 40i64);
if( !v7 || (*(_DWORD *)(v7 + 396) & 0x20000) != 0 )
{
IoAddTriageDumpDataBlock(PhysicalDeviceObject, *((unsigned __int16 *)PhysicalDeviceObject + 1));
v8 = (__int16 *)*((_QWORD *)PhysicalDeviceObject + 1);
if( v8 )
{
IoAddTriageDumpDataBlock(v8, (unsigned int)v8[1]);
v9 = (_WORD *)(*((_QWORD *)PhysicalDeviceObject + 1) + 56i64);
if( *v9 )
{
IoAddTriageDumpDataBlock(v9, 2ui64);
IoAddTriageDumpDataBlock(
*(PVOID *)(*((_QWORD *)PhysicalDeviceObject + 1) + 64i64),
*(unsigned __int16 *)(*((_QWORD *)PhysicalDeviceObject + 1) + 56i64));
}
}
v10 = *(PVOID **)(*((_QWORD *)PhysicalDeviceObject + 39) + 40i64);
if( v10 )
{
v11 = v10 + 5;
IoAddTriageDumpDataBlock(v10, 0x310ui64);
if( *(_WORD *)v11 )
{
IoAddTriageDumpDataBlock(v11, 2ui64);
IoAddTriageDumpDataBlock(v11[1], *(unsigned __int16 *)v11);
}
v12 = *((_QWORD *)PhysicalDeviceObject + 39);
v13 = (_WORD *)(*(_QWORD *)(v12 + 40) + 56i64);
if( *v13 )
{
IoAddTriageDumpDataBlock(v13, 2ui64);
IoAddTriageDumpDataBlock(
*(PVOID *)(*(_QWORD *)(*((_QWORD *)PhysicalDeviceObject + 39) + 40i64) + 64i64),
*(unsigned __int16 *)(*(_QWORD *)(*((_QWORD *)PhysicalDeviceObject + 39) + 40i64) + 56i64));
v12 = *((_QWORD *)PhysicalDeviceObject + 39);
}
v14 = *(_QWORD *)(*(_QWORD *)(v12 + 40) + 16i64);
if( v14 )
{
v15 = (_WORD *)(v14 + 56);
if( *v15 )
{
IoAddTriageDumpDataBlock(v15, 2ui64);
v16 = *(_QWORD *)(*(_QWORD *)(*((_QWORD *)PhysicalDeviceObject + 39) + 40i64) + 16i64);
IoAddTriageDumpDataBlock(*(PVOID *)(v16 + 64), *(unsigned __int16 *)(v16 + 56));
}
}
}
KeBugCheckEx(0xCAu, 2ui64, (ULONG_PTR)PhysicalDeviceObject, 0i64, 0i64);
}
v5 = (_UNICODE_STRING *)(v7 + 40);
}
IopGetDeviceInterfaces(InterfaceClassGuid, v5, *(UINT64 *)&Flags, 0, SymbolicLinkList, 0i64);
return result;
}Referenced by:
IopFetchConfigurationInformation
PnprIsMemoryDevice
PnprIsProcessorDevice
VhdiMountVhdFile