Hi,
I have two types of bluetooth controller devices say X and Y for which I need to write a DFU application. When Device X is plugged into USB it directly goes into DFU mode (and not in Application mode). Below is its entry in IORegistry Explorer:

IOUSBWirelessControllerDevice@3d100000
AppleUSBBluetoothHCIController (This entry gets crossed out after few seconds)
IOUSBInterface@0
IOUSBInterface@1
IOUSBInterface@2

I am successfully able to download firmware to this device using my application. The first step this application does is to open the device.

I am trying same things for device Y. The only difference with this device is that it remains in Application mode when plugged into USB. Following is its entry in IORegistry Explorer:

IOUSBWirelessControllerDevice@1d100000
CSRUSBBluetoothHCIController
IOBluetoothHCIUserClient
IOBluetoothHCIUserClient
IOUSBInterface@0
IOUSBInterface@1
IOUSBInterface@2

When my application tries to open this device it gives me kIOReturnExclusiveAccess error.

You can notice that CSRUSBBluetoothHCIController and IOBluetoothHCIUserClient entries are not present for device X. This made me conclude to have a codeless kext for device Y to avoid both the entries.
I am not sure if the entry mismatch in the IORegistry for both the devices is the reason for getting an error while opening the device. Any pointers?