如何获取设备号?

loveternity 2003-11-25 10:46:52
例如u盘和网卡的,请给出相关函数
...全文
162 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
lingdanglfw 2003-11-28
  • 打赏
  • 举报
回复
看一下下面的例子,这是我在别的地方看到的,希望对你有帮助:
#include <stdio.h>
#include <windows.h>
#include <setupapi.h>
#include <devguid.h>
#include <regstr.h>

#pragma comment(lib,"Setupapi.lib")
int main( )
{
HDEVINFO hDevInfo;
SP_DEVINFO_DATA DeviceInfoData;
SP_DEVICE_INTERFACE_DATA DeviceInterfaceData;

DWORD i;
GUID aa;
GUID *ab;
ab=&aa;
i=sizeof(GUID);
DWORD DataT;
char buf[255];
memset(buf,0,256);
LPTSTR buffer = buf;
DWORD buffersize = 0;
if(!SetupDiClassGuidsFromName("USB",ab,i,&i))//通过设备类名得到设备类型的GUID 可以改变“USB”为“NET”或者其他设备名称
{
printf("false");
return 1;
}
hDevInfo = SetupDiGetClassDevs(ab, 0, 0, 0);//DIGCF_PRESENT | DIGCF_ALLCLASSES );//通过设备类型GUID得到这类设备信息的句柄
if (hDevInfo == INVALID_HANDLE_VALUE)
{
// Insert error handling here.
return 1;
}

// Enumerate through all devices in Set.
printf("GUID={%X-%X-%X-%X%X-%X%X%X%X%X%X}\n",ab->Data1,ab->Data2,ab->Data3,ab->Data4[0],ab->Data4[1],ab->Data4[2],ab->Data4[3],ab->Data4[4],ab->Data4[5],ab->Data4[6],ab->Data4[7]);
DeviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA);
for (i = 0;SetupDiEnumDeviceInfo(hDevInfo, i, &DeviceInfoData); i++)//枚举这类设备中所有的设备
{
for(int s=0;s<2;s++)//因为有些时候第一次调用SetupDiGetDeviceRegistryProperty可能会失败,所以调用两次,
{
SetupDiGetDeviceRegistryProperty(hDevInfo, &DeviceInfoData, SPDRP_DEVICEDESC,
&DataT, (PBYTE)buffer, buffersize, &buffersize);//得到设备属性
}

printf("设备: [ %s size=%d ]\n",buffer,buffersize);
memset(buf,0,256);

for (int m = 0;
SetupDiEnumDeviceInterfaces(hDevInfo,
&DeviceInfoData,
ab,m,&DeviceInterfaceData); m++)//枚举这类设备中所有的设备
{
printf("GUID={%X-%X-%X-%X%X-%X%X%X%X%X%X}\n",
DeviceInterfaceData.InterfaceClassGuid.Data1,
DeviceInterfaceData.InterfaceClassGuid.Data2,
DeviceInterfaceData.InterfaceClassGuid.Data3,
DeviceInterfaceData.InterfaceClassGuid.Data4[0],
DeviceInterfaceData.InterfaceClassGuid.Data4[1],
DeviceInterfaceData.InterfaceClassGuid.Data4[2],
DeviceInterfaceData.InterfaceClassGuid.Data4[3],
DeviceInterfaceData.InterfaceClassGuid.Data4[4],
DeviceInterfaceData.InterfaceClassGuid.Data4[5],
DeviceInterfaceData.InterfaceClassGuid.Data4[6],
ab->Data4[7]);
printf("设备: [ %s size=%d ]\n",buffer,buffersize);
memset(buf,0,256);


}
// printf("Do you want close this driver (YES)y or (NO)n\n");
// char ch[128];
// scanf("%s",ch);
// if(ch[0]=='y')
// {
/* if(SetupDiRemoveDevice(hDevInfo, &DeviceInfoData))
{
printf("SetupDiRemoveDevice succeed");
}else
{
printf("SetupDiRemoveDevice false");
}*/
// }

}

if ( GetLastError()!=NO_ERROR && GetLastError()!=ERROR_NO_MORE_ITEMS )
{
// Insert error handling here.
return 1;
}

// Cleanup
SetupDiDestroyDeviceInfoList(hDevInfo);

return 0;
}

loveternity 2003-11-27
  • 打赏
  • 举报
回复
能不能举个实例,谢谢
zhangnanonnet 2003-11-25
  • 打赏
  • 举报
回复
没有具体的函数,没一样设备都可以直接通过IO端口读出设备号

2,640

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 硬件/系统
社区管理员
  • 硬件/系统社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧