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