`+ struct bluetooth_auth_listener *hreg;`
Bikeshedding, but "hreg" seems an odd variable name; why not "listener"?
A lot of documentation/Win32 code seems to use the `h` prefix for opaque handles like these, so I inadvertently ended up doing the same. `listener` is more descriptive, you're right. Renamed.
Well, as I've mentioned earlier, that's not the handle; that really is the object ;-)
Why the threadpool? Why can't we call the callback right now?
To avoid a deadlock if the callback calls `BluetoothUnregisterAuthentication` (which succeeds in Windows).
Hmm, okay, that's reasonable.
Since this is a simple one-shot function I think TrySubmitThreadpoolCallback() would work and be simpler (if only by one or two lines)?