Win2000下,VC环境tubro C的interrupt()不能用,该用什么函数设置中断向量?!

解决方案 »

  1.   

    晕,windows下面写中断服务程序不是这么写的,tubro C只能写DOS下面的,在windows下需要写驱动程序来完成,你可以看看DDK上的介绍,或者一些驱动开发的书上有介绍,如
     Programming WDM 作者:waltoney
      

  2.   

    如果使用硬件中断就必须编写驱动,标准的办法是采用微软的DDK。Win98和WinNT 4.0/5.0的DDK可以从http://www.microsoft.com/ddk免费下载。从你的电子邮件来看,你是教育网的用户,那么你可以从教育网的一些FTP站点(如北大图书馆)下载到Win95/98/NT的DDK,我们下面提到的一些软件也可以找到。Win95 DDK主要是采用汇编的。如果你对汇编不熟悉,当然是使用VToolsD(http://www.vireo.com/)更好些,这个软件包允许你使用C/C++编写驱动,但软件包比较贵(约四、五百美金)。另外,你可以在http://zealsoft.nease.net/cn/ntport/或http://zealsoft.nease.net/cn/memaccess/找到与硬件有关的软件,这些软件允许你不编写驱动,直接在VC中调用驱动,如果你的编程不复杂,也可以使用。 
         
        相关书籍: 
        《WINDOWS设备驱动程序技术内幕 》 
        《实用技术:WINDOWS NT与WINDOWS 2000设备驱动及开发》 
        《Windows 设备驱动程序(VXD 与 WDM)开发实务 含盘》 
        《虚拟设备驱动程序开发起步与进阶》 
        《WIN 9X虚拟设备驱动程序编程指南》
      

  3.   

    多谢: AthlonxpX86 approach() ,那只要直接与硬件相关的都要写驱动吗?比如要读写硬件上的寄存器、RAM等。
      

  4.   

    读写寄存器应该可以把,关键是sidt指令在winNT下是保护指令,所以你没办法得到中断向量地址。网上也有介绍window2000得到ring0的方法,不过比较烦,没意义,还不如写驱动。另外得到局部描述符表和全局描述符表也是保护指令,所以好像不能直接把虚拟地址转换为物理地址。windows9x的操作系统就没有这个限制。
      

  5.   

    to  injb(好色一代男);就像楼上兄弟说的,写中断服务程序还是用驱动程序的方法作吧,否则会很难,如果只是简单的写IO端口寄存器或者物理内存,可以把别人写好的驱动程序直接拿来用,比如winio,另外2000中可以直接用_outp/_outpw/_outpd _inp/_inpw/_inpd访问端口,不过这似乎也是使用了2000自带的驱动程序,而且这些访问的是虚拟端口,通过映射来访问真实物理端口,所以可能会有限制,最好还是自己学这写驱动吧