mirror of
https://github.com/reactos/reactos.git
synced 2025-07-29 03:32:15 +00:00
[NEWDEV] Fix HardwareId
match logic in UpdateDriverForPlugAndPlayDevicesW
(#7808)
Match Hardware ID correctly. This fix is required to install the latest (7.1.6) Virtual Box Guest Additions drivers. - Add Compatible IDs match, call SetupDiGetDeviceRegistryPropertyW twice, once for SPDRP_HARDWAREID and once for SPDRP_COMPATIBLEIDS. - Use case-insensitive comparison (wcscmp -> _wcsicmp) - Convert code file to UTF-8 encoding
This commit is contained in:
parent
ffa81857c2
commit
cfcc8d85b2
1 changed files with 49 additions and 41 deletions
|
@ -1,7 +1,7 @@
|
||||||
/*
|
/*
|
||||||
* New device installer (newdev.dll)
|
* New device installer (newdev.dll)
|
||||||
*
|
*
|
||||||
* Copyright 2005-2006 Hervé Poussineau (hpoussin@reactos.org)
|
* Copyright 2005-2006 Hervé Poussineau (hpoussin@reactos.org)
|
||||||
* 2005 Christoph von Wittich (Christoph@ActiveVB.de)
|
* 2005 Christoph von Wittich (Christoph@ActiveVB.de)
|
||||||
* 2009 Colin Finck (colin@reactos.org)
|
* 2009 Colin Finck (colin@reactos.org)
|
||||||
*
|
*
|
||||||
|
@ -50,6 +50,7 @@ UpdateDriverForPlugAndPlayDevicesW(
|
||||||
LPWSTR Buffer = NULL;
|
LPWSTR Buffer = NULL;
|
||||||
DWORD BufferSize;
|
DWORD BufferSize;
|
||||||
LPCWSTR CurrentHardwareId; /* Pointer into Buffer */
|
LPCWSTR CurrentHardwareId; /* Pointer into Buffer */
|
||||||
|
DWORD Property;
|
||||||
BOOL FoundHardwareId, FoundAtLeastOneDevice = FALSE;
|
BOOL FoundHardwareId, FoundAtLeastOneDevice = FALSE;
|
||||||
BOOL ret = FALSE;
|
BOOL ret = FALSE;
|
||||||
|
|
||||||
|
@ -86,14 +87,17 @@ UpdateDriverForPlugAndPlayDevicesW(
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Get Hardware ID */
|
/* Match Hardware ID */
|
||||||
HeapFree(GetProcessHeap(), 0, Buffer);
|
FoundHardwareId = FALSE;
|
||||||
|
Property = SPDRP_HARDWAREID;
|
||||||
|
while (TRUE)
|
||||||
|
{
|
||||||
|
/* Get IDs data */
|
||||||
Buffer = NULL;
|
Buffer = NULL;
|
||||||
BufferSize = 0;
|
BufferSize = 0;
|
||||||
while (!SetupDiGetDeviceRegistryPropertyW(
|
while (!SetupDiGetDeviceRegistryPropertyW(DevInstData.hDevInfo,
|
||||||
DevInstData.hDevInfo,
|
|
||||||
&DevInstData.devInfoData,
|
&DevInstData.devInfoData,
|
||||||
SPDRP_HARDWAREID,
|
Property,
|
||||||
NULL,
|
NULL,
|
||||||
(PBYTE)Buffer,
|
(PBYTE)Buffer,
|
||||||
BufferSize,
|
BufferSize,
|
||||||
|
@ -101,7 +105,6 @@ UpdateDriverForPlugAndPlayDevicesW(
|
||||||
{
|
{
|
||||||
if (GetLastError() == ERROR_FILE_NOT_FOUND)
|
if (GetLastError() == ERROR_FILE_NOT_FOUND)
|
||||||
{
|
{
|
||||||
Buffer = NULL;
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
else if (GetLastError() != ERROR_INSUFFICIENT_BUFFER)
|
else if (GetLastError() != ERROR_INSUFFICIENT_BUFFER)
|
||||||
|
@ -119,19 +122,24 @@ UpdateDriverForPlugAndPlayDevicesW(
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (Buffer == NULL)
|
if (Buffer)
|
||||||
continue;
|
{
|
||||||
|
|
||||||
/* Check if we match the given hardware ID */
|
/* Check if we match the given hardware ID */
|
||||||
FoundHardwareId = FALSE;
|
|
||||||
for (CurrentHardwareId = Buffer; *CurrentHardwareId != UNICODE_NULL; CurrentHardwareId += wcslen(CurrentHardwareId) + 1)
|
for (CurrentHardwareId = Buffer; *CurrentHardwareId != UNICODE_NULL; CurrentHardwareId += wcslen(CurrentHardwareId) + 1)
|
||||||
{
|
{
|
||||||
if (wcscmp(CurrentHardwareId, HardwareId) == 0)
|
if (_wcsicmp(CurrentHardwareId, HardwareId) == 0)
|
||||||
{
|
{
|
||||||
FoundHardwareId = TRUE;
|
FoundHardwareId = TRUE;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
if (FoundHardwareId || Property == SPDRP_COMPATIBLEIDS)
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
Property = SPDRP_COMPATIBLEIDS;
|
||||||
|
}
|
||||||
if (!FoundHardwareId)
|
if (!FoundHardwareId)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue