阅读:1803回复:9
Stream Minidriver中如何得到自己的DeviceExtension
这里我用了一个非常规做法,绕过了class driver。代码类似于:
NTSTATUS USBCAMD_InternalIoctl( PDEVICE_OBJECT DeviceObject, PIRP Irp) { ... } Irp请求我已能正确收到。 现在我要在这个函数中得到 minidriver 的 DeviceExtension,我看了有关头文件,感觉不太可能。我没怎么做过KS Driver,有没有人可以给个结论? (但在 HID miniport driver 中就很容易得到自己的 DeviceExtension,因为结构是公开的) |
|
|
沙发#
发布于:2003-06-25 08:27
没人做这个??
|
|
|
板凳#
发布于:2003-06-25 10:07
我做过stream driver (pc camera driver)
对 stream minidriver 在每个SRB(STREAM REQUEST BLOCK)中都保存了设备扩展的指针(pSrb->HwDeviceExtension) 如果你绕过Class Driver, 你调用 IoCreateDevice创建一个设备对象的话,也可以增加自己的设备扩展,IoCreateDevice中有参数 DeviceExtensionSize 可以填上。这样在以后的回调例程中,通过pDeviceObject->DeviceExtension 就能访问到你的设备扩展。 |
|
|
地板#
发布于:2003-06-25 10:18
我当时没有用 USBCAMD 写。
我看了一下 ddk USBCAMD_xxxxx( IN PVOID DeviceContext ... } 都有一个DevicContext,它的大小应该是 ULONG USBCAMD_DriverEntry( PVOID Context1, PVOID Context2, ULONG DeviceContextSize, ULONG FrameContextSize, PADAPTER_RECEIVE_PACKET_ROUTINE ReceivePacket ); 中的 DeviceContextSize 。 |
|
|
地下室#
发布于:2003-06-25 17:16
swf2003真负责啊。
对不起,我没说清楚。“绕过class driver”仅指那一个函数。否则,那就不是个问题了。(不太可能不用class driver,自己做一个stream driver吧) 另,我的这个driver是用了USBCAMD的,而且这个函数就是在USBCAMD里面的(自己把USBCAMD改了改)。 通过SRB是很容易得到的,而我这个函数由于绕过了class driver,所以没有SRB。但是DeviceObject仍是class driver创建的。由于自己不能全盘控制,所以才有麻烦。 反正我现在只有在HwInit...时把它记录下来了,大不了用一个词典。 |
|
|
5楼#
发布于:2003-06-25 17:34
而且DeviceContext好象和DeviceExtension不是一回事,USBCAMD里面有一个宏:
#define USBCAMD_GET_DEVICE_EXTENSION(dc) (PUSBCAMD_DEVICE_EXTENSION) (((PUCHAR)(dc)) - sizeof(USBCAMD_DEVICE_EXTENSION)) 不过你没用过USBCAMD,就不说这个了。看来我的代码要写在minidriver里(而不是USBCAMD里面) 说说在minidriver里可以得到 DeviceExtension 和 DeviceObject 吗 (是PDO还是FDO)?Minidriver里面好像没有 DeviceExtension? |
|
|
6楼#
发布于:2003-06-26 10:33
minidriver中可以得到 DeviceExtension
HW_STREAM_REQUEST_BLOCK 中有 HwDeviceExtension。 DeviceObject 也能得到,在 SRB 中 pSrb->CommandData.ConfigInfo 有 ClassDeviceObject 与 PhysicalDeviceObject 可以使用,FDO PDO都有。 |
|
|
7楼#
发布于:2003-06-26 17:01
谢谢swf2003,你态度真好!
说来话长,不说也罢。最后我还是把代码写在了USBCAMD里,通过DeviceContext可以得到DeviceExtension(不过今天我看了一下,这个是我们自己定义的,不是MS的代码) 总之,今天我大功告成了,可以松口气了~~~~~~~~~~~~~~~ :D :D :D |
|
|
8楼#
发布于:2003-06-26 17:18
既然是开发论坛,互相交流,互有收获的。
|
|
|
9楼#
发布于:2003-06-26 19:47
对!
|
|
|