//访问系统的硬件库
hDevInfo = SetupDiGetClassDevs(NULL, 0, NULL,
DIGCF_ALLCLASSES | DIGCF_PRESENT);
if (hDevInfo == INVALID_HANDLE_VALUE)
{
goto cleanup_DeviceInfo;
} //枚举硬件,获得需要的接口
spDevInfoData.cbSize = sizeof(SP_DEVINFO_DATA);
for (i = 0; SetupDiEnumDeviceInfo(hDevInfo, i, &spDevInfoData); i++)
{
DWORD DataT ;
LPTSTR p, buffer = NULL ;
DWORD buffersize = 0 ; //获得硬件的属性值
while (!SetupDiGetDeviceRegistryProperty(hDevInfo, &spDevInfoData,
SPDRP_HARDWAREID
, &DataT, (PBYTE) buffer, buffersize,
&buffersize))
{
if (GetLastError() == ERROR_INVALID_DATA)
{
//不存在HardwareID. Continue.
break ;
}
else if (GetLastError() == ERROR_INSUFFICIENT_BUFFER)
{
//buffer size不对.
if (buffer)
LocalFree(buffer);
buffer = (LPTSTR) LocalAlloc(LPTR, buffersize);
}
else
{
//未知错误
goto cleanup_DeviceInfo ;
}
}
long error;
error = GetLastError();
if (error == ERROR_INVALID_DATA )
continue ;
}
我粘出了部分代码,我出错的问就这个函数,
SetupDiGetDeviceRegistryProperty(hDevInfo, &spDevInfoData,SPDRP_HARDWAREID, &DataT, (PBYTE) buffer, buffersize, &buffersize)),
这个函数我在XP,2000运行的好的返回值,,可是在98运行的时候,总返回一个真值,但是
buffer这个参数却没有东西,不知道98与2000和XP在设备信息有什么区别,请高手指点一下!!!
郁闷! MSDN也没有说明XP和2000与98区别! 请高手们指点一下,我会及时结贴给分!在线等!
hDevInfo = SetupDiGetClassDevs(NULL, 0, NULL,
DIGCF_ALLCLASSES | DIGCF_PRESENT);
if (hDevInfo == INVALID_HANDLE_VALUE)
{
goto cleanup_DeviceInfo;
} //枚举硬件,获得需要的接口
spDevInfoData.cbSize = sizeof(SP_DEVINFO_DATA);
for (i = 0; SetupDiEnumDeviceInfo(hDevInfo, i, &spDevInfoData); i++)
{
DWORD DataT ;
LPTSTR p, buffer = NULL ;
DWORD buffersize = 0 ; //获得硬件的属性值
while (!SetupDiGetDeviceRegistryProperty(hDevInfo, &spDevInfoData,
SPDRP_HARDWAREID
, &DataT, (PBYTE) buffer, buffersize,
&buffersize))
{
if (GetLastError() == ERROR_INVALID_DATA)
{
//不存在HardwareID. Continue.
break ;
}
else if (GetLastError() == ERROR_INSUFFICIENT_BUFFER)
{
//buffer size不对.
if (buffer)
LocalFree(buffer);
buffer = (LPTSTR) LocalAlloc(LPTR, buffersize);
}
else
{
//未知错误
goto cleanup_DeviceInfo ;
}
}
long error;
error = GetLastError();
if (error == ERROR_INVALID_DATA )
continue ;
}
我粘出了部分代码,我出错的问就这个函数,
SetupDiGetDeviceRegistryProperty(hDevInfo, &spDevInfoData,SPDRP_HARDWAREID, &DataT, (PBYTE) buffer, buffersize, &buffersize)),
这个函数我在XP,2000运行的好的返回值,,可是在98运行的时候,总返回一个真值,但是
buffer这个参数却没有东西,不知道98与2000和XP在设备信息有什么区别,请高手指点一下!!!
郁闷! MSDN也没有说明XP和2000与98区别! 请高手们指点一下,我会及时结贴给分!在线等!
2k用2k的ddk不能混用
在98其参数是是如何设置的呢?跟xp,2000有什么不同啊?????
DWORD DataT;
BYTE buffer[500] = {0};
SetupDiGetDeviceRegistryProperty(hDevInfo, &spDevInfoData,SPDRP_HARDWAREID, &DataT, (PBYTE) buffer, sizeof(buffer), &buffersize);
是不是98中DDK引用的库文件不一样?!
我也是这么想的,我也在看CSDN文档(http://kb.csdn.net/.net/Articles/200603/a89f5005-c2a3-4d14-b359-33da2ddc3ea1.html),说里因为API不一样而出现错识!
to theone:
/****************************** 我的做法: */
TCHAR buffer[512]={0};
//ZeroMemory(buffer,512);
//获得硬件的属性值
SetupDiGetDeviceRegistryProperty(hDevInfo, &spDevInfoData,
SPDRP_CAPABILITIES, &DataT, (PBYTE) buffer, sizeof(buffer),
&buffersize))
/******************************************/
我试过了,buffer里面什么都没有,而且buffersize每次返回 不是0就是4
getlasterror()每次的返回的值大多数时候是13 (ERROR_INVALID_DATA);
我想是不是SPDRP_HARDWAREID这个参数对于设备是不是在98下面没有作用???
我把这个函数在MSDN又仔细(E文不是很好,连猜到估)看了一次,发现这个对可移除设备在只在XP之后系统才支持. 但是对于这个SPDRP_HARDWAREID参数是没有说明98,2000和XP区别.所以说这个应该支持,但是buffer里面的应该是返回设备ID(对吧?),却没有.
唉.而且98蓝屏的次数多得吓死人,我在98测试的时候,蓝屏N多次了!!!!!
2. SPDRP_HARDWAREID在98下肯定可以枚举到,我曾经做过,没有问题的。从你返回值来看,似乎是注册表中信息不对,根据你枚举到的设备,看看注册表中此项信息是否正常
我是枚举主要是一个USB设备,
我想注册表信息应该有的,因为我从设备管理器中可以看到我要枚举设备了。。
如果注册表信息错了的话?设备管理器应该是看不到吧?
theone:
你能不能留下你的MSN,能向请教吗?我留下我的MSN:[email protected]。