阅读:1782回复:4
PNP驱动程序如何确定底层的PDO类型?急急急!!!
做一个串口硬件的驱动程序,NT内核下面的,程序需要调用串口驱动程序,但我始终搞不明白,自己的设备对象是怎样挂到串口设备对象之上的,具体是那一个串口?
如果是通过INF文件安装通知的,INF文件中需要写一些什么信息?我在AddDevice例程中检测了一下PhysicalDeviceObject的类型 竟然是Controller,所以后面对IoCallDriver以及PoCallDriver的调用全部错了。巨郁闷! 此外,我用Windows的硬件向导安装我的驱动时,他竟然说我的INF文件中没有硬件信息。也不知道是什么原因!只好用Numega的EzDrvInstall安装,可能这也是造成错误的原因之一。我看到别的串口硬件驱动程序的硬件ID中总线部分用的是Serenum,不知道与这又没有关系? |
|
沙发#
发布于:2002-04-05 00:03
just a suggestion, serenum is a filter driver, I dont know what\'s it for, from its name - \'serial enum\', maybe it\'s used as a bus driver. Maybe that\'s why other drivers\' hardware is serenum.
|
|
|
板凳#
发布于:2002-04-05 10:42
不懂
可是DDK的帮助里有串口设备驱动的帮助啊 为什么不仔细看一下? |
|
|
地板#
发布于:2002-04-05 16:30
pdo->DeviceType;
|
|
|
地下室#
发布于:2002-04-05 19:35
按照我自己的理解,设备的加载过程应该是这样的,首先是总线驱动程序枚举该总线上的设备,若发现一个设备,便围起创建一个物理设备对象PDO,PNP管理器同时查找该设备的驱动程序。调用驱动程序的DriverEntry和AddDevice例程,创建功能设备对象FDO,因为是总线设备驱动发现的设备,所以该功能设备对象的下一层自然就是正确的(我是指AddDevice例程的另外一个参数,设备栈中该设备对象紧邻的下一个设备对象)比如说我的串口设备,其下面的设备对象按照道理就应该是串口的设备对象(至少最终可以到达川口设备,如果正常的话)。但现在由于我的串口设备不是PNP的,强制安装该设备后,AddDevice中的这个参数就不正确了,我察看其类型为Controller。所以后来PassDown的请求就不对了。
这是问题的症结之所在,若AddDevice中的参数是对的,那么正对下层的调用就都正确了。而这个参数的类型有牵扯到设备安装文件INF。我的Inf文件通过Windows的硬件向导安装时,系统报告说该Inf文件中没有硬件信息(我的硬件是标准类型的,不是所谓的Unknown型)。所以我只能用Numege EzDrvInstaller强制安装,但这样就使得AddDevice的参数不正确。 这里我想请问斑竹及各位大侠,若是虚拟的驱动,其安装程序应该怎样做,怎样才能让系统发现自己的设备并安装设备驱动? |
|