Уважаемые форумчане, подскажите, почему функция SetupDiOpenDevRegKey возвращает значение (к примеру) HKEY = 0x00000f54 {unused = ???}, но при проверке на ошибку все прокатывает. Соответственно, при использовании полученного значения в функции RegQueryValueEx, она мне выдает ошибку. В дополнение к сказанному привожу свой код:
// Получить класс сетевых устройств
HDEVINFO hDeviceInfoSet = SetupDiGetClassDevs(
&GUID_DEVCLASS_NET, // GUID сетевых устройств
NULL,
NULL,
DIGCF_PRESENT); // Устройства, в настоящее время присутствующие в системе
if (hDeviceInfoSet == INVALID_HANDLE_VALUE)
{
TRACE(_T("\n\tSetupDiGetClassDevs failed.\n"));
return FALSE;
}
SP_DEVINFO_DATA DeviceInfoData;
// Подготавливаем структуру для получения информации об устройстве
memset(&DeviceInfoData, 0, sizeof(SP_DEVINFO_DATA));
DeviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA);
DWORD dwDeviceIndex = 0; // Номер устройства
// Перечислить все сетевые устройства
while (SetupDiEnumDeviceInfo(
hDeviceInfoSet,
dwDeviceIndex,
&DeviceInfoData))
{
WCHAR szDeviceDescription[255];
DWORD dwDeviceDescriptionSize = (DWORD) (sizeof(szDeviceDescription) / sizeof(szDeviceDescription[0]));
BOOL bResult = SetupDiGetDeviceRegistryProperty(
hDeviceInfoSet,
&DeviceInfoData,
SPDRP_DEVICEDESC,
NULL,
(PBYTE) szDeviceDescription,
dwDeviceDescriptionSize,
&dwDeviceDescriptionSize);
if (!bResult)
{
TRACE(_T("\n\tSetupDiGetDeviceRegistryProperty failed.\n"));
break;
}
HKEY hDeviceKey = SetupDiOpenDevRegKey(
hDeviceInfoSet,
&DeviceInfoData,
DICS_FLAG_GLOBAL,
0,
DIREG_DEV,
KEY_READ);
!!!! -> После выполнения этого кода и появляется в отладчике значени 0x00000f54 {unused=???}
!!!! -> Естественно, после вызова, функция RegQueryValueEx выдает ошибку
if (hDeviceKey == INVALID_HANDLE_VALUE)
{
TRACE(_T("\n\tSetupDiOpenDevRegKey failed.\n"));
break;
}
WCHAR szBuffer[80];
DWORD dwBufferSize = (DWORD) (sizeof(szBuffer) / sizeof(szBuffer[0]));
if (RegQueryValueEx(hDeviceKey, _T("InfPath"), NULL, NULL, (LPBYTE) szBuffer, &dwBufferSize) == ERROR_SUCCESS)
{
...
}
RegCloseKey(hDeviceKey);
dwDeviceIndex++;
}
SetupDiDestroyDeviceInfoList(hDeviceInfoSet);
Что я делаю не так?
Заранее большое спасибо!!!