阅读:1623回复:11
求助!谢谢!win2000下驱动调试的问题。关于IoAttachDeviceToDeviceStack
我编译出的驱动在加载时每次运行到AddDevice中的IoAttachDeviceToDeviceStack时候就重新启动,搞了很久不知道是什么原因,谢谢各位大侠了!
代码如下:万分感谢: NTSTATUS AddDevice( PDRIVER_OBJECT DriverObject, PDEVICE_OBJECT PhysicalDeviceObject ) { UNICODE_STRING KernelDeviceNameUnicode; UNICODE_STRING DosDeviceNameUnicode; PDEVICE_OBJECT FunctionalDeviceObject; PDEVICE_OBJECT StackDeviceObject; NTSTATUS Status; DeviceObject* DeviceExtension ; CHAR KernelDeviceName[32]; RtlInitUnicodeString(&KernelDeviceNameUnicode, L\"\\\\Device\\\\ASD\"); Status = IoCreateDevice( DriverObject, sizeof(DeviceObject), &KernelDeviceNameUnicode, FILE_DEVICE_UNKNOWN, 0, // No standard device characteristics FALSE, // This isn\'t an exclusive device &FunctionalDeviceObject ); if ( !NT_SUCCESS(Status) ) { ............... } DeviceExtension = (DeviceObject*)FunctionalDeviceObject->DeviceExtension; RtlZeroMemory(DeviceExtension, sizeof(DeviceObject)); Status = IoRegisterDeviceInterface(PhysicalDeviceObject, (LPGUID)&GUID_ZSC_PCI_INTERFACE, NULL, &DeviceExtension->DeviceInterfaceSymLink); IoSetDeviceInterfaceState(&DeviceExtension->DeviceInterfaceSymLink,TRUE); FunctionalDeviceObject->Flags |= DO_DIRECT_IO; DeviceExtension->FunctionalDeviceObject = FunctionalDeviceObject; StackDeviceObject = IoAttachDeviceToDeviceStack(FunctionalDeviceObject, PhysicalDeviceObject); FunctionalDeviceObject->Flags &= ~DO_DEVICE_INITIALIZING; DeviceExtension->FunctionalDeviceObject = FunctionalDeviceObject; DeviceExtension->StackDeviceObject = StackDeviceObject; return STATUS_SUCCESS; } |
|
|
沙发#
发布于:2003-05-14 17:58
每次安装驱动运行到IoAttachDeviceToDeviceStack都会重新启动,而通过测试前面的FunctionalDeviceObject创建是成功返回的,搞了很久都不知道那里错了??谢谢大家了!
|
|
|
板凳#
发布于:2003-05-14 18:13
老兄,softice和windbg都能定位这个错误。
|
|
地板#
发布于:2003-05-14 19:02
yyhabc不好意思啊,我说的不太明白。
我是已经知道是IoAttachDeviceToDeviceStack产生错误,我把它注掉以后就不会发生错误了。 可是虽然我知道这里错了,但不知道怎么纠正过来。我上面说过FunctionalDeviceObject创建是成功返回的,那么PhysicalDeviceObject 应该不会有错吧。真不知道为什么这里会产生错误。 错误代码是0x12F.应该是内存访问之类的错误! |
|
|
地下室#
发布于:2003-05-14 19:47
见注释。 你的Device extension到底是怎么定义的? |
|
5楼#
发布于:2003-05-14 21:47
arthurtu老大,真是谢谢你,我也比较怀疑这里,但是一直自我感觉没有错,
我的DeviceObject是在头文件里面自己定义的一个结构。只是没有专门定义成一个指针变量。 我增加指针变量pDeviceObject后, pDeviceObject DeviceExtension ; DeviceExtension = (pDeviceObject)FunctionalDeviceObject->DeviceExtension; 这样使用后,还是老样子!哎! |
|
|
6楼#
发布于:2003-05-14 22:43
晕,你的代码风格还真好。把人看的晕晕的。
原来你的device extension的名字叫DeviceObject! |
|
7楼#
发布于:2003-05-15 10:26
arthurtu,呵呵,这样写的我也觉得难受,不过嫌改的麻烦,现在还不知道改如何纠正错误。。。。。。。。。555555.........
|
|
|
8楼#
发布于:2003-05-15 10:31
吼吼!再这样下去,我就再重写一遍看看,精简到最低限度,要是还在这里报错的话,我就吐血身亡算了........
|
|
|
9楼#
发布于:2003-05-15 21:17
问题找到了,是在pnp中处理IRP发生了错误.谢谢各位的关心,把分给大家,希望以后能够多多帮忙。谢谢
[编辑 - 5/15/03 by zshuc] |
|
|
10楼#
发布于:2003-05-16 15:31
我遇到同样的问题,能具体说明那里错了吗?
|
|
11楼#
发布于:2003-05-26 20:19
In your device_extension stucture ,you add a member which type is DEVICE_OBJECT and assign that to the return value of IoAttach* ,
Maybe Ok. |
|
|