欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

驱动学习笔记2-用程序加载NT驱动程序

程序员文章站 2024-02-09 09:32:52
...

NT 驱动 程序 的加载: 1:为NT 驱动 创建新的服务. 2:开启此项服务 3:关闭此项服务 4:删除NT 驱动 创建的服务 (1)打开SCM管理器 SC_HANDLE WINAPI OpenSCManager( __in LPCTSTR lpMachineName,//计算机名称.NULL或者空表示本机 __in LPCTSTR lpDatabaseName,/

NT驱动程序的加载:
1:为NT驱动创建新的服务.
2:开启此项服务
3:关闭此项服务
4:删除NT驱动创建的服务
(1)打开SCM管理器
SC_HANDLE WINAPI OpenSCManager(
__in LPCTSTR lpMachineName,//计算机名称.NULL或者空表示本机
__in LPCTSTR lpDatabaseName,//SCM数据库名称.NULL表示使用缺省数据库
__in DWORD dwDesiredAccess //使用权限.一般为SC_MANAGER_ALL_ACCESS
);
成功返回SCM管理器句柄.否则返回NULL
(2)创建服务
SC_HANDLE WINAPI CreateService(
__in SC_HANDLE hSCManager,//OpenSCManager打开的句柄
__in LPCTSTR lpServiceName,//服务名称.SCM管理器中看到的服务名称
__in LPCTSTR lpDisplayName,
__in DWORD dwDesiredAccess,//打开权限.一般为SERVICE_ALL_ACCESS
__in DWORD dwServiceType, //服务类型(文件系统驱动/普通驱动程序/驱动自加载/)
__in DWORD dwStartType, //启动类型
__in DWORD dwErrorControl, //错误控制码
__in LPCTSTR lpBinaryPathName,//服务程序或者驱动程序的路径
__in LPCTSTR lpLoadOrderGroup,//服务属于哪个用户组
__out LPDWORD lpdwTagId,
__in LPCTSTR lpDependencies, //所依赖的服务的名称
__in LPCTSTR lpServiceStartName, //用户帐户名称
__in LPCTSTR lpPassword //用户口令
);
(3)打开服务
SC_HANDLE WINAPI OpenService(
__in SC_HANDLE hSCManager, //SCM管理器句柄
__in LPCTSTR lpServiceName, //服务名称
__in DWORD dwDesiredAccess //访问权限.一般为SC_MANAGER_ALL_ACCESS
);
(4)控制服务
BOOL WINAPI ControlService(
__in SC_HANDLE hService, //服务句柄
__in DWORD dwControl, //控制码
__out LPSERVICE_STATUS lpServiceStatus //指向一个SERVICE_STATUS 结构体,来接收最后的服务信息
);
(5)关闭SCM管理器
BOOL WINAPI CloseServiceHandle(
__in SC_HANDLE hSCObject
);
完整例程