トラブルシューティング / 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コントローラも作成されました。

DualShock 4とPaSoRiのドライバ切り分け図
同じSonyのVID_054Cでも、DS4はPID_09CC、PaSoRiはPID_06C1です。今回外したのはDS4側に誤って適用されていたlibusbKドライバだけであり、PaSoRiのドライバには一切触れていません。

環境

作業日2026-05-25 深夜〜2026-05-26 JST
作業場所E:\Games\DS4Windows
OSMicrosoft Windows NT 10.0.19045.0 / Windows 10 Enterprise
DS4Windows3.3.3 x64
ViGEmBus1.21.442.0
HidHide1.2.98.0
DS4 MACA4:53:85:39:70:8A
PaSoRiRC-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系のサービスはすべて動作中でした。「サービス停止が原因」という線は除外できます。

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標準のドライバに正しく戻りました。

修復後のDS4ドライバ DeviceName: HID-compliant game controller
DriverProviderName: Microsoft
InfName: input.inf
DriverVersion: 10.0.19041.3636
DS4Windows認識 管理者コンテキストで起動後、USB経由のDS4 v.2として認識されました。仮想XBOX 360 Controller For WindowsもPnP上でOKです。

PaSoRi RC-S380/Sとの排他性確認

「DS4のドライバを直したら、同じSony製のPaSoRiに影響しないか?」という懸念がありました。結論から言うと、排他ではありません

同じVendor ID(VID_054C)でもProduct IDが異なるため、Windowsのドライバ割り当ては別デバイスとして扱われます。

デバイスDualShock 4PaSoRi RC-S380/S
PIDPID_09CCPID_06C1
ドライバinput.inf(Microsoft)oem149.inf(libwdi)
今回の作業libusbKを削除してMicrosoft HIDに戻した一切触っていない
状態OKOK

触ってはいけないもの

  • oem149.infはPaSoRi用です。絶対に消さないでください。
  • VID_054Cだけを見てSony製デバイスを一括削除してはいけません。
  • RC-S380/SPID_06C1をDS4修復の巻き添えにしないでください。
  • DS4Windows目的であれば、DS4のMI_03にZadig系のWinUSBlibusbKlibusb0を当てないでください。

まだBluetoothが不安定な場合の次候補

USB側は復旧しましたが、Bluetoothの不安定さが残る場合は以下を順に確認してください。

  1. DS4Windowsのログでバッテリーが0%と表示されています。まずUSBで十分に充電してください。
  2. WindowsのBluetooth設定から古いWireless Controllerを削除して、改めてペアリングし直してください。
  3. DS4背面のリセット穴を10秒以上押してください。
  4. PS + SHAREを長押ししてペアリングモードに入れてください。
  5. SwitchやMissionControlが近くで再接続しないよう、Switch側をスリープ解除しない状態でPCへペアリングしてください。
  6. Bluetoothアダプタが複数見えている場合は、古い/UnknownのBluetooth RadioやWireless Controllerのゴーストを整理してください。

再発時の採取コマンド

次に同じ症状が出た場合、まず以下の情報を取得してください。

DS4Windowsログの末尾200行
Get-Content -Path E:\Games\DS4Windows\Logs\ds4windows_log.txt -Tail 200
DS4 / Bluetooth / PaSoRi のPnP状態
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
oem54が再発していないか
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側だけを見てください。