阅读:1542回复:8
什么在OnStartDevice函数中不能调用Sleep()函数?
我在用driverstudio写一个IO卡的驱动程序,在OnStartDevice()函数中调用了windows API函数Sleep()函数,为什么报错(error C2065: \'Sleep\' : undeclared identifier),该怎么解决呢?请帮帮我吧。
我的email地址是:xiebf6698@yahoo.com.cn |
|
沙发#
发布于:2005-03-11 14:59
这是Win32的API,当然不能在驱动中调用。一般大于50ms的暂停,要用DPC来实现
|
|
|
板凳#
发布于:2005-03-11 16:50
你好,bmyyyud!谢谢你,我第一次做驱动程序,能否给说的稍微更详细一些,或者哪儿能找到相关资料。
|
|
地板#
发布于:2005-03-12 09:00
你好,bmyyyud!谢谢你,我第一次做驱动程序,能否给说的稍微更详细一些,或者哪儿能找到相关资料。 www.sysinternals.com 上有一篇绝佳的相关文章,高级DPC,这样你不仅会用DPC,而且变成高手了 |
|
|
地下室#
发布于: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 |
|
5楼#
发布于:2005-03-14 12:25
谢谢,刚才我用TimerObject实现了Sleep函数的功能,再问你几个问题,好吗? DriverEntry中不能触及硬件 IO卡上有硬件开关和跳线对中断和IO地址进行设置,程序中硬编码,死的,最多放在注册表中一个设置 对IO卡数据的读取操作在Dos中是对某IO地址直接读取 用READ_PORT_UCHAR,READ_PORT_ULONG,READ_PORT_USHORT,READ_PORT_BUFFER_UCHAR等,写的将READ改为WRITE 我看到在控制面板中某些硬件配置属性页中都有设置中断号和IO地址的界面,这些界面如何在编程实现。 做个控制面板的Applet |
|
|
6楼#
发布于:2005-03-16 11:17
1.一般不行,有些功能必须在StartDevice后才行,那时设备才算启动,不过Read/Write一些register是可以的
2和4 资源可以在StartDevice中获得,可参见DDK中的PortIO 3. 可以用READ_REGISTER_UCHAR或READ_PORT_UCHAR类似的函数 |
|
7楼#
发布于:2005-03-22 09:46
可以用WaitforSigleObject(xxx.. , 延时 )实现
|
|
8楼#
发布于:2005-03-22 09:47
谢谢
|
|