阅读:1246回复:4
wdm2代码疑问
我的疑问写在下面程序的注释部分:
NTSTATUS Wdm2AddDevice( IN PDRIVER_OBJECT DriverObject, IN PDEVICE_OBJECT pdo) { DebugPrint(\"AddDevice\"); NTSTATUS status; PDEVICE_OBJECT fdo; //此处声明一个功能设备对象,为下面做准备 // Create our Functional Device Object in fdo status = IoCreateDevice( DriverObject, sizeof(WDM2_DEVICE_EXTENSION), NULL, // No Name FILE_DEVICE_UNKNOWN, 0, FALSE, &fdo); if( !NT_SUCCESS(status)) return status; //到此判断出真正建立了 fdo // Initialise device extension //下面声明了dx的类型为PWDM2_DEVICE_EXTENSION,并给dx 赋值为fdo->DeviceExtension //就是说dx当前应是属于 fdo之内的一个部分 PWDM2_DEVICE_EXTENSION dx = (PWDM2_DEVICE_EXTENSION)fdo->DeviceExtension; //问题来了 dx->fdo = fdo; //这里分明说 fdo其实是dx的中的一部分,这和上面不相互矛盾吗? dx->pdo = pdo; dx->UsageCount = 1; KeInitializeEvent( &dx->StoppingEvent, NotificationEvent, FALSE); dx->OpenHandleCount = 0; dx->GotResources = false; dx->Paused = false; dx->IODisabled = true; dx->Stopping = false; dx->PowerState = PowerDeviceD3; dx->PowerIdleCounter = NULL; ...... } 我知道这种理解有问题,但我的理解错在哪里呢? |
|
沙发#
发布于:2004-01-05 12:23
你没有弄清楚“指针”是什么吗? :o
|
|
板凳#
发布于:2004-01-05 13:49
//问题来了
dx->fdo = fdo; //这里分明说 fdo其实是dx的中的一部分,这和上面不相互矛盾吗? 不知道你什么意思?? 这里对新分配的设备扩展初始化,没什么问题的。。。。 |
|
|
地板#
发布于:2004-01-06 19:05
谢谢,我已经清楚了
|
|
地下室#
发布于:2004-02-12 09:04
头有点晕
|
|