Service Control Manager 服务管理器简介

在Windows驱动开发中,除了编写sys驱动二进制文件,通常还需要INF文件来配置驱动。但也可以通过ServiceControlManagerAPI直接创建服务来加载驱动。服务程序作为一个控制台程序,需要注册ServiceMain回调函数并响应SCM的控制命令,以实现各种状态转换和服务控制。

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

在windows驱动开发流程中,写完sys驱动binary之后,为了让OS能够正确的从注册表中读取到对应的信息,并且将其load运行起来,还需要编写inf文件来描述配置驱动文件。不过这也不是必须的,可以通过ServiceControlManager直接创建一个指定驱动binary的Service并且启动。如下code:

HANDLE hSCManager;
HANDLE hService;

hSCManager = OpenSCManagerW(
                    NULL, // 可以指定一个远端服务器名
                    SERVICES_ACTIVE_DATABASE, // 目前应当指定SERVICES_ACTIVE_DATABASE
                    SC_MANAGER_CREATE_SERVICE); // 指定该SCM需要进行的操作
if (hSCManager == NULL)
{
    printf("\nOpenSCManager failed");
    return false;
}
    
hService = CreateService(hSCManager, // 之前创建的SCM句柄
                        "Test", // 服务器名
                        "TestDriver", // 显示名
                        SERVICE_START | DELETE | SERVICE_STOP, // 拥有的操作
                        SERVICE_KERNEL_DRIVER, // 创建的服务类型,和普通的服务不同,指明了创建的服务为内核驱动
                        SERVICE_DEMAND_START, // 服务的启动选项,可以选择自动启动,手动启动,以及Demand
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值