Windows内核编程(二)内核驱动运行,调试

本文介绍了如何在Windows系统中运行和调试内核驱动,重点讨论了由于签名问题导致的64位系统限制及两种解决方案:设置调试模式和禁用驱动签名校验。此外,还讲解了服务管理器的基本操作,包括服务的创建、打开、启动、停止、删除等,并提供了相关API的使用示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

内核驱动运行、调试

驱动的运行

由于Windows数字签名的原因,没有签名或者使用测试签名的都不能放到64位系统上运行。
两个解决办法。
一、将系统设置为调试模式
二、关闭系统的驱动签名校验。

服务的基本操作

服务管理器:管理系统上的所有服务,创建、注册、修改、启动服务。
所以我们编写程序的时候,首先要打开服务管理器。其API为:

SC_HANDLE WINAPI OpenSCManager(
	LPCTSTR lpMachineName, //字符串常量,表示机器名字,传NULL就是本机器
	LPCTSTR lpDatebaseName,	//同,数据库的名字,NULL代表打开的是活动数据库
	DWORD dwDesiredAccess	//权限
	);

权限一般有 SC_MANAGER_CREATE_SERVICE 创建服务
SC_MANAGER_ENUMERATE_SERVICE 枚举服务
SC_MANAGER_ALL_ACCESS 一切权限
函数的返回值是一个SC_HANDLE 为服务管理器的句柄

关闭句柄的函数

CloseServiceHandle(SC_HANDLE PARAM);

创建一个服务使用的函数

SC_HANDLE WINAPI CreateService(
	SC_HANDLE hSCManager,	//服务管理器句柄
	LPCTSTR lpServiceName,	//创建的服务名字,唯一性
	LPCTSTR lpDisplayName,	//服务的显示名字,不唯一
	DWORD dwDesiredAccess,	//服务的权限,见下方
	DWORD dwServiceType,	//创建何种类型的服务,见下方
	DWORD DWStartType,		//服务的启动方式
	DWORD dwErrorControl,	//错误控制
	LPCTSTR lpBinaryPathName,	//服务对应的可执行文件的全路径,也就是sys文件路径
	LPCTSTR lpLoadOrderGroup,	//服务所在分组的名字
	LPDWORD lpdwTagId,			//分组内该服务的启动顺序
	LPCTSTR lpDependencies,		//需要依赖其他服务名的列表
	L
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值