1.驱动都是Ring0级别的吗
你说的应该是Windows驱动,Intel的CPU将特权级别分为4个级别:RING0,RING1,RING2,RING3。
Windows只使用其中的两个级别RING0和RING3,RING0只给操作系统用,RING3谁都能用。
Windows驱动,需要用到特殊的编译环境DDK。
DDK的安装和使用,网上有很多资料,百度或者google一下OK了。
C还是C++,都可以的。
(如果你知道硬件设备的地址,可以通过MapPhysToLin类似的函数,在应用程序中,直接操作硬件,达到“驱动”的目的,这个是不太专业的。)
真正想做Windows驱动编写,还是按照DDK来做,是最合适的。
2.ring0的介绍
Intel的x86处理器是通过Ring级别来进行访问控制的,级别共分4层,RING0,RING1,RING2,RING3。Windows只使用其中的两个级别RING0和RING3。RING0层拥有最高的权限,RING3层拥有最低的权限。按照Intel原有的构想,应用程序工作在RING3层,只能访问RING3层的数据,操作系统工作在RING0层,可以访问所有层的数据,而其他驱动程序位于RING1、RING2层,每一层只能访问本层以及权限更低层的数据。如果普通应用程序企图执行RING0指令,则Windows会显示“非法指令”错误信息。尽管有CPU的特权级别作保护,遗憾的是WINDOW98本身漏洞很多,使用Windows 98的系统一天死机n回也是正常的