|
03年时闲着没事,用DDK写了一个驱动程序,专门用以挂接Windows硬件中断程序。
本程序用以示范如何挂接windows系统下的硬件中断(如并口中断,串口中断等等),包含了驱动程序源代码和上层应用程序代码。驱动程序是用DDK编写的。使用前请参看如下说明:
1.包含的文件:
将RegIsaInt.sys拷贝到WINNT\system32\drivers\目录下
2.运行RegIsaIntExe.exe.
软件接口:
提供了一个类:CInstallSys
成员函数:
BOOL CInstallSys::ConnectInterrupt(unsigned short m_IrqNum, BOOL m_bTrigManner)
入口参数:
unsigned short m_IrqNum:需要挂接的IRQ号。
BOOL mbTrigManner:为真,则为边沿触发即Latched;为假,则为电平触发即level sensitive.
返回值为TRUE,则成功挂接中断,否则失败。
BOOL CInstallSys::DisConnectInt(unsigned short m_IrqNum, BOOL m_bTrigManner)
入口参数,可以任意输入,留着以后扩展和改动。
返回值没有作用。
成员变量:
HANDLE InterruptEvent;
作用:
提供了一个事件变量,用于通知应用程序,一个硬件中断的到来。
举例如下:
/*生成一个对象*/
CInstallSys isa_int;
/*挂接中断*/
if(isa_int.ConnectInterrupt(7,TRUE)==TRUE)
{
/*create a new process to monitor the event object*/
AfxBeginThread(ThreadListen,GetSafeHwnd(),THREAD_PRIORITY_NORMAL);
}
else
{
}
/*监听事件*/
UINT ThreadListen(LPVOID pParam)
{
DWORD wait_state;
while(bListen)
{
wait_state=WaitForSingleObject(isa_int.InterruptEvent,5000);
if(wait_state==WAIT_OBJECT_0)
{
ulIntTimes++;
SendMessage((HWND)pParam,WM_EVENT_COME,ulIntTimes,0);
}
}
return true;
}
/*断开连接*/
isa_int.DisConnectInt(7,TRUE);/*可以任意输入两个参数*/
/*结束*/
上位机示例程序ourdev_485800.rar(文件大小:36K) (原文件名:RegIsaIntExe.rar)
驱动程序源码ourdev_485801.rar(文件大小:101K) (原文件名:sys.rar) |
|