阅读:1505回复:5
在win2k或NT下,系统如何向驱动程序传递数据的
我知道系统向DriverEntry传递两个结构指针pDriverObject和pRegistryPath,但系统对这两个指针所指的结构初始化了吗?是怎么初始化的呢,我看到例程中都直接用pRegistryPath给驱动程序自已定义的uncode字符串赋值,系统在调用DriverEntry时是怎么知道RegistryPath的内容的呢,这个RegistryPath应该是和自己要添加的设备有关的呀?
|
|
沙发#
发布于: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。 |
|
|
板凳#
发布于:2002-11-01 14:10
例程中直接用pRegistryPath给驱动程序自已定义的uncode字符串赋值是备份设备服务键的键名,它是注册表中的相应内容,如MINSOFT所言。pDriverObject指向一个刚被初始化的驱动程序对象,该对象就代表你的驱动程序。WDM驱动程序的DriverEntry例程就完成对这个对象的初始化并返回。
|
|
|
地板#
发布于:2002-11-01 14:11
DeviceIoControl
|
|
|
地下室#
发布于: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; ....... } |
|
5楼#
发布于:2002-11-01 23:42
感谢各位大虾指点,可我还是不太明白,每个驱动程序源代码中都以DriverEntry作为入口点,这个pRegistryPath对每个驱动程序都是一样的吗,如果都是一样的,可以定义一个常量,没有必要作为参数传递了,如果不一样,系统在调用一个具体的驱动程序前怎么知道该对这个驱动程序传递什么样的参数呢?
DriverEntry是在系统初始化时执行的,而DeviceIoControl应该是启动后在用户应用程序中调用的吧,这样在执行顺序上就不对了呀? |
|