Secret_Garden
驱动牛犊
驱动牛犊
  • 注册日期2002-03-11
  • 最后登录2008-02-26
  • 粉丝0
  • 关注0
  • 积分41分
  • 威望5点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
阅读:893回复:4

下面这段代码有点疑问!

楼主#
更多 发布于:2002-11-29 21:36
NTSTATUS WdmIoAddDevice(IN PDRIVER_OBJECT DriverObject,IN PDEVICE_OBJECT pdo)
{
   NTSTATUS status;
   PDEVICE_OBJECT fdo;
   status = IoCreateDevice( DriverObject, sizeof(WDMIO_DEVICE_EXTENSION), NULL,FILE_DEVICE_UNKNOWN, 0, FALSE, &fdo);
   if( !NT_SUCCESS(status)) return status;
   PWDMIO_DEVICE_EXTENSION dx = (PWDMIO_DEVICE_EXTENSION)fdo->DeviceExtension;
   dx->fdo = fdo;
   dx->pdo = pdo;
   dx->UsageCount = 1;
   dx->NextStackDevice = IoAttachDeviceToDeviceStack(fdo,pdo);
   fdo->Flags |= DO_BUFFERED_IO|DO_POWER_PAGABLE;
   fdo->Flags &= ~DO_DEVICE_INITIALIZING;
   return STATUS_SUCCESS;
}

上面的代码中,fdo是在栈中创建的,就是说函数结束后fdo就无效了,这里有点不理解的是:
在IoAttachDeviceToDeviceStack之后,修改fdo的属性应该是没有用啊?fdo已经被附加(也许是某种复制操作)到设备栈中了
Secret_Garden
驱动牛犊
驱动牛犊
  • 注册日期2002-03-11
  • 最后登录2008-02-26
  • 粉丝0
  • 关注0
  • 积分41分
  • 威望5点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-12-01 09:35
大侠们!难道没人知道吗?
这是一段几乎所有驱动都会遇到的代码啊!
希望哪位大侠高抬贵嘴啊!
解释一下吧!
fingerp
驱动牛犊
驱动牛犊
  • 注册日期2002-03-31
  • 最后登录2009-01-20
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-12-01 10:33
fdo代表设备对象的指针。只要设备对象存在,任何时候都是可以访问的,附加到设备栈中不是复制操作,应该是类似链表插入的方式。
有些问题实在伤脑筋......
Secret_Garden
驱动牛犊
驱动牛犊
  • 注册日期2002-03-11
  • 最后登录2008-02-26
  • 粉丝0
  • 关注0
  • 积分41分
  • 威望5点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-12-01 22:37
明白了,谢谢!
Secret_Garden
驱动牛犊
驱动牛犊
  • 注册日期2002-03-11
  • 最后登录2008-02-26
  • 粉丝0
  • 关注0
  • 积分41分
  • 威望5点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-12-01 22:39
怎么回事?
游客

返回顶部