yaochidong
驱动牛犊
驱动牛犊
  • 注册日期2002-07-09
  • 最后登录2002-11-03
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1505回复:5

在win2k或NT下,系统如何向驱动程序传递数据的

楼主#
更多 发布于:2002-10-31 22:20
我知道系统向DriverEntry传递两个结构指针pDriverObject和pRegistryPath,但系统对这两个指针所指的结构初始化了吗?是怎么初始化的呢,我看到例程中都直接用pRegistryPath给驱动程序自已定义的uncode字符串赋值,系统在调用DriverEntry时是怎么知道RegistryPath的内容的呢,这个RegistryPath应该是和自己要添加的设备有关的呀?
minsoft
驱动小牛
驱动小牛
  • 注册日期2001-07-30
  • 最后登录2007-03-06
  • 粉丝0
  • 关注0
  • 积分8分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-11-01 12:06
这两个指针已经初始化了。
pDriverObject就不说了。
pRegisterPath就指向你的DRIVER在注册表中的KEY,在KMD/WDM驱程中,它的位置在:
HKLM\\System\\CurrentControlSet\\Services\\XXX
XXX是驱程名称,如WDMFS。
如果是98的驱程,好象位置又不一样:
HKLM\\System\\CurrentControlSet\\Services\\Class\\XXX
XXX是类名,如串口是PORTS类,下有0000,0001等键表示第0、1个PORT。
少了e,就少了全部
ydyuse
驱动老牛
驱动老牛
  • 注册日期2002-07-25
  • 最后登录2005-03-26
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-11-01 14:10
例程中直接用pRegistryPath给驱动程序自已定义的uncode字符串赋值是备份设备服务键的键名,它是注册表中的相应内容,如MINSOFT所言。pDriverObject指向一个刚被初始化的驱动程序对象,该对象就代表你的驱动程序。WDM驱动程序的DriverEntry例程就完成对这个对象的初始化并返回。
生命驱动,活力无限!
gxjt
驱动老牛
驱动老牛
  • 注册日期2002-03-26
  • 最后登录2006-06-07
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-11-01 14:11
DeviceIoControl
[color=red] “阿弥陀佛,无上医王,舍此不求,是谓痴狂。” “一句弥陀,阿伽陀药,舍此不服,是谓大错。” 南无阿弥陀佛......[/color]
iso2000
驱动牛犊
驱动牛犊
  • 注册日期2002-10-24
  • 最后登录2002-11-02
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-11-01 21:38
可户模式调用DeviceIoControl()将pInBuf内的数值传递给驱动程序的 IRP_MJ_DEVICE_CONTROL 。
代码如:

DeviceIoControl
(H_Device,
DWORD(IOCTL_XXX),
pInBuf,
1,
pOutBuf,
4,
&ReturnedLength,
NULL      
);

UCardControl(
    IN PDEVICE_OBJECT pDevObj,
    IN PIRP           Irp
    )
{
.......
case IOCTL_XXXX:
  temp = *(PUCHAR)((PUCHAR)pIoBuffer);
  break;
.......
}
yaochidong
驱动牛犊
驱动牛犊
  • 注册日期2002-07-09
  • 最后登录2002-11-03
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-11-01 23:42
感谢各位大虾指点,可我还是不太明白,每个驱动程序源代码中都以DriverEntry作为入口点,这个pRegistryPath对每个驱动程序都是一样的吗,如果都是一样的,可以定义一个常量,没有必要作为参数传递了,如果不一样,系统在调用一个具体的驱动程序前怎么知道该对这个驱动程序传递什么样的参数呢?
    DriverEntry是在系统初始化时执行的,而DeviceIoControl应该是启动后在用户应用程序中调用的吧,这样在执行顺序上就不对了呀?
游客

返回顶部