Windows内核

1.C语言调用约定,要求在声明函数时用__cdecl对函数进行修饰. void  __cdecl  Foo(int a,int b); C语言调用会在目标文件中产生一个符号来代表这个函数,此符号的形式为下划线+函数名,且函数体以ret形式返回。 push    11223344h push    12345678h c […]

1.Windows将内核模式运行在CPU的Ring0层,而将用户模式运行在CPU的Ring3层,Ring0层和Ring3层是CPU上的概念,而用户模式和内核模式是操作系统上的概念。 2.windows架构简图 Win32子系统将API函数转化为Native API函数。在Native API接口中,已经没有了子系统的概念,他将这种调用转化为系统服务函数的调用。其中,Native API穿过了用户模 […]

1.Windows驱动程序分为两类,一类是不支持即插即用功能的NT式的驱动程序;另一类是支持即插即用功能的WDM式的驱动程序。   2.NT式的驱动程序要导入的头文件时NTDDK.H,而WDM式的驱动要导入的头文件为WDM.H.   3.DriverEntry需要放在INIT标志的内存中。INIT标志指明该函数只是在加载的时候需要载入内存,而当驱动程序加载成功后,该函数可以从内 […]

一、时间与定时器 1.获得系统自启动后经历的毫秒数 void MyGetTickCount (PULONG msec){LARGE_INTEGER tick_count;ULONG myinc = KeQueryTimeIncrement();KeQueryTickCount(&tick_count);tick_count.QuadPart *= myinc;tick_count.Quad […]

1.注册表的打开 和在应用程序中编程的方式类似,注册表是一个巨大的树形结构。操作一般都是打开某个子键。子键下有若干个值可以获得。每一个值有一个名字。值有不同的类型。一般需要查询才能获得其类型。子键一般用一个路径来表示。和应用程序编程的一点重大不同是这个路径的写法不一样。一般应用编程中需要提供一个根子键的句柄。而驱动中则全部用路径表示。相应的有一张表表示如下: 实际上应用程序和驱动程序很大的一个不同 […]

从本章开始讲解Windows内核编程的基础知识。 一、字符串的处理 1.字符串的定义 在驱动开发中,,一般不再用空来表示一个字符串的结束,而是定义了如下的一个结构: typedef  struct _UNICODE_STRING{    USHORT   Length;      &nbs […]