阅读:941回复:4
下面这段代码有点疑问!
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已经被附加(也许是某种复制操作)到设备栈中了 |
|
沙发#
发布于:2002-12-01 09:35
大侠们!难道没人知道吗?
这是一段几乎所有驱动都会遇到的代码啊! 希望哪位大侠高抬贵嘴啊! 解释一下吧! |
|
板凳#
发布于:2002-12-01 10:33
fdo代表设备对象的指针。只要设备对象存在,任何时候都是可以访问的,附加到设备栈中不是复制操作,应该是类似链表插入的方式。
|
|
|
地板#
发布于:2002-12-01 22:37
明白了,谢谢!
|
|
地下室#
发布于:2002-12-01 22:39
怎么回事?
|
|