阅读:1648回复:17
有没有人做过修改PC机的定时器中断的VXD
我写了个驱动,其中要把定时计数器中断IRQ0修改成5ms一次
写好后,我在编完应用程序方面的代码并调试时才发现,根本不能用CreateFile加载这个 驱动,错误代码为2,但是默认的目录下确实已有我所要加载的VXD文件,并且它生成的定 义里是允许动态加载的,难道是不能用VTOOLSD的中断类重载中断处理程序? 要怎么解决啊,各位高手,给点提示吧!! :( |
|
沙发#
发布于:2003-04-28 20:26
不知道你要干什么。
直接修改8259呢? |
|
板凳#
发布于:2003-04-30 13:26
就是修改PC机定时器8253的通道0的定时时间,原来默认的是55ms中断一次,想把它改成5ms,我VXD已经编好了,只是在应用程序用CreateFile加载它时加载不了,用GetLastError()得到的错误代码是2
|
|
地板#
发布于:2003-04-30 15:16
sorry错成8259了。
反正是在98下,直接去写8253,不要什么vxd了。 不过改成5ms的话,系统怕会很不稳定。 |
|
地下室#
发布于:2003-05-01 09:25
我之所以要改定时器时间常数,是为了控制用的啊
所以还要重写定时器中断的服务程序,实际上还用到其它中断,但这已经不是讨论的问题了 问题是这个VXD不能被加载,是不是不能用VHardWare类重新定义,对定时器中断虚拟化呢? 我在其它论坛上也问过,别人的意见是VXD可能不行,建议改成WDM 不过,我的驱动已经编好,总觉得应该是有方法,只是不得要领或是有未公开的一些相关知识! |
|
5楼#
发布于:2003-05-01 12:22
或许用VSharedHardwareInt?
|
|
6楼#
发布于:2003-05-02 14:07
不会吧,我用的可是系统板上的定时器
又不是有其它硬件要共用它的中断号 |
|
7楼#
发布于:2003-05-02 15:56
因为系统定时一定已经有个vxd来管了
|
|
8楼#
发布于:2003-05-03 13:24
想了想,你要把55ms改成5ms?那应该是修改8253来实现,可是我不太明白的是,你做一个响应中断的vxd?在中断里面改8253吗? :o
|
|
9楼#
发布于:2003-05-03 19:50
当然是在VXD动态加载时重写8253的定时常数了
在中断服务程序里写入自已要的控制,与应用程序通信的回调函数等 你试试吧,有没有不做过相关的? |
|
10楼#
发布于:2003-05-03 21:06
详细记不清楚了,上次在98下,用VSharedHardwareInt可以挂键盘的1和mouse的12,VHardWare就不行。
|
|
11楼#
发布于:2003-05-04 09:04
怎么不行?
是不能加载还是?? |
|
12楼#
发布于:2003-05-04 14:28
说了不记得了,好久了 :D
你自己一试就知道了啊,很快啊,我进98不方便了现在。 |
|
13楼#
发布于:2003-05-05 00:19
我用指定的路径加载,可以加载这个VXD了
不过在应用程序与VXD通信时出错了 就是DeviceIOCtrol函数 比如: if (!DeviceIoControl(hDevice,FLAGBEGIN,&appsecs0,sizeof(long),NULL,NULL,0,NULL)) {::MessageBox(hWnd,\"数据传送失败\",\"错误\",MB_OK); return 0; } 这里传送就失败了 不知道怎么回事! |
|
14楼#
发布于:2003-05-05 12:09
那用si跟进去看看,是哪句的问题,就知道了啊
|
|
15楼#
发布于:2003-05-05 16:35
晕,不就是这句吗?
|
|
16楼#
发布于:2003-05-05 16:47
我也晕 :D
这是你的app的一句,跟到你的vxd对应的函数去看看啊。 |
|
17楼#
发布于:2003-05-08 11:04
注意,已经找到原因
不能用指定路径的方法,即使指定,也要在前面加:\\\\\\\\.\\\\ |
|