阅读:1329回复:7
难道XP和2000下的IoGetDeviceObjectPointer有区别吗?难道XP和2000下的IoGetDeviceObjectPointer有区别吗? 如下: UNICODE_STRING SerialDeviceName; RtlInitUnicodeString( &SerialDeviceName,L\"\\\\Device\\\\Serial0\" ); //Get pointer to serial port status = IoGetDeviceObjectPointer( &SerialDeviceName, FILE_ALL_ACCESS, &pFile, &pSerialDO); 以上代码在2000下运行完全ok, 但是,同样的跑在XP下,返回值是0xc000000e,怪哉。 A device which does not exist was specified.???? 不可能没有com 1 啊。 而且是在开机加载我的驱动的时候,才会失败。 当系统启动后,我把带感叹号号的驱动update一下,同样的代码,就ok了。 难道说问题是 当我调用IoGetDeviceObjectPointer的时候,com1的驱动还没有加载吗?? 如果真的是这样的话,那么应该如何处理呢?? 暴晕的问题,请提出你们宝贵的意见。谢谢先^_^ |
|
|
沙发#
发布于:2004-05-09 11:35
应该是启动顺序的问题
你把inf里面的start数字调高一点 在[Service]段有设置启动顺序的参数: StartType:系统启动时首先启动StartType=0的驱动,再依次启动1、2、3 LoadOrderGroup :同一个StartType,就看LoadOrderGroup Tag:同一group中的load顺序,在CurrentControlSet\\Control\\GroupOrderList有,第一个字节表示该组有几个设备,后面每个设备的tag占4个字节 Dependencies:指定必须在某个设备或者设备组的驱动起来后才能加载该驱动,比如Dependencies =TCPIP |
|
板凳#
发布于:2004-05-09 12:31
StartType:3或2
|
|
|
地板#
发布于:2004-05-09 15:50
谢谢拉
偶的StartType:3或2试过了,还是不行的。 :( 看来只能说明当执行到IoGetDeviceObjectPointer的时候,串口驱动还没有加载?? 还有没有别的可能呢??? 比若xp下,scardsvr服务早于serial启动??? 如果真的是这样, Dependencies:指定必须在串口驱动起来后才能加载我的驱动,比如这个Dependencies =TCPIP 应该怎么写? Dependencies = serial?? |
|
|
地下室#
发布于:2004-05-09 17:13
应该是启动顺序问题,很简单,你在调用IoGetDeviceObjectPointerde的地方设置一个断点,然后将softice起用boot模式,这样就可以简单的通过device命令来查看你所查询的设备是否启动,当然你有可能需要Windbg或其它工具才可以。
|
|
|
5楼#
发布于:2004-05-10 12:00
设置驱动的REINITIALIZE例程,调用IoRegisterDriverReinitialization,如果不合适则再次调用,直到你所以依赖的驱动已经启动为止,嘿嘿......
|
|
|
6楼#
发布于:2004-05-10 17:59
好强,不过俺以前也干过类似的勾当,呵呵
|
|
7楼#
发布于:2004-05-11 08:46
吼吼谢谢大家拉
我用的IoRegisterPlugPlayNotification来等待串口启动。^_^ 放分 :D |
|
|