MSDN.WhiteKnight - Stack Overflow answers
Ответ на "Какой функцией можно получить указатель на устройство из PDEV_BROADCAST_HDR по dbcc_name"
Answer 945884
В Windows нет понятия "указатель на устройство". Возможно, вы имели в виду "дескриптор"?
Насчет получения DEVINST, для этого необходимо сначала получить Device Instance ID с помощью функции CM_Get_Device_Interface_Property. После этого, полученный Device Instance ID нужно передать в CM_Locate_DevNode, которая вернет значение DEVINST.
#include <windows.h> #define INITGUID #include "Devpkey.h" #include "dbt.h" #include "cfgmgr32.h" #pragma comment( lib, "Cfgmgr32.lib" ) //<...> if (lpdb->dbch_devicetype == DBT_DEVTYP_DEVICEINTERFACE) { PDEV_BROADCAST_DEVICEINTERFACE lpdbd = (PDEV_BROADCAST_DEVICEINTERFACE)lpdb; DEVPROPTYPE type = 0; WCHAR buffer[1024]={0}; ULONG size = sizeof(buffer); DEVINST devinst; CONFIGRET result; //получение Device Instance ID result = CM_Get_Device_Interface_Property(lpdbd->dbcc_name, &DEVPKEY_Device_InstanceId, &type, (BYTE*)buffer, &size, 0); if(result != CR_SUCCESS){ MessageBox(hWnd,L"CM_Get_Device_Interface_Property failed",NULL,MB_OK); return 0; } //получение DEVINST result = CM_Locate_DevNode(&devinst, buffer, CM_LOCATE_DEVNODE_NORMAL); if(result != CR_SUCCESS){ MessageBox(hWnd,L"CM_Locate_DevNode failed",NULL,MB_OK); return 0; } }
Content is retrieved from StackExchange API.
Auto-generated by ruso-archive tools.