用vc加载 自己 的 驱动 程序 主要分为以下几个步骤: 1、加载 驱动 服务 主要要用到以下几个函数 SC_HANDLE WINAPI OpenSCManagerA( __in_optLPCSTRlpMachineName, __in_optLPCSTRlpDatabaseName, __inDWORDdwDesiredAccess ); //创建 驱动 服务 SC_HANDLE WI
用vc++加载自己 的驱动 程序 主要分为以下几个步骤:
1、加载驱动 服务
主要要用到以下几个函数
SC_HANDLE
WINAPI
OpenSCManagerA(
__in_opt LPCSTR lpMachineName,
__in_opt LPCSTR lpDatabaseName,
__in DWORD dwDesiredAccess
);
//创建驱动 服务
SC_HANDLE
WINAPI
CreateServiceA(
__in SC_HANDLE hSCManager,
__in LPCSTR lpServiceName,
__in_opt LPCSTR lpDisplayName,
__in DWORD dwDesiredAccess,
__in DWORD dwServiceType,
__in DWORD dwStartType,
__in DWORD dwErrorControl,
__in_opt LPCSTR lpBinaryPathName,
__in_opt LPCSTR lpLoadOrderGroup,
__out_opt LPDWORD lpdwTagId,
__in_opt LPCSTR lpDependencies,
__in_opt LPCSTR lpServiceStartName,
__in_opt LPCSTR lpPassword
);
//打开驱动 服务
SC_HANDLE
WINAPI
OpenServiceA(
__in SC_HANDLE hSCManager,
__in LPCSTR lpServiceName,
__in DWORD dwDesiredAccess
);
//启动驱动 服务
BOOL
WINAPI
StartServiceA(
__in SC_HANDLE hService,
__in DWORD dwNumServiceArgs,
__in_ecount_opt(dwNumServiceArgs)
LPCSTR *lpServiceArgVectors
);
首先调用OpenSCManager函数 建立一个连接到服务控制管理器,然后再调用CreateService创建服务最后调用OpenService和StartService分别打开服务和启动服务。
当服务启动后就可以用CreateFile函数访问驱动 程序 了代码如下:
1.启动驱动 服务程序
//启动驱动 服务
void LoadDriver()
{
SC_HANDLE hSCManager = NULL;
SC_HANDLE hService = NULL;
SC_HANDLE hService1 = NULL;
hSCManager = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
hService = CreateService(hSCManager,
MYWINRIN0, //这是驱动 服务名称 这里为"MyWinRing0" 可以自定义任意名称
MYWINRIN0, //这是驱动 服务显示名称,可以自定义任意名称,这里我选择和上面一样
SERVICE_ALL_ACCESS,
SERVICE_KERNEL_DRIVER,
SERVICE_DEMAND_START,
SERVICE_ERROR_NORMAL,
gDriverPath, //驱动 存放的路径,这里和应用程序 同目录
NULL,
NULL,
NULL,
NULL,
NULL
);
CloseServiceHandle(hService); //上面创建成功后就关闭掉这个句柄
hService1 = OpenService(hSCManager, MYWINRIN0, SERVICE_ALL_ACCESS); //打开上面创建的服务,名字为"MyWinRing0"
int result=StartService(hService1, 0 , NULL); //启动服务
CloseServiceHandle(hSCManager);
CloseServiceHandle(hService1);
}
2.打开
驱动 服务
//驱动 服务启动后,打开驱动
BOOL OpenDriver()
{
char message[ 2 5 6 ];
gHandle = CreateFile(
_T("\\\\.\\") OLS_DRIVER_ID, //这个地方的名字必须是驱动 程序 里面IoCreateDevice函数创建设备是 使用的名字
GENERIC_READ | GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL
);
int code=GetLastError();
if (gHandle == INVALID_HANDLE_VALUE)
{
return FALSE;
}
return TRUE;
}
3.停止
驱动
//停止驱动
BOOL StopDriver(SC_HANDLE hSCManager,LPCTSTR DriverId)
{
SC_HANDLE hService = NULL;
BOOL rCode = FALSE;
SERVICE_STATUS serviceStatus;
DWORD error = NO_ERROR;
hService = OpenService(hSCManager, DriverId, SERVICE_ALL_ACCESS);
if (hService != NULL)
{
rCode = ControlService(hService, SERVICE_CONTROL_STOP, &serviceStatus);
error = GetLastError();
CloseServiceHandle(hService);
}
return rCode;
}
4.卸载
驱动
//卸载驱动
BOOL RemoveDriver(SC_HANDLE hSCManager, LPCTSTR DriverId)
{
SC_HANDLE hService = NULL;
BOOL rCode = FALSE;
hService = OpenService(hSCManager, DriverId, SERVICE_ALL_ACCESS);
if (hService == NULL)
{
rCode = TRUE;
}
else
{
rCode = DeleteService(hService);
CloseServiceHandle(hService);
}
return rCode;
}
完整示例
程序 下载:http://download.csdn.net/detail/xiaibiancheng/5449887
Déclaration: Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn