阅读:1836回复:4
api获取guid?
大家好!
我又一个问题想请教大家:应用程序和驱动程序之间可以通过获取guid的方式进行通信,在应用程序中可以通过如下三个函数获取设备的路径:setupdigetclassdev(); setupdienumdeviceinterfacedetail(); setupdigetdeviceinterfacedetail(); 但我不太明白这三个函数是如何查找到设备路径的? |
|
|
沙发#
发布于:2003-11-06 12:01
给你个例子看看
|
|
|
板凳#
发布于:2003-11-06 13:54
非常感谢楼上的兄弟提供的资料,恕兄愚昧,我现在就是不明白这个函数到底是怎样查找设备的?SetupDiEnumDeviceInterfaces()?
谢谢大家! |
|
|
地板#
发布于:2003-11-06 15:45
这个函数找到pnp设备的路径给creatfile用
|
|
地下室#
发布于:2003-11-11 11:46
一个函数是不能识别路径的,前前后后一大队函数来互相配合才完成识别设备工作。我简单点从头来说:
GUID HidGuid; //HID类别的识别符。 HANDLE hDevInfo; //含有HID信息的结构数组。 HIDD_ATTRIBUTES Attributes; PSP_DEVICE_INTERFACE_DETAIL_DATA detailData; SP_DEVICE_INTERFACE_DATA devInfoData; int MemberIndex = 0; LONG Result; ULONG Length; //各种数据结构大小的标记量。 HidD_GetHidGuid( &HidGuid ); //取得HID类别的GUID。 //取得HID信息的结构数组。 hDevInfo=SetupDiGetClassDevs \\ (&HidGuid, \\ NULL, \\ NULL, \\ DIGCF_PRESENT|DIGCF_INTERFACEDEVICE); devInfoData.cbSize = sizeof(devInfoData); MemberIndex = 0; //HID信息的结构数组的索引 //识别HID接口;执行函数SetupDiGetClassDevs(...) Result=SetupDiEnumDeviceInterfaces \\ (hDevInfo, \\ 0, \\ &HidGuid, \\ MemberIndex, \\ &devInfoData); //取得设备的路径信息。第一次执行传回DeviceInterfaceDataSize Result = SetupDiGetDeviceInterfaceDetail \\ (hDevInfo, \\ &devInfoData, \\ NULL, \\ 0, \\ &Length, \\ NULL); detailData = (PSP_DEVICE_INTERFACE_DETAIL_DATA)malloc(Length); detailData -> cbSize = sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA); //取得设备的路径信息。第二次执行传回detailData->DevicePath Result = SetupDiGetDeviceInterfaceDetail \\ (hDevInfo, \\ &devInfoData, \\ detailData, \\ Length, \\ &Required, \\ NULL); //开启一个HID设备,取得设备的代号 DeviceHandle=CreateFile \\ (detailData->DevicePath, \\ GENERIC_READ|GENERIC_WRITE, \\ FILE_SHARE_READ|FILE_SHARE_WRITE, \\ NULL, \\ OPEN_EXISTING, \\ 0, \\ NULL); 以后就可以检测VID和PID进一步识别指定的设备。 |
|