static BOOLEAN
GetDriverKeyName(
IN HKEY DeviceKey,
- OUT PTCHAR *Name
+ OUT PTCHAR *Name,
+ OUT DWORD *ConfigFlags
)
{
HRESULT Error;
DWORD Index;
HKEY SubKey;
PTCHAR DriverKeyName;
+ DWORD Flags;
Error = RegQueryInfoKey(DeviceKey,
NULL,
SubKey = NULL;
DriverKeyName = NULL;
+ Flags = 0;
for (Index = 0; Index < SubKeys; Index++) {
DWORD MaxValueLength;
+ DWORD ConfigFlagsLength;
DWORD DriverKeyNameLength;
DWORD Type;
goto fail4;
}
+ ConfigFlagsLength = (DWORD)sizeof(DWORD);
+
+ Error = RegQueryValueEx(SubKey,
+ "ConfigFlags",
+ NULL,
+ &Type,
+ (LPBYTE)&Flags,
+ &ConfigFlagsLength);
+ if (Error != ERROR_SUCCESS ||
+ Type != REG_DWORD)
+ Flags = 0;
+
DriverKeyNameLength = MaxValueLength + sizeof (TCHAR);
DriverKeyName = calloc(1, DriverKeyNameLength);
free(DriverKeyName);
DriverKeyName = NULL;
+ Flags = 0;
RegCloseKey(SubKey);
SubKey = NULL;
free(SubKeyName);
*Name = DriverKeyName;
+ *ConfigFlags = Flags;
+
return TRUE;
fail5:
PTCHAR SubKeyName;
HKEY DeviceKey;
PTCHAR DriverKeyName;
+ DWORD ConfigFlags;
HKEY DriverKey;
PTCHAR MatchingDeviceID;
DWORD Index;
if (!Success)
goto fail5;
- Success = GetDriverKeyName(DeviceKey, &DriverKeyName);
+ Success = GetDriverKeyName(DeviceKey, &DriverKeyName, &ConfigFlags);
if (!Success)
goto fail6;
if (DriverKeyName == NULL)
goto loop1;
+ if (ConfigFlags & 0x20)
+ goto loop2;
+
Success = OpenDriverKey(DriverKeyName, &DriverKey);
if (!Success)
- goto loop2;
+ goto loop3;
Success = GetMatchingDeviceID(DriverKey, &MatchingDeviceID);
if (!Success)
- goto loop3;
+ goto loop4;
Success = SupportDeviceID(MatchingDeviceID);
if (!Success)
free(MatchingDeviceID);
- loop3:
+ loop4:
RegCloseKey(DriverKey);
+ loop3:
+
loop2:
free(DriverKeyName);