maoloverme
驱动牛犊
驱动牛犊
  • 注册日期2009-09-16
  • 最后登录2010-01-13
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望11点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2338回复:0

为什么调用函数SetupDiEnumDeviceInterfaces总是失败,返回错误码为259,提示没有可用的数据了。 谢谢

楼主#
更多 发布于:2009-09-16 15:44
通过分析注册表,发现了一点问题。在注册表中的DeviceClasses下面,确是存在与我的GUID相关联的项,为{fb1bf4cf-bc48-4199-ba55-c41355b0cd79},在这项下面也存在##?#ROOT#UNKNOWN#0000#{fb1bf4cf-bc48-4199-ba55-c41355b0cd79},在这项下面也存在#项,但是#下面就没有内容了。我看了一下DeviceClasses下面的其他项,均能找到control项,而用这些项相关联的GUID调用函数SetupDiEnumDeviceInterfaces是成功的。然后我手动的加上control项,在调用SetupDiEnumDeviceInterfaces函数就能够成功,哪么是什么原因导致没有control项,是inf文件写得不对还是驱动写得有问题。 这一项究竟代表什么意思?
驱动中AddDevice函数的代码如下

NTSTATUS AddAdvice(IN PDRIVER_OBJECT pDriverObj,IN PDEVICE_OBJECT pDeviceObj)
{
NTSTATUS status;
PDEVICE_OBJECT fdo;

status = IoCreateDevice(pDriverObj,sizeof(DEVICE_EXTENSION),NULL,FILE_DEVICE_UNKNOWN,FILE_DEVICE_SECURE_OPEN,FALSE,&fdo);
if(!NT_SUCCESS(status))
return status;

PDEVICE_EXTENTSION doextension = (PDEVICE_EXTENTSION)fdo->DeviceExtension;
doextension->pCurrentObj = fdo;

IoRegisterDeviceInterface(pDeviceObj,&GUID_HELLO,NULL,&doextension->ustrLinkName);
doextension->pNextObj = IoAttachDeviceToDeviceStack(fdo,pDeviceObj);

fdo->Flags |= DO_BUFFERED_IO | DO_POWER_PAGABLE;
fdo->Flags |= ~DO_DEVICE_INITIALIZING;

return STATUS_SUCCESS;

}
游客

返回顶部