IopDuplicateDetection
NTSTATUS __stdcall IopDuplicateDetection(
_INTERFACE_TYPE LegacyBusType,
UINT64 BusNumber,
UINT64 SlotNumber,
_DEVICE_NODE **DeviceNode){
NTSTATUS v4;
unsigned int v6;
unsigned int v7;
_DEVICE_NODE *LegacyBusDeviceNode;
int v10;
void(__fastcall **v12)(_QWORD);
__int64 v13[5];
VOID *Interface;
v4 = 0;
Interface = 0i64;
v6 = SlotNumber;
v13[0] = 0i64;
v7 = BusNumber;
*DeviceNode = 0i64;
LegacyBusDeviceNode = IopFindLegacyBusDeviceNode(LegacyBusType, BusNumber);
if( !LegacyBusDeviceNode )
return -1073741808;
IopQueryResourceHandlerInterface(
ResourceLegacyDeviceDetection,
LegacyBusDeviceNode->PhysicalDeviceObject,
0,
&Interface);
if( v10 < 0 )
return -1073741808;
v12 = (void(__fastcall **)(_QWORD))Interface;
if( !Interface )
return -1073741808;
if( (*((int(__fastcall **)(_QWORD, _QWORD, _QWORD, _QWORD, __int64 *))Interface + 4))(
*((_QWORD *)Interface + 1),
(unsigned int)LegacyBusType,
v7,
v6,
v13) >= 0
&& v13[0] )
{
*DeviceNode = *(_DEVICE_NODE **)(*(_QWORD *)(v13[0] + 312) + 40i64);
}
else
{
v4 = -1073741808;
}
v12[3](v12[1]);
ExFreePoolWithTag(v12, 0);
return v4;
}Referenced by:
IoReportDetectedDevice