以下内容全部来自《Windows驱动开发技术详解》,作者张帆、史彩成等,属摘抄型笔记。
///
PS:因为驱动加载涉及到一小部分代码,索性单出一篇文章来做笔记吧,比较清楚。
驱动程序的动态加载主要由服务控制管理程序(Service Control Manager,SCM)系统组件完成。Windows服务可以在系统启动时加载,用户需要在服务控制平台开启或者关闭服务。
加载和卸载NT驱动分为以下步骤:
1.为NT驱动创建新的服务
2.开启此项服务
3.关闭此项服务
4.删除NT驱动所创建的服务
SC_HANDLE OpenSCManager( LPCTSTR lpMachineName, // computer name
LPCTSTR lpDatabaseName, // SCM database name
DWORD dwDesiredAccess // access type);
lpMachineName:指定计算机名称,如果是NULL代表本机
lpDaabaseName:指定SCM数据库名称,NULL代表缺省数据库
dwDwsireAccess:使用权限,一般设置为SC_MANAGER_ALL_ACCESS
返回值,如果成功返回SCM管理器的句柄,如果失败返回NULL
SC_HANDLE CreateService( SC_HANDLE hSCManager, // handle to SCM database
LPCTSTR lpServiceName, // name of service to start
LPCTSTR lpDisplayName, // display name
DWORD dwDesiredAccess, // type of access to service
DWORD dwServiceType, // type of service
DWORD dwStartType, // when to start service
DWORD dwErrorControl, // severity of service failure
LPCTSTR lpBinaryPathName, // name of binary file
LPCTSTR lpLoadOrderGroup, // name of load ordering group
LPDWORD lpdwTagId, // tag identifier
LPCTSTR lpDependencies, // array of dependency names
LPCTSTR lpServiceStartName, // account name
LPCTSTR lpPassword // account password);
hSCManager:SCM管理器句柄