阅读:1394回复:2
问一个关于设备扩展的问题
这是驱动开发技术详见中的一段标准代码
其中有两句理解起来很困惑 特此求助 代码: /************************************************************************ * 函数名称:HelloWDMAddDevice * 功能描述:添加新设备 * 参数列表: DriverObject:从I/O管理器中传进来的驱动对象 PhysicalDeviceObject:从I/O管理器中传进来的物理设备对象 * 返回 值:返回添加新设备状态 *************************************************************************/ #pragma PAGEDCODE NTSTATUS HelloWDMAddDevice(IN PDRIVER_OBJECT DriverObject, IN PDEVICE_OBJECT PhysicalDeviceObject) { PAGED_CODE(); KdPrint(("Enter HelloWDMAddDevice\n")); NTSTATUS status; PDEVICE_OBJECT fdo; UNICODE_STRING devName; RtlInitUnicodeString(&devName,L"\\Device\\MyWDMDevice"); status = IoCreateDevice( DriverObject, sizeof(DEVICE_EXTENSION), &(UNICODE_STRING)devName, FILE_DEVICE_UNKNOWN, 0, FALSE, &fdo); if( !NT_SUCCESS(status)) return status; // PDEVICE_EXTENSION pdx = (PDEVICE_EXTENSION)fdo->DeviceExtension; pdx->fdo = fdo; pdx->NextStackDevice = IoAttachDeviceToDeviceStack(fdo, PhysicalDeviceObject); UNICODE_STRING symLinkName; RtlInitUnicodeString(&symLinkName,L"\\DosDevices\\HelloWDM"); pdx->ustrDeviceName = devName; pdx->ustrSymLinkName = symLinkName; status = IoCreateSymbolicLink(&(UNICODE_STRING)symLinkName,&(UNICODE_STRING)devName); 其中有两句 PDEVICE_EXTENSION pdx = (PDEVICE_EXTENSION)fdo->DeviceExtension; pdx->fdo = fdo; 第一句我的理解是:设备扩展对象指针pdx指向驱动对象fdo中的设备扩展结构 第二句:将驱动对象fdo指向设备扩展对象中的驱动对象fdo 这样就是将设备扩展结构和设备驱动对象关联起来了 可是第一句后半部分:(PDEVICE_EXTENSION)fdo->DeviceExtension 这不就是把fdo强制转换为设备扩展对象了么 这样他怎么还能访问DeviceExtension? 这又不是很扯么? 究竟是我的那一种想法错了 谢谢指点 |
|
|
沙发#
发布于:2009-05-04 16:11
先fdo->DeviceExtension
后 PDEVICE_EXTENSION强制转化 |
|
|
板凳#
发布于:2009-05-15 17:30
->的优先级比()高
|
|
|