Получить устройство с использованием GUID всегда не удается

Я пытаюсь получить информацию (информацию о местоположении, путь к местоположению и т. Д.) Об устройстве, которое в настоящее время подключено к компьютеру в C ++ Win32. Я знаю, как получить эту информацию с помощью функции SetupDiGetDeviceRegistryProperty ()

Прежде чем использовать функцию SetupDiGetDeviceRegistryProperty()Я должен сначала позвонить SetupDiGetSelectedDevice () потому что мне нужно пройти SP_DEVINFO_DATA как параметр внутри SetupDiGetDeviceRegistryProperty(), Это правильно?

Моя проблема: Я никогда не могу получить устройство с помощью функции SetupDiGetSelectedDevice(), Когда я вызываю эту функцию, она всегда терпит неудачу, то есть возвращает FALSE. GetLastError() возвращает код e0000211, который я не уверен, что это значит.

Что не так с моим следующим кодом? Если я использую неправильную функцию для получить устройство, то какую функцию я использую, чтобы получить устройство?

INT_PTR WINAPI WinProcCallback( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam )
{
switch (message)
{
case WM_DEVICECHANGE:
{
TCHAR strBuff[256];

PDEV_BROADCAST_HDR h = (PDEV_BROADCAST_HDR) lParam;
if (h->dbch_devicetype != DBT_DEVTYP_DEVICEINTERFACE) {
printf("h->dbch_devicetype != DBT_DEVTYP_DEVICEINTERFACE\n");
break;
}

switch (wParam)
{
case DBT_DEVICEARRIVAL:
{
DWORD dataT = 0;
SP_DEVINFO_DATA deviceInfoData = {0};
deviceInfoData.cbSize          = sizeof(SP_DEVINFO_DATA);
deviceInfoData.ClassGuid       = h->dbcc_classguid;

// The following function always works and is successful
HDEVINFO hDevInfo = SetupDiGetClassDevs(&h->dbcc_classguid, NULL, NULL, DIGCF_PRESENT | DIGCF_DEVICEINTERFACE);
if (hDevInfo == INVALID_HANDLE_VALUE) {
printf("hDevInfo == INVALID_HANDLE_VALUE\n");
break;
}

// ERROR OCCURS HERE: The following function ALWAYS returns false: whats going wrong?
if (SetupDiGetSelectedDevice(hDevInfo, &deviceInfoData) == FALSE) {
printf("SetupDiGetSelectedDevice(hDevInfo, &deviceInfoData) == FALSE\n");
break;
}

// Get device location information
DWORD buffersize = 0;
LPTSTR buffer    = NULL;
while (!SetupDiGetDeviceRegistryProperty(hDevInfo,  &deviceInfoData, SPDRP_LOCATION_INFORMATION, &dataT,
(PBYTE)buffer, buffersize, &buffersize))
{
if (GetLastError() == ERROR_INSUFFICIENT_BUFFER) {
// Change the buffer size.
if (buffer)
LocalFree(buffer);
buffer = (LPTSTR)LocalAlloc(LPTR, buffersize);
}
}

printf("Data: %d: %s\n", i, buffer);
}
break;

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]