zshuc
驱动小牛
驱动小牛
  • 注册日期2001-08-16
  • 最后登录2012-04-19
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
阅读:1623回复:11

求助!谢谢!win2000下驱动调试的问题。关于IoAttachDeviceToDeviceStack

楼主#
更多 发布于:2003-05-14 17:52
我编译出的驱动在加载时每次运行到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;

}
大家好!
zshuc
驱动小牛
驱动小牛
  • 注册日期2001-08-16
  • 最后登录2012-04-19
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-05-14 17:58
每次安装驱动运行到IoAttachDeviceToDeviceStack都会重新启动,而通过测试前面的FunctionalDeviceObject创建是成功返回的,搞了很久都不知道那里错了??谢谢大家了!
大家好!
yyhabc
驱动小牛
驱动小牛
  • 注册日期2003-01-06
  • 最后登录2013-03-18
  • 粉丝0
  • 关注0
  • 积分327分
  • 威望47点
  • 贡献值0点
  • 好评度21点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-05-14 18:13
老兄,softice和windbg都能定位这个错误。
zshuc
驱动小牛
驱动小牛
  • 注册日期2001-08-16
  • 最后登录2012-04-19
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-05-14 19:02
yyhabc不好意思啊,我说的不太明白。
我是已经知道是IoAttachDeviceToDeviceStack产生错误,我把它注掉以后就不会发生错误了。
可是虽然我知道这里错了,但不知道怎么纠正过来。我上面说过FunctionalDeviceObject创建是成功返回的,那么PhysicalDeviceObject 应该不会有错吧。真不知道为什么这里会产生错误。
错误代码是0x12F.应该是内存访问之类的错误!

大家好!
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
地下室#
发布于:2003-05-14 19:47
 

DeviceObject* DeviceExtension ;  //DeviceExtension* DeviceExtension???
...
Status = IoCreateDevice( DriverObject,
sizeof(DeviceObject),   //什么样的device extension?!
&KernelDeviceNameUnicode,
FILE_DEVICE_UNKNOWN,
0, // No standard device characteristics
FALSE, // This isn\'t an exclusive device
&FunctionalDeviceObject );
...
DeviceExtension = (DeviceObject*)FunctionalDeviceObject->DeviceExtension;  //maybe (DeviceExtension*)...


见注释。
你的Device extension到底是怎么定义的?
zshuc
驱动小牛
驱动小牛
  • 注册日期2001-08-16
  • 最后登录2012-04-19
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-05-14 21:47
arthurtu老大,真是谢谢你,我也比较怀疑这里,但是一直自我感觉没有错,
我的DeviceObject是在头文件里面自己定义的一个结构。只是没有专门定义成一个指针变量。
我增加指针变量pDeviceObject后,
pDeviceObject  DeviceExtension ;
DeviceExtension = (pDeviceObject)FunctionalDeviceObject->DeviceExtension;
这样使用后,还是老样子!哎!
大家好!
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
6楼#
发布于:2003-05-14 22:43
晕,你的代码风格还真好。把人看的晕晕的。
原来你的device extension的名字叫DeviceObject!
zshuc
驱动小牛
驱动小牛
  • 注册日期2001-08-16
  • 最后登录2012-04-19
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2003-05-15 10:26
arthurtu,呵呵,这样写的我也觉得难受,不过嫌改的麻烦,现在还不知道改如何纠正错误。。。。。。。。。555555.........
大家好!
zshuc
驱动小牛
驱动小牛
  • 注册日期2001-08-16
  • 最后登录2012-04-19
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2003-05-15 10:31
吼吼!再这样下去,我就再重写一遍看看,精简到最低限度,要是还在这里报错的话,我就吐血身亡算了........
大家好!
zshuc
驱动小牛
驱动小牛
  • 注册日期2001-08-16
  • 最后登录2012-04-19
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2003-05-15 21:17
问题找到了,是在pnp中处理IRP发生了错误.谢谢各位的关心,把分给大家,希望以后能够多多帮忙。谢谢

[编辑 -  5/15/03 by  zshuc]
大家好!
shen_q
驱动牛犊
驱动牛犊
  • 注册日期2002-07-24
  • 最后登录2003-05-16
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2003-05-16 15:31
我遇到同样的问题,能具体说明那里错了吗?
rookie_cn
驱动牛犊
驱动牛犊
  • 注册日期2002-11-28
  • 最后登录2004-02-08
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
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.
rookie_cn:相信我,我会让你成为世界上第2幸福的人 girl:那谁是第一幸福的人 rookie_cn:拥有了你,还有谁比我幸福
游客

返回顶部