dregs
驱动小牛
驱动小牛
  • 注册日期2004-02-19
  • 最后登录2006-05-10
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望5点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
阅读:1329回复:7

难道XP和2000下的IoGetDeviceObjectPointer有区别吗?

楼主#
更多 发布于:2004-05-09 11:15

难道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的驱动还没有加载吗??

如果真的是这样的话,那么应该如何处理呢??

暴晕的问题,请提出你们宝贵的意见。谢谢先^_^
还是我
tanky
驱动牛犊
驱动牛犊
  • 注册日期2002-03-04
  • 最后登录2007-06-08
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
沙发#
发布于: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                
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
板凳#
发布于:2004-05-09 12:31
StartType:3或2
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
dregs
驱动小牛
驱动小牛
  • 注册日期2004-02-19
  • 最后登录2006-05-10
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望5点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-05-09 15:50
谢谢拉
偶的StartType:3或2试过了,还是不行的。
 :(
看来只能说明当执行到IoGetDeviceObjectPointer的时候,串口驱动还没有加载??
还有没有别的可能呢???
比若xp下,scardsvr服务早于serial启动???

如果真的是这样,
Dependencies:指定必须在串口驱动起来后才能加载我的驱动,比如这个Dependencies =TCPIP
应该怎么写?
Dependencies = serial??

还是我
AllenZh
驱动老牛
驱动老牛
  • 注册日期2001-08-19
  • 最后登录2015-11-27
  • 粉丝19
  • 关注10
  • 积分1316分
  • 威望2387点
  • 贡献值7点
  • 好评度321点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-05-09 17:13
应该是启动顺序问题,很简单,你在调用IoGetDeviceObjectPointerde的地方设置一个断点,然后将softice起用boot模式,这样就可以简单的通过device命令来查看你所查询的设备是否启动,当然你有可能需要Windbg或其它工具才可以。
1,承接Windows下驱动/应用开发 2,本人原创虚拟鼠标/键盘,触摸屏,虚拟显卡,Mirror驱动,XP无盘的SCSI虚拟磁盘驱动等 3,windows下有尝技术服务(包括BUG调试,员工培训等) 欢迎深圳和海外企业联系.msn:mfczmh@sina.com
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
5楼#
发布于:2004-05-10 12:00
设置驱动的REINITIALIZE例程,调用IoRegisterDriverReinitialization,如果不合适则再次调用,直到你所以依赖的驱动已经启动为止,嘿嘿......
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
tanky
驱动牛犊
驱动牛犊
  • 注册日期2002-03-04
  • 最后登录2007-06-08
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2004-05-10 17:59
好强,不过俺以前也干过类似的勾当,呵呵
dregs
驱动小牛
驱动小牛
  • 注册日期2004-02-19
  • 最后登录2006-05-10
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望5点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2004-05-11 08:46
吼吼谢谢大家拉
我用的IoRegisterPlugPlayNotification来等待串口启动。^_^
放分 :D
还是我
游客

返回顶部