if hServiceTwdm=0 then
begin
if GetLastError()=ERROR_SERVICE_EXISTS then
begin
{Service Exists}
hServiceTwdm:=OpenService(hServiceMgr,PChar(szSvrName),SERVICE_ALL_ACCESS);
if hServiceTwdm=0 then
begin
CloseServiceHandle(hServiceMgr);
Result:=False;
Exit;
end;
end
else
begin
CloseServiceHandle(hServiceMgr);
Result:=False;
Exit;
end;
end;
{Start the drivers}
if hServiceTwdm<>0 then
begin
if StartService(hServiceTwdm,0,p)=False then//只有这里报错
begin
if ERROR_SERVICE_ALREADY_RUNNING=GetLastError() then
begin
{no real problem}
end
else
begin
CloseServiceHandle(hServiceMgr);
CloseServiceHandle(hServiceTwdm);
Result:=False;
Exit;
end;
end;
function UnInstallDriver(szSvrName:string):Boolean;
var
hServiceMgr,hServiceTwdm:SC_HANDLE;
SvrSta:SERVICE_STATUS;
begin
hServiceMgr:=OpenSCManager(nil,nil,SC_MANAGER_ALL_ACCESS );
if hServiceMgr=0 then
begin
{OpenSCManager() Faild.}
Result:=False;
Exit;
end;
hServiceTwdm:=OpenService(hServiceMgr,PChar(szSvrName),SERVICE_ALL_ACCESS );
if hServiceTwdm=0 then
begin
{OpenService() Faild.}
CloseServiceHandle(hServiceMgr);
Result:=False;
Exit;
end;
{停止驱动程序,如果停止失败,只有重新启动才能,再动态加载。}
if ControlService(hServiceTwdm,SERVICE_CONTROL_STOP,SvrSta)=False then
begin
{ControlService() Faild.}
CloseServiceHandle(hServiceTwdm);
CloseServiceHandle(hServiceMgr);
Result:=False;
Exit;
end;
{动态卸载驱动程序.}
if DeleteService(hServiceTwdm)=False then
begin
{DeleteSrevice() Faild.}
CloseServiceHandle(hServiceTwdm);
CloseServiceHandle(hServiceMgr);
Result:=False;
Exit;
end;