xiebf
驱动牛犊
驱动牛犊
  • 注册日期2005-03-11
  • 最后登录2006-10-13
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望2点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
阅读:1542回复:8

什么在OnStartDevice函数中不能调用Sleep()函数?

楼主#
更多 发布于:2005-03-11 09:59
我在用driverstudio写一个IO卡的驱动程序,在OnStartDevice()函数中调用了windows API函数Sleep()函数,为什么报错(error C2065: \'Sleep\' : undeclared identifier),该怎么解决呢?请帮帮我吧。
我的email地址是:xiebf6698@yahoo.com.cn
bmyyyud
驱动老牛
驱动老牛
  • 注册日期2002-02-22
  • 最后登录2010-01-21
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望130点
  • 贡献值0点
  • 好评度106点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2005-03-11 14:59
这是Win32的API,当然不能在驱动中调用。一般大于50ms的暂停,要用DPC来实现
滚滚长江东逝水 浪花淘尽英雄 是非成败转头空 青山依旧在 几度夕阳红 白发渔樵江渚上 惯看秋月春风 一壶浊酒喜相逢 古今多少事 尽付笑谈中
xiebf
驱动牛犊
驱动牛犊
  • 注册日期2005-03-11
  • 最后登录2006-10-13
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望2点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2005-03-11 16:50
你好,bmyyyud!谢谢你,我第一次做驱动程序,能否给说的稍微更详细一些,或者哪儿能找到相关资料。
bmyyyud
驱动老牛
驱动老牛
  • 注册日期2002-02-22
  • 最后登录2010-01-21
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望130点
  • 贡献值0点
  • 好评度106点
  • 原创分0分
  • 专家分0分
地板#
发布于:2005-03-12 09:00
你好,bmyyyud!谢谢你,我第一次做驱动程序,能否给说的稍微更详细一些,或者哪儿能找到相关资料。
 

www.sysinternals.com
上有一篇绝佳的相关文章,高级DPC,这样你不仅会用DPC,而且变成高手了
附件名称/大小 下载次数 最后更新
2005-03-12_DPC.rar (72KB)  12
滚滚长江东逝水 浪花淘尽英雄 是非成败转头空 青山依旧在 几度夕阳红 白发渔樵江渚上 惯看秋月春风 一壶浊酒喜相逢 古今多少事 尽付笑谈中
xiebf
驱动牛犊
驱动牛犊
  • 注册日期2005-03-11
  • 最后登录2006-10-13
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望2点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2005-03-14 11:16
谢谢,刚才我用TimerObject实现了Sleep函数的功能,再问你几个问题,好吗?
1. 我需要对IO卡的某些寄存器进行初始化,是在DriverEntry函数中还是在OnStartDevice函数中进行,在哪个函数中合适?
2. IO卡上有硬件开关和跳线对中断和IO地址进行设置,那么在程序中如何获取中断号和IO地址?
3 对IO卡数据的读取操作在Dos中是对某IO地址直接读取,在驱动程序中如何读写呢?
4 我看到在控制面板中某些硬件配置属性页中都有设置中断号和IO地址的界面,这些界面如何在编程实现。
xiebf6698@yahoo.com.cn
bmyyyud
驱动老牛
驱动老牛
  • 注册日期2002-02-22
  • 最后登录2010-01-21
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望130点
  • 贡献值0点
  • 好评度106点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2005-03-14 12:25
谢谢,刚才我用TimerObject实现了Sleep函数的功能,再问你几个问题,好吗?
1. 我需要对IO卡的某些寄存器进行初始化,是在DriverEntry函数中还是在OnStartDevice函数中进行,在哪个函数中合适?
2. IO卡上有硬件开关和跳线对中断和IO地址进行设置,那么在程序中如何获取中断号和IO地址?
3 对IO卡数据的读取操作在Dos中是对某IO地址直接读取,在驱动程序中如何读写呢?
4 我看到在控制面板中某些硬件配置属性页中都有设置中断号和IO地址的界面,这些界面如何在编程实现。
xiebf6698@yahoo.com.cn

DriverEntry中不能触及硬件
IO卡上有硬件开关和跳线对中断和IO地址进行设置,程序中硬编码,死的,最多放在注册表中一个设置
对IO卡数据的读取操作在Dos中是对某IO地址直接读取
用READ_PORT_UCHAR,READ_PORT_ULONG,READ_PORT_USHORT,READ_PORT_BUFFER_UCHAR等,写的将READ改为WRITE
我看到在控制面板中某些硬件配置属性页中都有设置中断号和IO地址的界面,这些界面如何在编程实现。
做个控制面板的Applet
滚滚长江东逝水 浪花淘尽英雄 是非成败转头空 青山依旧在 几度夕阳红 白发渔樵江渚上 惯看秋月春风 一壶浊酒喜相逢 古今多少事 尽付笑谈中
changys
驱动小牛
驱动小牛
  • 注册日期2004-11-15
  • 最后登录2008-08-21
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望15点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2005-03-16 11:17
1.一般不行,有些功能必须在StartDevice后才行,那时设备才算启动,不过Read/Write一些register是可以的

2和4 资源可以在StartDevice中获得,可参见DDK中的PortIO

3. 可以用READ_REGISTER_UCHAR或READ_PORT_UCHAR类似的函数
qinxg
驱动小牛
驱动小牛
  • 注册日期2002-11-15
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分37分
  • 威望27点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2005-03-22 09:46
可以用WaitforSigleObject(xxx.. , 延时 )实现
xiebf
驱动牛犊
驱动牛犊
  • 注册日期2005-03-11
  • 最后登录2006-10-13
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望2点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2005-03-22 09:47
谢谢
游客

返回顶部