已我所知
1.创建一个服务(通过注册表)
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\XXX
(ps:通过枚举这个表可以得到所有服务 还能知道他们的类型)
其中GROUP与Start决定了驱动加载的早晚
若Start相同 则根据在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GroupOrderList顺序驱动
GROUP的值就是HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GroupOrderList下的键名启动Start
Start:
0 == 由核心装载器装载 1 == 由I/O子系统装载 2 == 自动启动 3 == 手工启动 4 == 禁止启动
Start 值分0、1、2、3、4,数值越小就越早启动,SERVICE_BOOT_START(0)是内核刚刚初始化之后,此时加载的都是与系统核心有关的重要的驱动程序,例如磁盘驱动;SERVICE_SYSTEM_START(1)稍晚一些;
SERVICE_AUTO_START(2)是在登录界面出现的时候开始,如果登录较快,很可能驱动还没有加载就登录进去了;
SERVICE_DEMAND_START(3)是在需要的时候动态加载;SERVICE_DISABLED(4)是不加载,要加载之前必须把Start值改为小于4的值。Type:如下 应用程序一般10(百度),1驱动模块
/*
“DisplayName”,字符串值,对应服务名称;
“Descrīption”,字符串值,对应服务描述;
“ImagePath”,字符串值,对应该服务程序所在的路径;
“ObjectName”,字符串值,值为“LocalSystem”,表示本地登录;
“ErrorControl”,DWORD值,值为“1”;
“Start”,DWORD值,值为2表示自动运行,值为3表示手动运行,值为4表示禁止;
“Type”,DWORD值,应用程序对应10,其他对应20。类型如下:
#define SERVICE_KERNEL_DRIVER 0×00000001 //内核模块
#define SERVICE_FILE_SYSTEM_DRIVER 0×00000002 //文件系统驱动
#define SERVICE_ADAPTER 0×00000004 //保留
#define SERVICE_RECOGNIZER_DRIVER 0×00000008 //保留以下来自百度
SERVICE_WIN32_OWN_PROCESS
0×00000010
运行于独立进程的服务程序
SERVICE_WIN32_SHARE_PROCESS
0×00000020
被多个进程共享的服务程序。
若使用了SERVICE_WIN32_OWN_PROCESS 或 SERVICE_WIN32_SHARE_PROCESS且使用LocalSystem帐号来运行该服务程序,则还可以附加使用下面的值:
值
含义
SERVICE_INTERACTIVE_PROCESS
0×00000100
该服务可以与桌面程序进行交互操作。
*/2.对象管理器生成驱动对象(DriverObject)并传递给DriverEntry(),执行DriverEntry入口函数
3.创建控制设备对象
4.创建控制设备符号链接(对RING3可见)
5.如果是过滤驱动,创建过滤设备对象,绑定
5.注册分发函数
6其它初始化动作
驱动是如何运行的
最新推荐文章于 2020-10-24 10:54:58 发布