
Windows驱动开发
s030501408
这个作者很懒,什么都没留下…
展开
-
用户模式与内核模式
<br />谈到用户模式与内核模式,一般要与CPU的特权层联系起来。<br />CPU一般有多个特权层,例如:Intel的386CPU有四个特权层,分别是Ring 0、Ring 1、Ring 2、Ring 3。其中,Ring 0的特权级别最高,可以执行任意的代码,Windows的内核模式就运行在该级别;Ring 3的特权级别最低,Windows的用户模式运行在该级别。<br />下图为CPU特权层与操作系统两种模式的关系早期的DOS系统是没有用户模式与内核模式的区别,所有程序都运行在Ring 0特权层。应用原创 2010-08-11 11:40:00 · 1102 阅读 · 0 评论 -
Windows系统架构图
<br />(1)Native APINative API函数一般都是在Win32 API上加前Nt,如Win32 API下的CreateFile对应的Native API的函数为NtCreateFile。所有的Native API都在Ntdll.dll中实现,而Win32子系统的三个核心dll文件都依赖于Ntdll.dll。Win32 API从Windows NT到Windows 2000,再到Windows XP基本保持不变,变化的是只是Native API。(2)系统调用Native API从用户模式原创 2010-08-11 12:02:00 · 7693 阅读 · 0 评论 -
调用约定
<br />Windows驱动程序的编写中,需要使用标准调用约定(_stdcall),尤其是入口函数(DriverEntry):系统会寻找_DriverEntry@8作为驱动程序的入口点。<br />若用C语言调用约定(_cdecl)则会将DriverEntry编译成_DriverEntry,而不是_DriverEntr@8,那么会导致链接错误。<br /> <br />在默认情况下,VC或DDK提供的编译器会根据源文件的扩展名,来判断使用哪种试编译。当扩展名为.cpp时,编译器会用C++方式编译;当扩展名原创 2010-08-11 14:23:00 · 759 阅读 · 0 评论 -
查看调试信息
<br />驱动程序运行在内核模式下,很难像一般Win32程序一样进行调试。一般来说,驱动程序的调试主要有两个途径:在关键的地方打印出调试信息调用内核调试工具,诸如Softice或WinDbg等,进行内核调试<br />对于第一种方法,用到的是KdPrint,它并不是函数,而是宏,类似于MFC下的TRACE。编写驱动程序时,应尽量使用KdPrint,因为该宏只在Checked版本(即Debug)下起作用,而在Free版本(即Release)下不起作用。<br />注意:因为KdPrint为宏,使用时要用双括原创 2010-08-11 14:38:00 · 954 阅读 · 0 评论