トラブルシューティング / Windowsドライバ備忘録
DualShock 4がBluetoothで一瞬だけ認識され、すぐ「ペアリング中」に戻る現象を切り分け、修復した作業記録です。DS4Windowsのログ、WindowsのPnPデバイス情報、libusbKの誤適用からの復旧手順、PaSoRi RC-S380/Sとの非排他確認、再発時のチェックリストまで、一箇所にまとめています。
結論を先にお伝えします。BluetoothのHIDドライバ(hidbth.inf)自体は正常でした。真の原因は、DS4のUSB入力インターフェイス(USB\VID_054C&PID_09CC&MI_03)に、過去のZadig系実験の名残でlibusbK / oem54.infが当たっていたことです。これをMicrosoft標準のinput.infに戻したところ、DS4WindowsはUSB経由でDS4 v.2として正常に認識し、仮想X360コントローラも作成されました。
環境
| 作業日 | 2026-05-25 深夜〜2026-05-26 JST |
|---|---|
| 作業場所 | E:\Games\DS4Windows |
| OS | Microsoft Windows NT 10.0.19045.0 / Windows 10 Enterprise |
| DS4Windows | 3.3.3 x64 |
| ViGEmBus | 1.21.442.0 |
| HidHide | 1.2.98.0 |
| DS4 MAC | A4:53:85:39:70:8A |
| PaSoRi | RC-S380/S / USB\VID_054C&PID_06C1\0128556 |
元の症状
DualShock 4をBluetoothでペアリングしようとすると、一瞬だけWindows/DS4Windows側で認識されます。しかし直後に切断され、WindowsのBluetooth画面では再び「ペアリング中」に戻るような挙動が繰り返されていました。
過去にSwitchとMissionControlでDS4を使った経歴があります。ただし、DS4背面リセットは実施済みです。
DS4Windowsのログが語る症状
DS4WindowsはBluetooth経由のDS4を一瞬検出して仮想X360コントローラを作成するところまでは行きます。しかし、その直後にread failureで切断されるループが発生していました。
2026-05-25 23:37:47 A4:53:85:39:70:8A (BT) (DS4 v.2)
2026-05-25 23:37:47 Plugging in virtual X360 controller (XInput slot #1)
2026-05-25 23:37:47 Associated input controller #1 (DS4 v.2) to virtual X360 Controller
2026-05-25 23:37:47 WARN A4:53:85:39:70:8A disconnected due to read failure: 0
2026-05-25 23:37:47 Gamepad data write connection is lost. LastErrorCode=0
2026-05-25 23:37:47 Controller 1 was removed or lost connection. Charge the battery
2026-05-25 23:38:57 A4:53:85:39:70:8A (BT) (DS4 v.2)
2026-05-25 23:38:57 Controller 1 is using Profile "Default". Battery level is 0%
2026-05-25 23:39:03 Gamepad data write connection is lost. LastErrorCode=995
2026-05-25 23:39:03 WARN A4:53:85:39:70:8A disconnected due to read failure: 0
ここで注目すべき点は2つあります。
- DS4WindowsはDS4 v.2として一瞬ちゃんと検出できている(つまり「そもそも見えていない」ではなく「見えた直後に通信維持に失敗している」状態です)。
- バッテリーが
0%と表示されている。
サービス状態の確認
Bluetooth/HID系のサービスはすべて動作中でした。「サービス停止が原因」という線は除外できます。
Get-Service bthserv,BthAvctpSvc,HidServ
Status Name DisplayName StartType
------ ---- ----------- ---------
Running BthAvctpSvc AVCTP サービス Manual
Running bthserv Bluetooth サポート サービス Manual
Running HidServ Human Interface Device Service Manual
本命だったドライバ置換
PnPデバイスの一覧を昇格したGet-PnpDeviceで確認したところ、重要な発見がありました。DS4のUSB入力インターフェイスUSB\VID_054C&PID_09CC&MI_03だけが、Microsoft標準のHIDドライバではなくlibusbK devicesとして分類されていたのです。
DeviceName : Wireless Controller (Interface 3)
DeviceID : USB\VID_054C&PID_09CC&MI_03\7&2696480F&0&0003
DriverProviderName : libusbK
DriverVersion : 3.0.5.16
InfName : oem54.inf
Manufacturer : Sony Corp.
oem54.infをエクスポートしてみると、その正体はandroid_device.infでした。おそらく過去にZadig系やAndroid/USB実験系のドライバがDS4へ適用され、そのまま残存していたものと考えられます。DS4Windowsで通常使用するのであれば、ここはMicrosoft標準のHIDドライバが正しい選択です。
修復手順
いきなり削除するのではなく、まずドライバパッケージをバックアップしてから、DS4Windowsを停止し、oem54.infをアンインストール・削除しました。
$stamp = Get-Date -Format 'yyyyMMdd_HHmmss'
$backup = Join-Path (Get-Location) "driver_backups\oem54_libusbk_$stamp"
New-Item -ItemType Directory -Path $backup -Force
pnputil /export-driver oem54.inf $backup
Get-Process DS4Windows -ErrorAction SilentlyContinue | Stop-Process -Force
pnputil /delete-driver oem54.inf /uninstall /force
pnputil /scan-devices
Backup directory: E:\Games\DS4Windows\driver_backups\oem54_libusbk_20260525_235310
Exporting driver package: oem54.inf (android_device.inf)
Driver package exported successfully.
Total driver packages: 1
Exported driver packages: 1
Driver package uninstalled.
Driver package deleted successfully.
Scanning for device hardware changes.
Scan complete.
修復後のドライバ状態
再スキャン後、DS4のUSB入力インターフェイスはMicrosoft標準のドライバに正しく戻りました。
DeviceName: HID-compliant game controllerDriverProviderName: MicrosoftInfName: input.infDriverVersion: 10.0.19041.3636
XBOX 360 Controller For WindowsもPnP上でOKです。
PaSoRi RC-S380/Sとの排他性確認
「DS4のドライバを直したら、同じSony製のPaSoRiに影響しないか?」という懸念がありました。結論から言うと、排他ではありません。
同じVendor ID(VID_054C)でもProduct IDが異なるため、Windowsのドライバ割り当ては別デバイスとして扱われます。
| デバイス | DualShock 4 | PaSoRi RC-S380/S |
|---|---|---|
| PID | PID_09CC | PID_06C1 |
| ドライバ | input.inf(Microsoft) | oem149.inf(libwdi) |
| 今回の作業 | libusbKを削除してMicrosoft HIDに戻した | 一切触っていない |
| 状態 | OK | OK |
触ってはいけないもの
oem149.infはPaSoRi用です。絶対に消さないでください。VID_054Cだけを見てSony製デバイスを一括削除してはいけません。RC-S380/SやPID_06C1をDS4修復の巻き添えにしないでください。- DS4Windows目的であれば、DS4の
MI_03にZadig系のWinUSB、libusbK、libusb0を当てないでください。
まだBluetoothが不安定な場合の次候補
USB側は復旧しましたが、Bluetoothの不安定さが残る場合は以下を順に確認してください。
- DS4Windowsのログでバッテリーが
0%と表示されています。まずUSBで十分に充電してください。 - WindowsのBluetooth設定から古い
Wireless Controllerを削除して、改めてペアリングし直してください。 - DS4背面のリセット穴を10秒以上押してください。
PS + SHAREを長押ししてペアリングモードに入れてください。- SwitchやMissionControlが近くで再接続しないよう、Switch側をスリープ解除しない状態でPCへペアリングしてください。
- Bluetoothアダプタが複数見えている場合は、古い/UnknownのBluetooth RadioやWireless Controllerのゴーストを整理してください。
再発時の採取コマンド
次に同じ症状が出た場合、まず以下の情報を取得してください。
Get-Content -Path E:\Games\DS4Windows\Logs\ds4windows_log.txt -Tail 200
Get-PnpDevice | Where-Object {
$_.InstanceId -match '054C|09CC|06C1|A4538539708A|00001124' -or
$_.FriendlyName -match 'Wireless Controller|DualShock|DUALSHOCK|RC-S380|Bluetooth'
} | Select-Object Status,Class,FriendlyName,InstanceId | Format-List
Get-CimInstance Win32_PnPSignedDriver | Where-Object {
$_.DeviceID -match 'VID_054C&PID_09CC|VID_054C&PID_06C1|A4538539708A|00001124' -or
$_.DriverProviderName -match 'libusbK|libwdi|Microsoft'
} | Select-Object DeviceName,DeviceID,DriverProviderName,DriverVersion,InfName,Manufacturer | Format-List
Get-CimInstance Win32_PnPSignedDriver | Where-Object {
$_.InfName -eq 'oem54.inf' -or $_.DriverProviderName -match 'libusbK'
} | Select-Object DeviceName,DeviceID,DriverProviderName,DriverVersion,InfName | Format-List
ロールバック
今回外したoem54.infを戻す必要がある場合は、退避先のandroid_device.infから復元できます。ただし、DS4WindowsでDS4を使う目的であれば戻す必要はありません。
pnputil /add-driver E:\Games\DS4Windows\driver_backups\oem54_libusbk_20260525_235310\android_device.inf /install
ロールバックは「DS4をlibusbKで直接操作する実験を再開したい」場合だけです。DS4Windowsでの通常利用であれば、Microsoft HIDのまま使ってください。
作業タイムライン
23:32 DS4Windows起動ログ確認。HidHide/ViGEmBusは動作中。
23:37-23:40 BT DS4が一瞬検出されるがread failureで切断を繰り返す。
23:50 PnP確認。DS4 USB Interface 3にlibusbK/oem54.infが当たっているのを発見。
23:53 oem54.infをdriver_backupsへエクスポートし、アンインストール/削除。
23:54 DS4 USB入力がMicrosoft input.infへ復帰。
23:54 DS4Windowsを管理者コンテキストで起動、USB DS4 v.2として認識。
23:55 仮想XBOX 360 Controllerの作成を確認。
23:56 PaSoRi RC-S380/Sがoem149.inf/libwdiのままOKであることを確認。
まとめ。MissionControlの過去利用は「DS4のBluetooth相手先記憶」という意味では疑う価値があります。しかし、今回Windows側で実際に見つかった強い異常は、DS4のUSB入力インターフェイスにlibusbK / oem54.infが当たっていたことでした。これをバックアップのうえ外したところ、USB接続のDS4Windows認識は復旧しました。PaSoRiはPID_06C1、DS4はPID_09CCであり、別デバイス扱いです。今後はoem149.inf / libwdiを触らず、DS4側だけを見てください。