读书人

加载与卸载驱动服务,该如何解决

发布时间: 2013-07-11 15:38:46 作者: rapoo

加载与卸载驱动服务


void CDriverLoadDlg::OnBnClickedButton1()
{
SC_HANDLE sc_hManager = NULL;
SC_HANDLE sc_hResult = NULL;
sc_hManager = OpenSCManager (NULL,NULL,SC_MANAGER_ALL_ACCESS);
if(NULL == sc_hManager)
{
AfxMessageBox("打开服务管理器失败!");
return;
}
char strPath[MAX_PATH];
GetCurrentDirectory (MAX_PATH,strPath);
strcat(strPath,"\\ddktest.sys");
sc_hResult = CreateService(sc_hManager,
"MyRWMemory",
"MyRWMemory",
SERVICE_ALL_ACCESS,
SERVICE_KERNEL_DRIVER,
SERVICE_DEMAND_START,
SERVICE_ERROR_IGNORE,
strPath,
NULL,
NULL,
NULL,
NULL,
NULL);
int i = GetLastError();
if(NULL == sc_hResult )
{
if(i == ERROR_SERVICE_EXISTS)
{
AfxMessageBox("服务已经存在!");
}
else
{
AfxMessageBox("创建服务失败,请确定ddktest.sys在当前目录");
}
CloseServiceHandle(sc_hManager);
return;
}
else
{
sc_hResult = OpenService(sc_hManager,"MyRWMemory",SERVICE_ALL_ACCESS);
if(NULL == sc_hResult)
{
AfxMessageBox("打开服务失败!");
CloseServiceHandle(sc_hResult);
CloseServiceHandle(sc_hManager);
return;
}

if(StartService(sc_hResult,NULL,NULL))
{
AfxMessageBox("加载驱动成功!");
CloseServiceHandle(sc_hResult);
CloseServiceHandle(sc_hManager);

}
else
{
int i = GetLastError();
AfxMessageBox("加载驱动失败!");
CloseServiceHandle(sc_hResult);
CloseServiceHandle(sc_hManager);
}
}
}

void CDriverLoadDlg::OnBnClickedButton2()
{
SC_HANDLE sc_hManager = NULL;
SC_HANDLE sc_hResult = NULL;
sc_hManager = OpenSCManager (NULL,NULL,SC_MANAGER_ALL_ACCESS);
if(NULL == sc_hManager)
{
AfxMessageBox("打开服务管理器失败!");
return;
}

sc_hResult = OpenService(sc_hManager,"MyRWMemory",SERVICE_ALL_ACCESS);
if(NULL == sc_hResult)
{
AfxMessageBox("打开服务失败!");
CloseServiceHandle(sc_hResult);
CloseServiceHandle(sc_hManager);
return;
}
SERVICE_STATUS SerStat;
if(!ControlService(sc_hResult,SERVICE_CONTROL_STOP,&SerStat))
{
AfxMessageBox("服务没有正常停止,请重新启动电脑,完成卸载!");
}

if(DeleteService(sc_hResult))
{
AfxMessageBox("驱动卸载成功!");
CloseServiceHandle(sc_hResult);
CloseServiceHandle(sc_hManager);

}
else
{
AfxMessageBox("驱动没有卸载成功 !");
CloseServiceHandle(sc_hResult);
CloseServiceHandle(sc_hManager);



}

}


Button1 为加载,Button2为卸载。当第一次运行完全正常,如果完成一次 加载后,再卸载。接着再加载,就会出现错误了,错误在Button1加载的时候 调用 CreateService 就会返回1072服务已经标记为删除的错误。如果重新启动我的程序,那么又可以正常加载卸载了。这是什么原因啊?

读书人网 >VC/MFC

热点推荐