阅读:1398回复:11
前进了几步,但还是有问题!
我的pci驱动程序能够正常安装(2k),可以读写寄存器!
当时通过设备管理器察看资源时,没有响应! 而且察看网卡和显卡的资源时也没有响应. 请问:可能的原因? 1。inf文件 2。驱动本身 3。硬件本身 4。资源冲突。 |
|
|
沙发#
发布于:2003-03-10 22:56
什么叫“没有响应”啊?
|
|
板凳#
发布于:2003-03-11 08:35
就是说通过设备管理器察看资源时,资源显示不出,,一段时间后出现
该程序(指2k下的设备管理器)无回应,立即结束的对话框! |
|
|
地板#
发布于:2003-03-11 13:26
问题可能还是在驱动程序中或硬件的资源申请中,inf文件只涉及到驱动程序的安装。不过如果你有用到手动资源分配将要在inf文件中合理的定义(具体可以查找MSDN中inf文件的文档说明)。驱动程序中在开始设备驱动程序的状态就要对资源分配。如果你的硬件分配的资源合理的的话就不会有问题的咯!^_^
|
|
|
地下室#
发布于:2003-03-11 15:38
pci的卡难道还有手工配置吗?
至少我的不要! 我初步断定是硬件的eprom有问题,因为我的板上只有8M ddr ram,可是windriver监测到有32M :P |
|
|
5楼#
发布于:2003-03-11 23:12
有可能是你的驱动本身的问题,也就是响应IRP_MN_QUERY_***的函数有问题,你用softice跟进去看看
|
|
|
6楼#
发布于:2003-03-12 08:55
对,有可能,我去查!
你看我这样对吗?(还有,不但我的卡不能看资源,其他网卡。显卡也不能看!why?) case IRP_MN_QUERY_STOP_DEVICE://只是往下传 if (!devExt->DeviceStarted) { IoSkipCurrentIrpStackLocation(Irp); nStatus =IoCallDriver(devExt->StackDeviceObject,Irp); break; case IRP_MN_QUERY_REMOVE_DEVICE://只是往下传,但是要等待 if (!devExt->DeviceStarted) { IoSkipCurrentIrpStackLocation(Irp); nStatus =IoCallDriver(devExt->StackDeviceObject, Irp); break; case IRP_MN_QUERY_ID: case IRP_MN_QUERY_RESOURCES: case IRP_MN_QUERY_INTERFACE: case IRP_MN_QUERY_DEVICE_TEXT: case IRP_MN_QUERY_DEVICE_RELATIONS: case IRP_MN_QUERY_BUS_INFORMATION: case IRP_MN_QUERY_PNP_DEVICE_STATE: case IRP_MN_DEVICE_USAGE_NOTIFICATION: case IRP_MN_QUERY_RESOURCE_REQUIREMENTS: IoSkipCurrentIrpStackLocation(Irp); nStatus =IoCallDriver(devExt->StackDeviceObject, Irp); break; default: //只是往下传 IoSkipCurrentIrpStackLocation(Irp); nStatus = IoCallDriver(stackDeviceObject, Irp); [编辑 - 3/12/03 by Xman] |
|
|
7楼#
发布于:2003-03-12 09:05
可能真的是驱动问题,因为非正常安装时,
(此设备的配置不正确。 (代码 1) 要重新为这个设备安装驱动程序, 请单击“重新安装驱动程序”。) 此时可以看到资源,和windriver显示的一样! |
|
|
8楼#
发布于:2003-03-12 10:16
你申请分配的资源和网卡等有冲突就会有这重情况,偶也有遇到,可以在本网上下一个前辈写的PCI卡检测程序(简单清晰),检测一下,再跟踪驱动程序看看!
|
|
|
9楼#
发布于:2003-03-13 10:44
我用windriver检测,没有冲突!
|
|
|
10楼#
发布于:2003-03-18 23:38
其实这种查询只用往下传就可以了,具体事务由总线驱动程序负责。给你贴贴oney的代码,希望对你有帮助:
////////////////////////////////////////////////////// NTSTATUS HandleQueryCapabilities(IN PDEVICE_OBJECT fdo, IN PIRP Irp) { // HandleQueryCapabilities ASSERT(IoGetCurrentIrpStackLocation(Irp)->MinorFunction == IRP_MN_QUERY_CAPABILITIES); PIO_STACK_LOCATION stack = IoGetCurrentIrpStackLocation(Irp); PDEVICE_CAPABILITIES pdc = stack->Parameters.DeviceCapabilities.Capabilities; PDEVICE_EXTENSION pdx = (PDEVICE_EXTENSION) fdo->DeviceExtension; // Check to be sure we know how to handle this version of the capabilities structure if (pdc->Version < 1) return DefaultPnpHandler(fdo, Irp); NTSTATUS status = ForwardAndWait(fdo, Irp); if (NT_SUCCESS(status)) { // IRP succeeded stack = IoGetCurrentIrpStackLocation(Irp); pdc = stack->Parameters.DeviceCapabilities.Capabilities; // TODO Modify any capabilities that must be set on the way back up pdx->devcaps = *pdc; // save capabilities for whoever needs to see them } // IRP succeeded return CompleteRequest(Irp, status); } // HandleQueryCapabilities ////////////////////////////////////////////////////// NTSTATUS ForwardAndWait(IN PDEVICE_OBJECT fdo, IN PIRP Irp) { // ForwardAndWait ASSERT(KeGetCurrentIrql() == PASSIVE_LEVEL); PAGED_CODE(); KEVENT event; KeInitializeEvent(&event, NotificationEvent, FALSE); IoCopyCurrentIrpStackLocationToNext(Irp); IoSetCompletionRoutine(Irp, (PIO_COMPLETION_ROUTINE) OnRequestComplete, (PVOID) &event, TRUE, TRUE, TRUE); PDEVICE_EXTENSION pdx = (PDEVICE_EXTENSION) fdo->DeviceExtension; IoCallDriver(pdx->LowerDeviceObject, Irp); KeWaitForSingleObject(&event, Executive, KernelMode, FALSE, NULL); return Irp->IoStatus.Status; } // ForwardAndWait ////////////////////////////////////////////////////// NTSTATUS OnRequestComplete(IN PDEVICE_OBJECT fdo, IN PIRP Irp, IN PKEVENT pev) { // OnRequestComplete KeSetEvent(pev, 0, FALSE); return STATUS_MORE_PROCESSING_REQUIRED; } // OnRequestComplete ////////////////////////////////////////////////////// NTSTATUS CompleteRequest(IN PIRP Irp, IN NTSTATUS status) { // CompleteRequest Irp->IoStatus.Status = status; IoCompleteRequest(Irp, IO_NO_INCREMENT); return status; } // CompleteRequest |
|
|
11楼#
发布于:2003-03-19 11:16
98下通过了,2k下却不行,郁闷 :(
|
|
|