On Wed Jul 13 03:00:55 2022 +0000, **** wrote:
Zebediah Figura replied on the mailing list:
On 7/12/22 16:12, Claire (@ClearlyClaire) wrote: > On Tue Jul 12 18:48:28 2022 +0000, **** wrote: >> Zebediah Figura replied on the mailing list: >> \`\`\` >> On 7/12/22 13:01, Claire Girka wrote: >>> From: Claire Girka <claire@sitedethib.com> >>> >>> --- >>> dlls/ntoskrnl.exe/pnp.c | 8 ++++++++ >>> 1 file changed, 8 insertions(+) >>> >>> diff --git a/dlls/ntoskrnl.exe/pnp.c b/dlls/ntoskrnl.exe/pnp.c >>> index e12e46f94f1..77d879a07a9 100644 >>> --- a/dlls/ntoskrnl.exe/pnp.c >>> +++ b/dlls/ntoskrnl.exe/pnp.c >>> @@ -880,6 +880,7 @@ NTSTATUS WINAPI >> IoRegisterDeviceInterface(DEVICE_OBJECT *device, const GUID *cla >>> struct wine_rb_entry *entry; >>> DWORD required; >>> HDEVINFO set; >>> + WCHAR *id; >>> >>> TRACE("device %p, class_guid %s, refstr %s, symbolic_link %p.\n", >>> device, debugstr_guid(class_guid), debugstr_us(refstr), symbolic_link); >>> @@ -913,6 +914,13 @@ NTSTATUS WINAPI >> IoRegisterDeviceInterface(DEVICE_OBJECT *device, const GUID *cla >>> return STATUS_UNSUCCESSFUL; >>> } >>> >>> + if (!get_device_id(device, BusQueryContainerID, &id) && id) >>> + { >>> + SetupDiSetDeviceRegistryPropertyW( set, &sp_device, >> SPDRP_BASE_CONTAINERID, (BYTE *)id, >>> + (lstrlenW( id ) + 1) * sizeof(WCHAR) ); >>> + ExFreePool( id ); >>> + } >>> + >>> data->DevicePath[1] = '?'; >>> TRACE("Returning path %s.\n", debugstr_w(data->DevicePath)); >>> RtlCreateUnicodeString( &device_path, data->DevicePath); >> Why do we need this? >> _______________________________________________ >> wine-gitlab mailing list -- wine-gitlab@winehq.org >> To unsubscribe send an email to wine-gitlab-leave@winehq.org >> \`\`\` > I would need to investigate more, but the property isn't properly exposed without that change. > Please do; I don't think it should be necessary, and we'd rather fix it the right way upstream if not. _______________________________________________ wine-gitlab mailing list -- wine-gitlab@winehq.org To unsubscribe send an email to wine-gitlab-leave@winehq.org
I investigated, and my understanding is that `install_device_driver` in `dlls/ntoskrnl.exe/pnp.c` is only called the first time the HID device is registered. This means that changing `install_device_driver` alone is not sufficient to update the `ContainerID` if it changes, nor to register a `ContainerID` at all if the device was ever used before the change is implemented. I am not sure where the best place to update the `ContainerID` should be.