// test7.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
bool load_sysfile(char *theDriverName)
{
char aPath[1024];
char aCurrentDirectory[515];
SC_HANDLE sh = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
if(!sh)
{
return false;
}
GetCurrentDirectory( 512, aCurrentDirectory);
_snprintf(aPath,
1022,
"%s\\%s.sys",
aCurrentDirectory,
theDriverName);
printf("加载路径:%s\n",aPath);
SC_HANDLE rh = CreateService(sh,
theDriverName,
theDriverName,
SERVICE_ALL_ACCESS,
SERVICE_KERNEL_DRIVER,
SERVICE_DEMAND_START,
SERVICE_ERROR_NORMAL,
aPath,
NULL,
NULL,
NULL,
NULL,
NULL);
if(!rh)
{
if (GetLastError() == ERROR_SERVICE_EXISTS)
{
// service exists
rh = OpenService(sh,
theDriverName,
SERVICE_ALL_ACCESS);
if(!rh)
{
CloseServiceHandle(sh);
return false;
}
}
else
{
CloseServiceHandle(sh);
return false;
}
}
// start the drivers
if(rh)
{
if(0 == StartService(rh, 0, NULL))
{
if(ERROR_SERVICE_ALREADY_RUNNING == GetLastError())
{
// no real problem
}
else
{
CloseServiceHandle(sh);
CloseServiceHandle(rh);
return false;
}
}
CloseServiceHandle(sh);
CloseServiceHandle(rh);
}
return true;
}
bool unload_sys(char* theDriverName){
char aPath[1024];
char aCurrentDirectory[515];
SERVICE_STATUS SvrSta;
SC_HANDLE sh = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
if(!sh)
{
return false;
}
GetCurrentDirectory( 512, aCurrentDirectory);
_snprintf(aPath,
1022,
"%s\\%s.sys",
aCurrentDirectory,
theDriverName);
//MessageBox(NULL,aPath,"",0);
printf("卸载路径:%s\n",aPath);
SC_HANDLE hService= OpenService(sh,theDriverName, SERVICE_STOP | DELETE);
if (hService==NULL){
CloseServiceHandle(sh);
return false;
}
if (!ControlService(hService, SERVICE_CONTROL_STOP, &SvrSta)){
}else{
}
DeleteService(hService);
CloseServiceHandle(hService);
CloseServiceHandle(sh);
return true;
}
int main(int argc, char* argv[])
{
char sSysName[]="HelloDDK";
printf("%s.sys\n",sSysName);
if(load_sysfile( sSysName ) == TRUE)
{
printf("加载驱动%s成功!\n", ( sSysName ));
}
else
{
printf("加载驱动%s失败!\n", ( sSysName ));
}
printf("按任意键卸载驱动!\n");
getchar();
if(unload_sys( sSysName ) == TRUE)
{
printf("卸载驱动%s成功!\n", ( sSysName ));
}
else
{
printf("卸载驱动%s失败!\n", ( sSysName ));
}
printf("\n\n");
return 0;
}
load_sysfile;CreateService
最新推荐文章于 2024-01-12 16:27:49 发布