SetupDiOpenDevRegKey не работает
От: Vladi_2K7  
Дата: 10.04.09 09:05
Оценка:
Уважаемые форумчане, подскажите, почему функция 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);


Что я делаю не так?

Заранее большое спасибо!!!
visual studio c++
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.