阅读:2338回复:0
为什么调用函数SetupDiEnumDeviceInterfaces总是失败,返回错误码为259,提示没有可用的数据了。 谢谢
通过分析注册表,发现了一点问题。在注册表中的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; } |
|