IopEliminateBogusConflict
VOID __fastcall IopEliminateBogusConflict(_DEVICE_OBJECT *PhysicalDeviceObject, _DEVICE_OBJECT *ConflictDeviceObject){
INT64 v2;
UINT8 v5;
_DEVICE_OBJECT *v6;
char *DeviceNode;
_DRIVER_OBJECT *DriverObject;
const _UNICODE_STRING *v9;
const _UNICODE_STRING *p_ServiceKeyName;
if( PhysicalDeviceObject && ConflictDeviceObject )
{
v5 = KeAcquireQueuedSpinLock(10i64, (INT64)ConflictDeviceObject, v2);
v6 = PhysicalDeviceObject;
do
{
if( v6 == ConflictDeviceObject )
{
KeReleaseQueuedSpinLock(LockQueueIoDatabaseLock, v5);
return;
}
v6 = v6->AttachedDevice;
}
while( v6 );
KeReleaseQueuedSpinLock(LockQueueIoDatabaseLock, v5);
DeviceNode = (char *)PhysicalDeviceObject->DeviceObjectExtension->DeviceNode;
if( (*((_DWORD *)DeviceNode + 99) & 0x1000) != 0 && (ConflictDeviceObject->Flags & 0x1000) == 0 )
{
DriverObject = ConflictDeviceObject->DriverObject;
if( DriverObject )
{
v9 = (const _UNICODE_STRING *)(DeviceNode + 56);
if( v9->Length )
{
p_ServiceKeyName = &DriverObject->DriverExtension->ServiceKeyName;
if( v9->Length == p_ServiceKeyName->Length )
RtlCompareUnicodeString(v9, p_ServiceKeyName, 1u);
}
}
}
}
}Referenced by:
IopQueryConflictFillConflicts