1.windows主要系统组件
1.对象管理器
用来管理各种对象,包括文件,设备,注册表键值,进程,线程,事件,符号链接,互斥体,信号量。
可以进行对象的创建和销毁,跟踪分配给每一个进程的资源,某对象的访问权限。
通常对应的api是Ob开头的
2. 内存管理器
对内存进行分配与释放。支持内存映射文件,共享内存,写时复制。
对应的ap以Mm开头
3.进程线程管理器
操作进程和线程的功能。
以Ps开头的api
4.I/O管理器
负责用户层程序与设备驱动程序之间的交互。他们之间的交互主要通过IRP(I/O请求包)实现。
以Io开头的api
5.配置管理器
主要用来管理注册表。
驱动可以通过注册回调函数来获取注册表变化情况
以Cm开头的api
6.安全监视器
windows通过acl判断哪些对象有哪些安全权限,确保操作没有违反安全策略
以Se开头的api
2.重要概念术语
1.符号链接
在内核中,虽然设备对象有名字,但是只能在内核中使用,用户层程序需要通过符号链接来对其访问
2.IRQL
请求中断级别。即处于某个级别的函数不能调用比其调用者级别更高的函数。反之可以。
级别排序:PASSIVE_LEVEL < APC_LEVEL < DISPATCH_LEVEL < DIRQL
3.IRP
是I/O管理器与驱动进行通信的基础数据结构,当用户层程序发起I/O请求,I/O管理器创建并根据请求设置IRP的值,发送给目标驱动
3. 重要数据结构及其常用字段
typedef struct _DRIVER_OBJECT { PDEVICE_OBJECT DeviceObject; //指向设备对象 PDRIVER_EXTENSION DriverExtension; //指向设备拓展对象 UNICODE_STRING DriverName; //指向驱动名字 PFAST_IO_DISPATCH FastIoDispatch; //快速I/O函数入口 PDRIVER_INITIALIZE DriverInit; //指向驱动入口函数 PDRIVER_UNLOAD DriverUnload; //指向驱动卸载函数 PDRIVER_DISPATCH MajorFunction[IRP_MJ_MAXIMUM_FUNCTION + 1]; //设置分发函数
//... 还有其他一些不重要的字段
} DRIVER_OBJECT;
。。。。。