+static
+CONFIGRET
+GetAllInstanceListSize(
+ _In_ LPCWSTR pszEnumerator,
+ _Out_ PULONG pulLength)
+{
+ WCHAR szEnumeratorBuffer[MAX_DEVICE_ID_LEN];
+ DWORD dwIndex, dwEnumeratorLength, dwBufferLength;
+ DWORD dwError;
+ CONFIGRET ret = CR_SUCCESS;
+
+ for (dwIndex = 0; ; dwIndex++)
+ {
+ dwEnumeratorLength = MAX_DEVICE_ID_LEN;
+ dwError = RegEnumKeyExW(hEnumKey,
+ dwIndex,
+ szEnumeratorBuffer,
+ &dwEnumeratorLength,
+ NULL, NULL, NULL, NULL);
+ if (dwError != ERROR_SUCCESS)
+ break;
+
+ /* Get the size of all device instances for the enumerator */
+ ret = GetEnumeratorInstanceListSize(szEnumeratorBuffer,
+ &dwBufferLength);
+ if (ret != CR_SUCCESS)
+ break;
+
+ *pulLength += dwBufferLength;
+ }
+
+ return ret;
+}
+
+