jason.gao
驱动小牛
驱动小牛
  • 注册日期2002-05-08
  • 最后登录2003-11-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1803回复:9

Stream Minidriver中如何得到自己的DeviceExtension

楼主#
更多 发布于:2003-06-24 17:05
这里我用了一个非常规做法,绕过了class driver。代码类似于:
NTSTATUS
USBCAMD_InternalIoctl(
    PDEVICE_OBJECT DeviceObject,
    PIRP Irp)
{
...
}

Irp请求我已能正确收到。

现在我要在这个函数中得到 minidriver 的 DeviceExtension,我看了有关头文件,感觉不太可能。我没怎么做过KS Driver,有没有人可以给个结论?

(但在 HID miniport driver 中就很容易得到自己的 DeviceExtension,因为结构是公开的)
我打字很快。
jason.gao
驱动小牛
驱动小牛
  • 注册日期2002-05-08
  • 最后登录2003-11-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-06-25 08:27
没人做这个??
我打字很快。
swf2003
驱动中牛
驱动中牛
  • 注册日期2003-02-13
  • 最后登录2011-10-28
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望22点
  • 贡献值0点
  • 好评度20点
  • 原创分0分
  • 专家分0分
板凳#
发布于: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 就能访问到你的设备扩展。
你的认可是对我最大的鼓励!
swf2003
驱动中牛
驱动中牛
  • 注册日期2003-02-13
  • 最后登录2011-10-28
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望22点
  • 贡献值0点
  • 好评度20点
  • 原创分0分
  • 专家分0分
地板#
发布于: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 。

你的认可是对我最大的鼓励!
jason.gao
驱动小牛
驱动小牛
  • 注册日期2002-05-08
  • 最后登录2003-11-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-06-25 17:16
swf2003真负责啊。

对不起,我没说清楚。“绕过class driver”仅指那一个函数。否则,那就不是个问题了。(不太可能不用class driver,自己做一个stream driver吧)

另,我的这个driver是用了USBCAMD的,而且这个函数就是在USBCAMD里面的(自己把USBCAMD改了改)。

通过SRB是很容易得到的,而我这个函数由于绕过了class driver,所以没有SRB。但是DeviceObject仍是class driver创建的。由于自己不能全盘控制,所以才有麻烦。

反正我现在只有在HwInit...时把它记录下来了,大不了用一个词典。
我打字很快。
jason.gao
驱动小牛
驱动小牛
  • 注册日期2002-05-08
  • 最后登录2003-11-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
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?
我打字很快。
swf2003
驱动中牛
驱动中牛
  • 注册日期2003-02-13
  • 最后登录2011-10-28
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望22点
  • 贡献值0点
  • 好评度20点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-06-26 10:33
minidriver中可以得到 DeviceExtension
HW_STREAM_REQUEST_BLOCK 中有 HwDeviceExtension。
DeviceObject 也能得到,在 SRB 中
pSrb->CommandData.ConfigInfo 有 ClassDeviceObject 与
 PhysicalDeviceObject 可以使用,FDO PDO都有。
你的认可是对我最大的鼓励!
jason.gao
驱动小牛
驱动小牛
  • 注册日期2002-05-08
  • 最后登录2003-11-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2003-06-26 17:01
谢谢swf2003,你态度真好!

说来话长,不说也罢。最后我还是把代码写在了USBCAMD里,通过DeviceContext可以得到DeviceExtension(不过今天我看了一下,这个是我们自己定义的,不是MS的代码)

总之,今天我大功告成了,可以松口气了~~~~~~~~~~~~~~~
 :D :D :D
我打字很快。
swf2003
驱动中牛
驱动中牛
  • 注册日期2003-02-13
  • 最后登录2011-10-28
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望22点
  • 贡献值0点
  • 好评度20点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2003-06-26 17:18
既然是开发论坛,互相交流,互有收获的。
你的认可是对我最大的鼓励!
jason.gao
驱动小牛
驱动小牛
  • 注册日期2002-05-08
  • 最后登录2003-11-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2003-06-26 19:47
对!
我打字很快。
游客

返回顶部