Bluetooth Filter Driver for DS3-compatibility - research notes

About to test the latest filter modifications (added sideband code), here we go again 😅

7056b9f7-0e38-41ca-a873-b4ada6ca4028-image.png

Bless you, VMware 😃

9a354b73-cd02-4bd7-a572-b2836b41e2ab-image.png

That's quite quick, RAM-cached hard disk provides quite the I/O 😆

2ac88313-e079-4eed-9595-a22d537b1c6c-image.png

And we have a Desktop, that install only took 5 minutes 😲

fac015a6-abcf-4ff2-b8f0-ef8b22573701-image.png

Oh, this if funny, I thought I've checked this already but apparently not; it's not possible to have two (or more) USB Bluetooth host dongles active at the same time 🤔

Windows 8.1

e382d185-2c19-4f0e-9fda-8e3d2787c3f8-image.png

Windows 10

0f571c51-dfd0-4dfb-b13c-fb727bba3898-image.png

Well, that's good to know but hasn't interfered with anything I've implemented today because I wanted to have the capability of storing device-specific settings through a control device anyway. So I guess this is true 😅

Phew, everything still works after my mayhem 😅 And on a completely fresh machine as well!

4b0bf8ce-7834-44e5-a7f7-d36bf04da985-image.png

Time for a game and/or slumber 💤

Alright, breakfast is done, back to work 😋 Looks like disabling the patching is working as expected:

2019/05/18-11:29:22.504	TRACE_LEVEL_VERBOSE	UrbFunctionBulkInTransferCompleted Entry
2019/05/18-11:29:22.504	TRACE_LEVEL_VERBOSE	>> Connection request for HID Control PSM 0x0011 arrived
2019/05/18-11:29:22.504	TRACE_LEVEL_VERBOSE	-- NOT Patching HID Control PSM
2019/05/18-11:29:22.504	TRACE_LEVEL_VERBOSE	>> Bulk IN transfer (PipeHandle: FFFFE000E7133D20)
2019/05/18-11:29:22.504	TRACE_LEVEL_VERBOSE	UrbFunctionBulkInTransferCompleted Exit
2019/05/18-11:29:23.355	TRACE_LEVEL_VERBOSE	UrbFunctionBulkInTransferCompleted Entry
2019/05/18-11:29:23.355	TRACE_LEVEL_VERBOSE	>> Connection request for HID Control PSM 0x0011 arrived
2019/05/18-11:29:23.355	TRACE_LEVEL_VERBOSE	-- NOT Patching HID Control PSM
2019/05/18-11:29:23.356	TRACE_LEVEL_VERBOSE	>> Bulk IN transfer (PipeHandle: FFFFE000E7133D20)
2019/05/18-11:29:23.356	TRACE_LEVEL_VERBOSE	UrbFunctionBulkInTransferCompleted Exit

Now onto making it dynamically changeable and storing it in the registry to make it survive device power cycling.

Wait a minute... 🤔 After the first few denied connection requests when the controller shuts off and I retry to connect it there are no more requests flowing through the filter 😕

5aba31bb-244b-471e-b36a-ae98aa075e12-image.png

Is this due to VMware? I don't think so... Hm, that sure is surprising me, I thought the host controller driver always has to be contacted in case of a new connection request but apparently it's cached in the actual chip somehow. Well, there goes my fabulous plan of making it dynamically configurable 😞

I'll do a bit more testing and if I can't get it to work I'll simply rip out the control device again (was a good practice anyway) and introduce two Parameters registry values to globally control the patching. Taking a few steps back and not over-complicating things. There's other stuff in the pipeline 🙂

Hm, somehow VMware is not happy at all with what I'm doing, I'll now switch over to a physical machine and see how it's going there.

Aha! Deception! It actually was VMware! 😲 On a physical Windows 10 machine it works flawlessly like expected even with a 5 meter USB repeater:

Test with Nav Controller

---------------------------         Pressed PS button         ---------------------------
2019/05/18-12:40:54.722	TRACE_LEVEL_VERBOSE	>> Connection request for HID Control PSM 0x0011 arrived
2019/05/18-12:40:54.722	TRACE_LEVEL_VERBOSE	-- NOT Patching HID Control PSM
2019/05/18-12:41:13.495	TRACE_LEVEL_VERBOSE	>> Connection request for HID Control PSM 0x0011 arrived
2019/05/18-12:41:13.495	TRACE_LEVEL_VERBOSE	-- NOT Patching HID Control PSM
2019/05/18-12:41:32.280	TRACE_LEVEL_VERBOSE	>> Connection request for HID Control PSM 0x0011 arrived
2019/05/18-12:41:32.280	TRACE_LEVEL_VERBOSE	-- NOT Patching HID Control PSM
2019/05/18-12:41:51.049	TRACE_LEVEL_VERBOSE	>> Connection request for HID Control PSM 0x0011 arrived
2019/05/18-12:41:51.049	TRACE_LEVEL_VERBOSE	-- NOT Patching HID Control PSM
---------------------------         Pressed PS button         ---------------------------
2019/05/18-12:42:55.355	TRACE_LEVEL_VERBOSE	>> Connection request for HID Control PSM 0x0011 arrived
2019/05/18-12:42:55.355	TRACE_LEVEL_VERBOSE	-- NOT Patching HID Control PSM
2019/05/18-12:43:14.135	TRACE_LEVEL_VERBOSE	>> Connection request for HID Control PSM 0x0011 arrived
2019/05/18-12:43:14.135	TRACE_LEVEL_VERBOSE	-- NOT Patching HID Control PSM
2019/05/18-12:43:32.912	TRACE_LEVEL_VERBOSE	>> Connection request for HID Control PSM 0x0011 arrived
2019/05/18-12:43:32.912	TRACE_LEVEL_VERBOSE	-- NOT Patching HID Control PSM
2019/05/18-12:43:51.675	TRACE_LEVEL_VERBOSE	>> Connection request for HID Control PSM 0x0011 arrived
2019/05/18-12:43:51.675	TRACE_LEVEL_VERBOSE	-- NOT Patching HID Control PSM

Test with DS3 Controller

---------------------------         Pressed PS button         ---------------------------
2019/05/18-12:46:10.193	TRACE_LEVEL_VERBOSE	>> Connection request for HID Control PSM 0x0011 arrived
2019/05/18-12:46:10.193	TRACE_LEVEL_VERBOSE	-- NOT Patching HID Control PSM
2019/05/18-12:46:28.964	TRACE_LEVEL_VERBOSE	>> Connection request for HID Control PSM 0x0011 arrived
2019/05/18-12:46:28.964	TRACE_LEVEL_VERBOSE	-- NOT Patching HID Control PSM
2019/05/18-12:46:47.736	TRACE_LEVEL_VERBOSE	>> Connection request for HID Control PSM 0x0011 arrived
2019/05/18-12:46:47.736	TRACE_LEVEL_VERBOSE	-- NOT Patching HID Control PSM
2019/05/18-12:47:06.502	TRACE_LEVEL_VERBOSE	>> Connection request for HID Control PSM 0x0011 arrived
2019/05/18-12:47:06.502	TRACE_LEVEL_VERBOSE	-- NOT Patching HID Control PSM
---------------------------         Pressed PS button         ---------------------------
2019/05/18-12:48:06.959	TRACE_LEVEL_VERBOSE	>> Connection request for HID Control PSM 0x0011 arrived
2019/05/18-12:48:06.959	TRACE_LEVEL_VERBOSE	-- NOT Patching HID Control PSM
2019/05/18-12:48:25.733	TRACE_LEVEL_VERBOSE	>> Connection request for HID Control PSM 0x0011 arrived
2019/05/18-12:48:25.733	TRACE_LEVEL_VERBOSE	-- NOT Patching HID Control PSM
2019/05/18-12:48:44.510	TRACE_LEVEL_VERBOSE	>> Connection request for HID Control PSM 0x0011 arrived
2019/05/18-12:48:44.510	TRACE_LEVEL_VERBOSE	-- NOT Patching HID Control PSM
2019/05/18-12:49:03.293	TRACE_LEVEL_VERBOSE	>> Connection request for HID Control PSM 0x0011 arrived
2019/05/18-12:49:03.293	TRACE_LEVEL_VERBOSE	-- NOT Patching HID Control PSM
---------------------------         Pressed PS button         ---------------------------
2019/05/18-12:50:40.865	TRACE_LEVEL_VERBOSE	>> Connection request for HID Control PSM 0x0011 arrived
2019/05/18-12:50:40.865	TRACE_LEVEL_VERBOSE	-- NOT Patching HID Control PSM
2019/05/18-12:50:59.650	TRACE_LEVEL_VERBOSE	>> Connection request for HID Control PSM 0x0011 arrived
2019/05/18-12:50:59.650	TRACE_LEVEL_VERBOSE	-- NOT Patching HID Control PSM
2019/05/18-12:51:18.423	TRACE_LEVEL_VERBOSE	>> Connection request for HID Control PSM 0x0011 arrived
2019/05/18-12:51:18.423	TRACE_LEVEL_VERBOSE	-- NOT Patching HID Control PSM
2019/05/18-12:51:37.183	TRACE_LEVEL_VERBOSE	>> Connection request for HID Control PSM 0x0011 arrived
2019/05/18-12:51:37.183	TRACE_LEVEL_VERBOSE	-- NOT Patching HID Control PSM

As you can see the controller tries for a total of 4 times to connect to the host its programmed to before giving up and shutting off. When I press the PS button again to wake it up within the same session the requests arrive again (and get blocked because patching is disabled in this example) as expected. Good stuff!

Now that I know I'm not entirely bonkers it's time to define some IOCTLs for the control channel. And some coffee ☕

Good progress so far 😎 Time for a break and go for a little cycling tour 🚴 while the weather is this nice ☀

Oooopsie... 😅

8913dabf-c17f-49a5-916b-94cbdb1616cb-image.png

Mistake identified, copypasted a variable which in this case isn't initialized, argh!

Ha, there we go!

3491ab69-e9aa-41f9-ad84-a8ab7a2f1d83-image.png

Let's go for a test:

2019/05/18-19:09:31.570	TRACE_LEVEL_INFORMATION	BthPS3PSM_SidebandIoDeviceControl Entry
2019/05/18-19:09:31.570	TRACE_LEVEL_VERBOSE	PSM patch disabled for device 0
2019/05/18-19:09:31.570	TRACE_LEVEL_INFORMATION	BthPS3PSM_SidebandIoDeviceControl Exit
2019/05/18-19:09:36.919	TRACE_LEVEL_VERBOSE	>> Connection request for HID Control PSM 0x0011 arrived
2019/05/18-19:09:36.919	TRACE_LEVEL_VERBOSE	-- NOT Patching HID Control PSM
2019/05/18-19:09:55.703	TRACE_LEVEL_VERBOSE	>> Connection request for HID Control PSM 0x0011 arrived
2019/05/18-19:09:55.703	TRACE_LEVEL_VERBOSE	-- NOT Patching HID Control PSM
2019/05/18-19:09:57.801	TRACE_LEVEL_INFORMATION	BthPS3PSM_SidebandIoDeviceControl Entry
2019/05/18-19:09:57.801	TRACE_LEVEL_VERBOSE	PSM patch enabled for device 0
2019/05/18-19:09:57.801	TRACE_LEVEL_INFORMATION	BthPS3PSM_SidebandIoDeviceControl Exit
2019/05/18-19:10:14.487	TRACE_LEVEL_VERBOSE	>> Connection request for HID Control PSM 0x0011 arrived
2019/05/18-19:10:14.487	TRACE_LEVEL_INFORMATION	++ Patching HID Control PSM to 0x5053
2019/05/18-19:10:14.877	TRACE_LEVEL_VERBOSE	>> Connection request for HID Interrupt PSM 0x0013 arrived
2019/05/18-19:10:14.877	TRACE_LEVEL_INFORMATION	++ Patching HID Interrupt PSM to 0x5055

Splendid! 😎

Storing and loading settings implemented, that will be all for today 😄

c8b97fa5-f265-42e4-9ab3-9a4f1a18a272-image.png

One more command 😄

a766efac-567c-4098-83e1-a112d53bc586-image.png

Now off to important things 💤

BthPS3 + Shibari Demo with Nav and DS3 Controller [19.05.2019]

It's time for another video 😃 I wanted to see if everything still works after the latest rework and so far everything's looking fine, also performance is stellar, even through Shibari which has to go from kernel to user to kernel context many times per second I notice no input lag whatsoever.

Youtube Video

Next I'll implement the buffer overrun protection.

@nefarius It looks great! I'm looking forward to testing this myself, keep up the good work!

@enricorov I still need a strategy on how to involve testers without unfinished binaries spreading...

@nefarius I suppose that's something hand in hand with invoving other people. You could have the software work only until a certain date, say a month from the beginning of beta, which would prevent people from using the beta binaries indefinitely.

@enricorov hm, a time bomb you mean? 🤔 Well, I'll figure something out, another issue that's more important to me and would need assistance with would be how to properly organize such a circle of testers, having feedback arriving in a nice ordered fashion etc.

Auto-disconnect on I/O idle implemented

Alright, this challenge was easier to resolve than I initially thought (and without a single crash I might add!) thanks to the frameworks idle power-down capabilities:

--------------------------- Nav connecting ---------------------------
2019/05/19-17:48:09.682	TRACE_LEVEL_VERBOSE	BthPS3_IndicationCallback Entry
2019/05/19-17:48:09.682	TRACE_LEVEL_INFORMATION	New connection for PSM 0x5053 from 00070401E341 arrived
2019/05/19-17:48:09.682	TRACE_LEVEL_VERBOSE	L2CAP_PS3_HandleRemoteConnect Entry
2019/05/19-17:48:09.682	TRACE_LEVEL_VERBOSE	ClientConnections_RetrieveByBthAddr Entry
2019/05/19-17:48:09.682	TRACE_LEVEL_VERBOSE	ClientConnections_RetrieveByBthAddr Exit (STATUS_NOT_FOUND (0xC0000225))
2019/05/19-17:48:09.682	TRACE_LEVEL_ERROR	BTHPS3_GET_DEVICE_NAME failed with status STATUS_INVALID_PARAMETER (0xC000000D), dropping connection
2019/05/19-17:48:09.682	TRACE_LEVEL_VERBOSE	L2CAP_PS3_DenyRemoteConnect Entry
2019/05/19-17:48:09.682	TRACE_LEVEL_VERBOSE	L2CAP_PS3_DenyRemoteConnectCompleted Entry (STATUS_SUCCESS (0x00000000))
2019/05/19-17:48:09.682	TRACE_LEVEL_VERBOSE	L2CAP_PS3_DenyRemoteConnectCompleted Exit
2019/05/19-17:48:09.682	TRACE_LEVEL_VERBOSE	L2CAP_PS3_DenyRemoteConnect Exit
2019/05/19-17:48:09.682	TRACE_LEVEL_VERBOSE	BthPS3_IndicationCallback Exit
2019/05/19-17:48:10.488	TRACE_LEVEL_VERBOSE	BthPS3_IndicationCallback Entry
2019/05/19-17:48:10.488	TRACE_LEVEL_INFORMATION	New connection for PSM 0x5053 from 00070401E341 arrived
2019/05/19-17:48:10.488	TRACE_LEVEL_VERBOSE	IRQL DPC (0x02) too high, preparing async call
2019/05/19-17:48:10.488	TRACE_LEVEL_VERBOSE	BthPS3_IndicationCallback Exit
2019/05/19-17:48:10.488	TRACE_LEVEL_VERBOSE	L2CAP_PS3_HandleRemoteConnectAsync Entry
2019/05/19-17:48:10.488	TRACE_LEVEL_VERBOSE	L2CAP_PS3_HandleRemoteConnect Entry
2019/05/19-17:48:10.488	TRACE_LEVEL_VERBOSE	ClientConnections_RetrieveByBthAddr Entry
2019/05/19-17:48:10.488	TRACE_LEVEL_VERBOSE	ClientConnections_RetrieveByBthAddr Exit (STATUS_NOT_FOUND (0xC0000225))
2019/05/19-17:48:10.488	TRACE_LEVEL_INFORMATION	++ Device 00070401E341 name: Navigation Controller
2019/05/19-17:48:10.488	TRACE_LEVEL_VERBOSE	L2CAP_PS3_ConnectionIndicationCallback Entry (Indication: 0x0, Context: 0xFFFF858FE830A0D0)
2019/05/19-17:48:10.488	TRACE_LEVEL_VERBOSE	L2CAP_PS3_ConnectionIndicationCallback Exit
2019/05/19-17:48:10.488	TRACE_LEVEL_VERBOSE	L2CAP_PS3_HandleRemoteConnect Exit (STATUS_SUCCESS (0x00000000))
2019/05/19-17:48:10.488	TRACE_LEVEL_VERBOSE	L2CAP_PS3_HandleRemoteConnectAsync Exit
2019/05/19-17:48:10.703	TRACE_LEVEL_VERBOSE	L2CAP_PS3_ControlConnectResponseCompleted Entry
2019/05/19-17:48:10.703	TRACE_LEVEL_INFORMATION	Connection completion, status: STATUS_SUCCESS (0x00000000)
2019/05/19-17:48:10.703	TRACE_LEVEL_INFORMATION	HID Control Channel connection established
2019/05/19-17:48:10.703	TRACE_LEVEL_VERBOSE	L2CAP_PS3_ControlConnectResponseCompleted Exit
2019/05/19-17:48:10.897	TRACE_LEVEL_VERBOSE	BthPS3_IndicationCallback Entry
2019/05/19-17:48:10.897	TRACE_LEVEL_INFORMATION	New connection for PSM 0x5055 from 00070401E341 arrived
2019/05/19-17:48:10.897	TRACE_LEVEL_VERBOSE	IRQL DPC (0x02) too high, preparing async call
2019/05/19-17:48:10.897	TRACE_LEVEL_VERBOSE	BthPS3_IndicationCallback Exit
2019/05/19-17:48:10.897	TRACE_LEVEL_VERBOSE	L2CAP_PS3_HandleRemoteConnectAsync Entry
2019/05/19-17:48:10.897	TRACE_LEVEL_VERBOSE	L2CAP_PS3_HandleRemoteConnect Entry
2019/05/19-17:48:10.897	TRACE_LEVEL_VERBOSE	ClientConnections_RetrieveByBthAddr Entry
2019/05/19-17:48:10.897	TRACE_LEVEL_VERBOSE	++ Found desired connection item in connection list
2019/05/19-17:48:10.897	TRACE_LEVEL_VERBOSE	ClientConnections_RetrieveByBthAddr Exit (STATUS_SUCCESS (0x00000000))
2019/05/19-17:48:10.897	TRACE_LEVEL_VERBOSE	L2CAP_PS3_ConnectionIndicationCallback Entry (Indication: 0x0, Context: 0xFFFF858FE830A0D0)
2019/05/19-17:48:10.897	TRACE_LEVEL_VERBOSE	L2CAP_PS3_ConnectionIndicationCallback Exit
2019/05/19-17:48:10.897	TRACE_LEVEL_VERBOSE	L2CAP_PS3_HandleRemoteConnect Exit (STATUS_SUCCESS (0x00000000))
2019/05/19-17:48:10.897	TRACE_LEVEL_VERBOSE	L2CAP_PS3_HandleRemoteConnectAsync Exit
2019/05/19-17:48:10.969	TRACE_LEVEL_VERBOSE	L2CAP_PS3_ConnectionIndicationCallback Entry (Indication: 0x4, Context: 0xFFFF858FE830A0D0)
2019/05/19-17:48:10.969	TRACE_LEVEL_INFORMATION	L2CAP_PS3_ConnectionIndicationCallback ++ IndicationRemoteConfigRequest
2019/05/19-17:48:10.969	TRACE_LEVEL_VERBOSE	L2CAP_PS3_ConnectionIndicationCallback Exit
2019/05/19-17:48:11.092	TRACE_LEVEL_VERBOSE	L2CAP_PS3_InterruptConnectResponseCompleted Entry
2019/05/19-17:48:11.092	TRACE_LEVEL_INFORMATION	Connection completion, status: STATUS_SUCCESS (0x00000000)
2019/05/19-17:48:11.092	TRACE_LEVEL_INFORMATION	HID Interrupt Channel connection established
2019/05/19-17:48:11.092	TRACE_LEVEL_VERBOSE	L2CAP_PS3_ConnectionStateConnected Entry
2019/05/19-17:48:11.092	TRACE_LEVEL_VERBOSE	L2CAP_PS3_ConnectionStateConnected Exit
2019/05/19-17:48:11.092	TRACE_LEVEL_VERBOSE	L2CAP_PS3_InterruptConnectResponseCompleted Exit
2019/05/19-17:48:11.092	TRACE_LEVEL_VERBOSE	BthPS3_EvtWdfChildListCreateDevice Entry
2019/05/19-17:48:11.093	TRACE_LEVEL_VERBOSE	BthPS3_EvtWdfChildListCreateDevice Exit
--------------------------- Device connected, but no I/O, 10 seconds idle timeout ---------------------------
2019/05/19-17:48:21.094	TRACE_LEVEL_VERBOSE	BthPS3_PDO_EvtWdfDeviceD0Exit Entry
2019/05/19-17:48:21.094	TRACE_LEVEL_INFORMATION	Requesting device disconnect
2019/05/19-17:48:21.094	TRACE_LEVEL_VERBOSE	BthPS3_PDO_EvtWdfDeviceD0Exit Exit
2019/05/19-17:48:21.237	TRACE_LEVEL_VERBOSE	L2CAP_PS3_ConnectionIndicationCallback Entry (Indication: 0x3, Context: 0xFFFF858FE830A0D0)
2019/05/19-17:48:21.237	TRACE_LEVEL_VERBOSE	++ IndicationRemoteDisconnect [0xFFFF858FEFFB1B20]
2019/05/19-17:48:21.237	TRACE_LEVEL_VERBOSE	++ HID Control Channel 0xFFFF858FEFFB1B20 disconnected
2019/05/19-17:48:21.237	TRACE_LEVEL_VERBOSE	L2CAP_PS3_ChannelDisconnectCompleted Entry (STATUS_SUCCESS (0x00000000))
2019/05/19-17:48:21.237	TRACE_LEVEL_VERBOSE	L2CAP_PS3_ChannelDisconnectCompleted Exit
2019/05/19-17:48:21.237	TRACE_LEVEL_VERBOSE	L2CAP_PS3_ConnectionIndicationCallback Exit
2019/05/19-17:48:21.237	TRACE_LEVEL_VERBOSE	L2CAP_PS3_ConnectionIndicationCallback Entry (Indication: 0x1, Context: 0xFFFF858FE830A0D0)
2019/05/19-17:48:21.237	TRACE_LEVEL_VERBOSE	L2CAP_PS3_ConnectionIndicationCallback Exit
2019/05/19-17:48:21.237	TRACE_LEVEL_VERBOSE	L2CAP_PS3_ConnectionIndicationCallback Entry (Indication: 0x3, Context: 0xFFFF858FE830A0D0)
2019/05/19-17:48:21.237	TRACE_LEVEL_VERBOSE	++ IndicationRemoteDisconnect [0xFFFF858FEEE2CB20]
2019/05/19-17:48:21.237	TRACE_LEVEL_VERBOSE	++ HID Interrupt Channel 0xFFFF858FEEE2CB20 disconnected
2019/05/19-17:48:21.237	TRACE_LEVEL_VERBOSE	L2CAP_PS3_ChannelDisconnectCompleted Entry (STATUS_SUCCESS (0x00000000))
2019/05/19-17:48:21.237	TRACE_LEVEL_VERBOSE	L2CAP_PS3_ChannelDisconnectCompleted Exit
2019/05/19-17:48:21.237	TRACE_LEVEL_VERBOSE	++ Both channels are gone, awaiting clean-up
2019/05/19-17:48:21.237	TRACE_LEVEL_VERBOSE	ClientConnections_RemoveAndDestroy Entry (ClientConnection: 0xFFFF858FE830A0D0)
2019/05/19-17:48:21.237	TRACE_LEVEL_VERBOSE	++ Found desired connection item in connection list
2019/05/19-17:48:21.237	TRACE_LEVEL_VERBOSE	ClientConnections_RemoveAndDestroy Exit
2019/05/19-17:48:21.237	TRACE_LEVEL_VERBOSE	L2CAP_PS3_ConnectionIndicationCallback Exit
2019/05/19-17:48:21.237	TRACE_LEVEL_VERBOSE	L2CAP_PS3_ConnectionIndicationCallback Entry (Indication: 0x1, Context: 0xFFFF858FE830A0D0)
2019/05/19-17:48:21.237	TRACE_LEVEL_VERBOSE	L2CAP_PS3_ConnectionIndicationCallback Exit
2019/05/19-17:48:21.237	TRACE_LEVEL_INFORMATION	EvtClientConnectionsDestroyConnection Entry (DISPOSING CONNECTION MEMORY)
2019/05/19-17:48:21.237	TRACE_LEVEL_VERBOSE	EvtClientConnectionsDestroyConnection Exit
2019/05/19-17:48:21.238	TRACE_LEVEL_VERBOSE	BthPS3_PDO_EvtDeviceContextCleanup Entry
2019/05/19-17:48:21.238	TRACE_LEVEL_VERBOSE	BthPS3_PDO_EvtDeviceContextCleanup Exit
--------------------------- Device connection dropped by profile driver ---------------------------

Now when something happens to the I/O dispatching (like a process crash or a bug in the function driver), the idle timeout will kick in preventing the buffers from filling up uncontrolled and dropping the connection:

--------------------------- Shibari active, dispatching I/O ---------------------------
2019/05/19-17:54:15.514	TRACE_LEVEL_VERBOSE	BthPS3_PDO_EvtWdfIoQueueIoDeviceControl Entry
2019/05/19-17:54:15.514	TRACE_LEVEL_VERBOSE	>> IOCTL_BTHPS3_HID_INTERRUPT_READ
2019/05/19-17:54:15.514	TRACE_LEVEL_VERBOSE	bufferLength: 50
2019/05/19-17:54:15.514	TRACE_LEVEL_VERBOSE	BthPS3_PDO_EvtWdfIoQueueIoDeviceControl Exit (status: STATUS_PENDING (0x00000103))
2019/05/19-17:54:15.544	TRACE_LEVEL_VERBOSE	Interrupt read transfer request completed with status STATUS_SUCCESS (0x00000000) (remaining: 0)
2019/05/19-17:54:15.544	TRACE_LEVEL_VERBOSE	BthPS3_PDO_EvtWdfIoQueueIoDeviceControl Entry
2019/05/19-17:54:15.544	TRACE_LEVEL_VERBOSE	>> IOCTL_BTHPS3_HID_INTERRUPT_READ
2019/05/19-17:54:15.544	TRACE_LEVEL_VERBOSE	bufferLength: 50
2019/05/19-17:54:15.544	TRACE_LEVEL_VERBOSE	BthPS3_PDO_EvtWdfIoQueueIoDeviceControl Exit (status: STATUS_PENDING (0x00000103))
2019/05/19-17:54:15.546	TRACE_LEVEL_VERBOSE	Interrupt read transfer request completed with status STATUS_SUCCESS (0x00000000) (remaining: 0)
2019/05/19-17:54:15.547	TRACE_LEVEL_VERBOSE	BthPS3_PDO_EvtWdfIoQueueIoDeviceControl Entry
2019/05/19-17:54:15.547	TRACE_LEVEL_VERBOSE	>> IOCTL_BTHPS3_HID_INTERRUPT_READ
2019/05/19-17:54:15.547	TRACE_LEVEL_VERBOSE	bufferLength: 50
2019/05/19-17:54:15.547	TRACE_LEVEL_VERBOSE	BthPS3_PDO_EvtWdfIoQueueIoDeviceControl Exit (status: STATUS_PENDING (0x00000103))
--------------------------- Shibari killed by Task Manager so device is orphaned now ---------------------------
2019/05/19-17:54:15.558	TRACE_LEVEL_VERBOSE	Control read transfer request completed with status STATUS_CANCELLED (0xC0000120)
2019/05/19-17:54:15.558	TRACE_LEVEL_VERBOSE	Control read transfer request completed with status STATUS_CANCELLED (0xC0000120)
2019/05/19-17:54:15.558	TRACE_LEVEL_VERBOSE	Interrupt read transfer request completed with status STATUS_CANCELLED (0xC0000120) (remaining: 0)
2019/05/19-17:54:15.558	TRACE_LEVEL_VERBOSE	Interrupt read transfer request completed with status STATUS_CANCELLED (0xC0000120) (remaining: 0)
--------------------------- Idle timeout kicked in, dropping device ---------------------------
2019/05/19-17:54:25.558	TRACE_LEVEL_VERBOSE	BthPS3_PDO_EvtWdfDeviceD0Exit Entry
2019/05/19-17:54:25.558	TRACE_LEVEL_INFORMATION	Requesting device disconnect
2019/05/19-17:54:25.559	TRACE_LEVEL_VERBOSE	BthPS3_PDO_EvtWdfDeviceD0Exit Exit
2019/05/19-17:54:25.648	TRACE_LEVEL_VERBOSE	L2CAP_PS3_ConnectionIndicationCallback Entry (Indication: 0x3, Context: 0xFFFF858FE8E610D0)
2019/05/19-17:54:25.648	TRACE_LEVEL_VERBOSE	++ IndicationRemoteDisconnect [0xFFFF858FEEA47B20]
2019/05/19-17:54:25.648	TRACE_LEVEL_VERBOSE	++ HID Control Channel 0xFFFF858FEEA47B20 disconnected
2019/05/19-17:54:25.648	TRACE_LEVEL_VERBOSE	L2CAP_PS3_ChannelDisconnectCompleted Entry (STATUS_SUCCESS (0x00000000))
2019/05/19-17:54:25.648	TRACE_LEVEL_VERBOSE	L2CAP_PS3_ChannelDisconnectCompleted Exit
2019/05/19-17:54:25.648	TRACE_LEVEL_VERBOSE	L2CAP_PS3_ConnectionIndicationCallback Exit
2019/05/19-17:54:25.648	TRACE_LEVEL_VERBOSE	L2CAP_PS3_ConnectionIndicationCallback Entry (Indication: 0x1, Context: 0xFFFF858FE8E610D0)
2019/05/19-17:54:25.648	TRACE_LEVEL_VERBOSE	L2CAP_PS3_ConnectionIndicationCallback Exit
2019/05/19-17:54:25.648	TRACE_LEVEL_VERBOSE	L2CAP_PS3_ConnectionIndicationCallback Entry (Indication: 0x3, Context: 0xFFFF858FE8E610D0)
2019/05/19-17:54:25.648	TRACE_LEVEL_VERBOSE	++ IndicationRemoteDisconnect [0xFFFF858FF3EDCB20]
2019/05/19-17:54:25.648	TRACE_LEVEL_VERBOSE	++ HID Interrupt Channel 0xFFFF858FF3EDCB20 disconnected
2019/05/19-17:54:25.648	TRACE_LEVEL_VERBOSE	L2CAP_PS3_ChannelDisconnectCompleted Entry (STATUS_SUCCESS (0x00000000))
2019/05/19-17:54:25.648	TRACE_LEVEL_VERBOSE	L2CAP_PS3_ChannelDisconnectCompleted Exit
2019/05/19-17:54:25.648	TRACE_LEVEL_VERBOSE	++ Both channels are gone, awaiting clean-up
2019/05/19-17:54:25.648	TRACE_LEVEL_VERBOSE	ClientConnections_RemoveAndDestroy Entry (ClientConnection: 0xFFFF858FE8E610D0)
2019/05/19-17:54:25.648	TRACE_LEVEL_VERBOSE	++ Found desired connection item in connection list
2019/05/19-17:54:25.648	TRACE_LEVEL_VERBOSE	ClientConnections_RemoveAndDestroy Exit
2019/05/19-17:54:25.648	TRACE_LEVEL_VERBOSE	L2CAP_PS3_ConnectionIndicationCallback Exit
2019/05/19-17:54:25.648	TRACE_LEVEL_INFORMATION	EvtClientConnectionsDestroyConnection Entry (DISPOSING CONNECTION MEMORY)
2019/05/19-17:54:25.648	TRACE_LEVEL_VERBOSE	EvtClientConnectionsDestroyConnection Exit
2019/05/19-17:54:25.648	TRACE_LEVEL_VERBOSE	BthPS3_PDO_EvtDeviceContextCleanup Entry
2019/05/19-17:54:25.648	TRACE_LEVEL_VERBOSE	BthPS3_PDO_EvtDeviceContextCleanup Exit
2019/05/19-17:54:25.649	TRACE_LEVEL_VERBOSE	L2CAP_PS3_ConnectionIndicationCallback Entry (Indication: 0x1, Context: 0xFFFF858FE8E610D0)
2019/05/19-17:54:25.649	TRACE_LEVEL_VERBOSE	L2CAP_PS3_ConnectionIndicationCallback Exit
--------------------------- Device connection dropped, all memory freed ---------------------------

Nice, the list is getting shorter 😄

@nefarius I am really glad to see progress and maybe soon a future where I will not have to use SCPToolkit in Windows 10 with my PS3 controller. I still prefer PS3 controller over the PS4 controller.

I have VMWare setup also with Windows 7 and 10 as well and if you need a beta tester I am more then willing. I use to do some software development for Database applications like Invoicing, Inventory, and Time software in Borland Delphi so I do know a bit about what to look for in bugs and how to report them.