- How to Restore a Microsoft Bluetooth Stack
- Step 1
- Step 2
- Step 3
- Step 4
- Step 5
- Step 6
- Bluetooth Driver Installer
- About
- User comments
- Screenshots
- Video demo
- Version history
- Known issues
- Download
- How to use
- Switching between different bluetooth stacks
- How to change Bluetooth Address (MAC address) under Windows
- Bluetooth software
- Other Bluetooth resources
- License
- Feedback and contacts
- How to use the Bluetooth Driver Stack
- Feedback
How to Restore a Microsoft Bluetooth Stack
Many Bluetooth devices install third-party device drivers which disable the Microsoft generic Bluetooth software or «stack» in older versions of Windows, and prevent it from loading. Other devices, notably Blackberry cell phones, will only connect to a PC that is running Microsoft’s Bluetooth drivers. Running more than one set of Bluetooth drivers can cause stability problems and is not advisable. In order to allow the Microsoft drivers to load, you must uninstall any third-party Bluetooth drivers.
Step 1
Uninstall the third-party drivers through Control Panel. Click on «Start» and «Control Panel,» then click on «Add/Remove Programs» in Windows XP or «Uninstall a program» in Vista. Locate the third-party drivers and uninstall them.
Step 2
Click on «Start» and «Run,» then type «%windir%\inf» in the «Open» box and click «OK.» Look for the file «bth.inf.old» or «bth.bak.» If neither file is present, go to Step 3. Right-click on the file and select «Rename.» Rename it to «bth.inf.»
Step 3
Restart the computer and connect your Bluetooth adapter. Windows will detect the new hardware and the Microsoft Bluetooth stack will load automatically and install the correct drivers. If the original Microsoft stack is damaged and fails to recognize your Bluetooth device, you can reinstall Windows Bluetooth drivers from third-party sites or install the latest updates for your version of Windows from Microsoft. Microsoft doesn’t provide a separate download of the Bluetooth drivers.
Step 4
Download the free Bluetooth Driver Installer from BluetoothInstaller.com. Restart your computer and when Windows prompts for the Bluetooth driver, click «Cancel.» Double-click on «BluetoothDriverInstaller.exe.» Click «OK,» check the box to accept the terms and conditions and click «Next.» When the software has found the Bluetooth adapter, click «Next» to install the driver. Click «Next» to test the Bluetooth adapter and then click «Exit» to complete the installation.
Step 5
Download Driver Whiz from the company’s website (see References). Driver Whiz is a freeware program that will scan your system for any corrupt or missing Windows Bluetooth Drivers and update them automatically to the latest compatible version. Click on the EXE program file to start the download and select «Run» in Internet Explorer or «Save As» in Firefox. Click «Run» and follow the installation instructions on-screen. Driver Whiz will create a System Restore Point before installing new drivers.
Step 6
Download the latest updates for your version of Windows from Microsoft. For Windows XP, go to the Windows Update Center on the Microsoft website. In later versions of Windows, click «Start,» click «All Programs» and then click «Windows Update.» If Windows detects any important updates, install them by clicking on the link «Install Updates.» Restart your computer when prompted.
Bluetooth Driver Installer
Get Bluetooth to work with the Microsoft Bluetooth stack.
About
This small freeware utility will try to install generic Microsoft driver for your bluetooth adapter. The program is based on a widely known method of patching %WinDir%\inf\bth.inf file.
It works for most (but not all) bluetooth adapters, both USB dongles and built-in. (See the list of bluetooth devices and hardware IDs known to work. Note that this list is not exhaustive.)
Before making changes to your system the program automatically creates a restore point. If anything goes wrong you can use Windows System Restore feature to revert all changes made to your computer.
User comments
Fantastic tool! We recommend it to customers of our bluetooth marketing software to resolve problems with bluetooth drivers.
smartbluetoothmarketing.com
Tried many times to get rid of the Toshiba stack. With the Bluetooth Driver Installer software finally success.
posted anonymously
I was having problems syncing my blackberry with the software and WIDCOMM Drivers issued with the IOGEAR USB Micro Adapter but your bluetooth driver software took care of all of my issues!
posted anonymously
Screenshots
Video demo
Version history
[Fixed] Error: Cannot open file «c:\windows\inf\bth.inf». Missing bth.inf file is recovered when installing over existing Bluesoleil stack.
[Fixed] Error: Cannot open file «c:\windows\inf\bth.inf». The system cannot find the file specified.
[+] Improved algorithm of detecting unconfigured bluetooth hardware (in some cases bluetooth adapter was not detected after uninstallation of the existing bluetooth stack).
[+] Now it is possible to proceed with the installation without removing existing bluetooth stack. (Use with caution. In case of failure try uninstall existing stack first).
[+] More detailed error and diagnostic messages
[+] Full information on the successfully installed bluetooth adapter
Known issues
System Error. Code: -536870347 (FFFFFFFFE0000237)
Happens on x64 platform. Under investigation, very likely will be fixed soon.
Try the following: Open Device Manager, right click on root node (computer) and select «Scan for hardware changes». Let Windows to find and install driver automatically.
Download
Download Bluetooth Driver Installer, version 1.0.0.151 Beta, released on February 20, 2023
32-bit (x86) version BluetoothDriverInstaller.exe (2.1 Mb) [md5 hash: 63cab4fd383468e1c4c7c47878cea029]
64-bit (x64) version BluetoothDriverInstaller_x64.exe (3.2 Mb) [md5 hash: 9c362485ed8046c4dd51ef71d015d8a7]
How to use
1. Uninstall your existing bluetooth stack (driver software that came with the bluetooth adapter).
2. Reboot your computer and click «Cancel» when Windows asks for the driver.
3. Run BluetoothDriverInstaller.exe and follow instructions of the wizard.
Uninstallation
There is no need to uninstall Bluetooth Driver Installer itself, just delete downloaded file.
To rollback changes made to you system use Windows System Restore feature (available from Start Menu — Programs — Accessories — System Tools — System Restore).
Backup copies of bth.inf file can be found in
c:\Documents and Settings\USERNAME\Application Data\BluetoothDriverInstaller\ — on Windows XP
c:\Users\USERNAME\AppData\Roaming\BluetoothDriverInstaller\ — on Windows Vista and Windows 7
Note: No changes have been made to your system if you exited the wizard on the second step (due to «No unconfigured bluetooth hardware found» error).
Switching between different bluetooth stacks
Lots of Bluetooth applications work only under certain bluetooth stack. To quickly switch your bluetooth adapter between multiple installed stacks you can use Bluetooth Stack Switcher.
How to change Bluetooth Address (MAC address) under Windows
If for some reason you wish to modify the Bluetooth Address of your dongle, try Bluetooth MAC Address Changer.
Bluetooth software
You may wish to check out Bluetooth Command Line Tools — a set of console utilities designed to work with Microsoft bluetooth stack.
Other Bluetooth resources
Owners of bluetooth related resources are welcome to add their links.
License
By installing and using the software, you agree to be bound by the terms of this agreement. If you do not agree to the terms of this agreement, do not install or use this software and delete any copies of the software that you have downloaded.
This software is freeware. The author of this software reserves all rights granted by copyright. Permission is granted to use this software for personal and commercial purposes.
You may not copy, modify, sublicense, or distribute the Program except as expressly authorized by the author.
DISCLAIMER
THE SOFTWARE IS PROVIDED «AS IS», WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Feedback and contacts
Please report bugs and send a feedback to info@bluetoothinstaller.com
How to use the Bluetooth Driver Stack
After Windows loads and initializes the Bluetooth driver stack, the driver stack discovers active Bluetooth devices that have already been paired. The driver stack then generates device identifiers (device IDs) for all paired devices. Next, the driver stack uses standard Plug and Play (PnP) mechanisms to load the appropriate profile driver for each device. The profile driver to be loaded is selected based on the INF file that installs the profile driver and the device identifier, as generated by the Bluetooth driver stack and described in Installing a Bluetooth Device.
Profile drivers communicate with the Bluetooth driver stack through the standard I/O Request Packet (IRP)-based mechanism employed by all drivers based on the WDM architecture. A profile driver communicates with its device by allocating and sending IRPs down the Bluetooth driver stack to the Bluetooth port driver, Bthport.sys.
A profile driver allocates and initializes IRPs to be processed by Bthport.sys. Profile drivers then communicate with their devices by using IOCTL requests that are delivered to the device by means of an IRP_MJ_INTERNAL_DEVICE_CONTROL or IRP_MJ_DEVICE_CONTROL IRP. The profile driver specifies one of the I/O control codes in the following list in the IRP.
The Bluetooth driver stack supports the following IOCTLs for kernel-mode callers through IRP_MJ_DEVICE_CONTROL:
The Bluetooth driver stack supports the following IOCTLs and BRBs kernel-mode callers (generally for driver-to-driver communication) through IRP_MJ_INTERNAL_DEVICE_CONTROL:
For more information about how to use the IOCTLs described in the previous lists, see Bluetooth IOCTLs.
Profile drivers primarily use IOCTL_INTERNAL_BTH_SUBMIT_BRB to communicate and interact with the functionality provided in the Bluetooth driver stack. A profile driver uses IOCTL_INTERNAL_BTH_SUBMIT_BRB to deliver a variable-length data structure called a Bluetooth Request Block (BRB) to the device it manages. Profile drivers use BRBs to open and close connections to remote devices and to perform most input and output tasks. IOCTL_INTERNAL_BTH_SUBMIT_BRB contains a BRB that further describes the Bluetooth operation to perform. To learn more about how to build and send BRBs down the Bluetooth driver stack, see Building and Sending a BRB.
Each BRB begins with a standard header defined by the BRB_HEADER structure that specifies the type of BRB, which determines the structure of the rest of the BRB. The Type member, which must equal one of the values found in the BRB_TYPE enumeration, determines the type of Bluetooth operation that the profile driver requests. The BRB structure and size vary according to the type of BRB. The Length member of the BRB_HEADER structure specifies the size, in bytes, of the BRB. The BthAllocateBrb, BthInitializeBrb, and BthReuseBrb functions automatically set the Type and Length members.
For example, to open a connection to a remote device, specify either one of the function codes, BRB_L2CA_OPEN_CHANNEL or BRB_SCO_OPEN_CHANNEL, to indicate that the profile driver is attempting to open a L2CAP or a SCO connection channel to the remote device. The Bluetooth driver stack uses the Status member of the BRB structure to return a Bluetooth-specific status code.
For each BRB, the profile driver must allocate and initialize the appropriate corresponding structure with information about the Bluetooth operation to perform.
The following table describes the structures that correspond to specific BRBs that profile drivers can issue:
Bluetooth Request Block (BRB) | Corresponding structure |
---|---|
BRB_HCI_GET_LOCAL_BD_ADDR | _BRB_GET_LOCAL_BD_ADDR |
BRB_L2CA_REGISTER_SERVER | _BRB_L2CA_REGISTER_SERVER |
BRB_L2CA_UNREGISTER_SERVER | _BRB_L2CA_UNREGISTER_SERVER |
BRB_L2CA_OPEN_CHANNEL | _BRB_L2CA_OPEN_CHANNEL |
BRB_L2CA_OPEN_CHANNEL_RESPONSE | _BRB_L2CA_OPEN_CHANNEL |
BRB_L2CA_CLOSE_CHANNEL | _BRB_L2CA_CLOSE_CHANNEL |
BRB_L2CA_ACL_TRANSFER | _BRB_L2CA_ACL_TRANSFER |
BRB_L2CA_UPDATE_CHANNEL | _BRB_L2CA_UPDATE_CHANNEL |
BRB_L2CA_PING | _BRB_L2CA_PING |
BRB_REGISTER_PSM | _BRB_PSM |
BRB_UNREGISTER_PSM | _BRB_PSM |
BRB_SCO_REGISTER_SERVER | _BRB_SCO_REGISTER_SERVER |
BRB_SCO_UNREGISTER_SERVER | _BRB_SCO_UNREGISTER_SERVER |
BRB_SCO_OPEN_CHANNEL | _BRB_SCO_OPEN_CHANNEL |
BRB_SCO_OPEN_CHANNEL_RESPONSE | _BRB_SCO_OPEN_CHANNEL |
BRB_SCO_CLOSE_CHANNEL | _BRB_SCO_CLOSE_CHANNEL |
BRB_SCO_TRANSFER | _BRB_SCO_TRANSFER |
BRB_SCO_GET_CHANNEL_INFO | _BRB_SCO_GET_CHANNEL_INFO |
BRB_SCO_GET_SYSTEM_INFO | _BRB_SCO_GET_SYSTEM_INFO |
BRB_SCO_FLUSH_CHANNEL | _BRB_SCO_FLUSH_CHANNEL |
BRB_ACL_GET_MODE | _BRB_ACL_GET_MODE |
BRB_ACL_ENTER_ACTIVE_MODE | _BRB_ACL_ENTER_ACTIVE_MODE |
BRB_GET_DEVICE_INTERFACE_STRING | _BRB_GET_DEVICE_INTERFACE_STRING |
For more information about using Bluetooth IOCTLs and BRBs, see Building and Sending a BRB.
Feedback
Submit and view feedback for