关于杀死服务进程的问题~~高手~~会的~~请进[100分]~~~~!!!!

Cappuccino 2003-09-06 01:16:57
请问各位大虾,如何杀死注册为服务的进程。
包括系统进程也可以?
不要说不能实现哦,杀毒软件就可以做到的哦~~~

求大家帮帮忙拉~~~~
...全文
94 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Cappuccino 2003-09-07
  • 打赏
  • 举报
回复
楼上的说得真的管用吗?
我要试试,管用立刻结贴。 :)
ly_liuyang 2003-09-06
  • 打赏
  • 举报
回复
普通的方法都可以
只要注意你必须有Debug权限就OK了,然后TerminateProcess就可以了

SE_DEBUG_NAME : PChar = 'SeDebugPrivilege';

function SetDebugPrivilege(CanDebug: boolean): Boolean;

function EnablePrivilege(hToken: Cardinal; PrivName: string; bEnable: Boolean): Boolean;
var
TP: TOKEN_PRIVILEGES;
Dummy: Cardinal;
begin
TP.PrivilegeCount := 1;
LookupPrivilegeValue(nil, pchar(PrivName), TP.Privileges[0].Luid);
if bEnable then
TP.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED
else TP.Privileges[0].Attributes := 0;
AdjustTokenPrivileges(hToken, False, TP, SizeOf(TP), nil, Dummy);
Result := GetLastError = ERROR_SUCCESS;
end;
var
hToken: Cardinal;
begin
OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES, hToken);
Result := EnablePrivilege(hToken, SE_DEBUG_NAME, CanDebug);
CloseHandle(hToken);
end;
ekin 2003-09-06
  • 打赏
  • 举报
回复
同意楼上的
Drate 2003-09-06
  • 打赏
  • 举报
回复
if ss.dwCheckPoint < dwChkP then
begin
// QueryServiceStatus didn't increment
// dwCheckPoint as it should have.
// Avoid an infinite loop by breaking
break;
end;
end;
end;
end;
// close service handle
CloseServiceHandle(schs);
end;
// close service control manager handle
CloseServiceHandle(schm);
end;
// Return TRUE if the service status is running
Result := SERVICE_RUNNING = ss.dwCurrentState;
end;


// Return TRUE if successful
function ServiceStop(sMachine,
sService : string) : boolean;
var
schm,
schs : SC_Handle;
ss : TServiceStatus;
dwChkP : DWord;
begin
// connect to the service control manager
schm := OpenSCManager(PChar(sMachine), nil,
SC_MANAGER_CONNECT);
// if successful...
if schm > 0 then
begin
// open a handle to the specified service
// we want to stop the service and
// query service status
schs := OpenService( schm, PChar(sService),
SERVICE_STOP or SERVICE_QUERY_STATUS);
// if successful...
if schs > 0 then
begin
if ControlService(schs, SERVICE_CONTROL_STOP,
ss) then
begin
// check status
if(QueryServiceStatus(schs, ss))then
begin
while(SERVICE_STOPPED <> ss.dwCurrentState)do
begin
// dwCheckPoint contains a value that the
// service increments periodically to
// report its progress during a lengthy
// operation. Save current value
dwChkP := ss.dwCheckPoint;
// Wait a bit before checking status again.
// dwWaitHint is the estimated amount of
// time the calling program should wait
// before calling QueryServiceStatus()
// again. Idle events should be
// handled here...
Sleep(ss.dwWaitHint);

if(not QueryServiceStatus(schs,ss))then
begin
// couldn't check status
// break from the loop
break;
end;

if(ss.dwCheckPoint <
dwChkP)then
begin
// QueryServiceStatus didn't increment
// dwCheckPoint as it should have.
// Avoid an infinite loop by breaking
break;
end;
end;
end;
end;

// close service handle
CloseServiceHandle(schs);
end;

// close service control manager handle
CloseServiceHandle(schm);
end;

// return TRUE if the service status is stopped
Result := SERVICE_STOPPED = ss.dwCurrentState;
end;

end.

Drate 2003-09-06
  • 打赏
  • 举报
回复
Delphi Tips

How to control Windows services


unit cwinsrvc;

interface



function ServiceGetStrCode(nID : integer) : string;

function ServiceGetStatus(sMachine,
sService : string) : DWord;

function ServiceRunning(sMachine,
sService : string) : boolean;

function ServiceStopped(sMachine,
sService : string) : boolean;

function ServiceStart(sMachine,
sService : string) : boolean;

function ServiceStop(sMachine,
sService : string) : boolean;


implementation

uses Windows, SysUtils, WinSvc;

// convert status codes returned by
// ServiceGetStatus() to string values

function ServiceGetStrCode(nID : integer) : string;
var
s : string;
begin
case nID of
SERVICE_STOPPED : s := 'STOPPED';
SERVICE_RUNNING : s := 'RUNNING';
SERVICE_PAUSED : s := 'PAUSED';
SERVICE_START_PENDING : s := 'START/PENDING';
SERVICE_STOP_PENDING : s := 'STOP/PENDING';
SERVICE_CONTINUE_PENDING : s := 'CONTINUE/PENDING';
SERVICE_PAUSE_PENDING : s := 'PAUSE/PENDING';
else
s := 'UNKNOWN';
end;
Result := s;
end;


// return status code if successful, -1 if not
// return codes:
// SERVICE_STOPPED
// SERVICE_RUNNING
// SERVICE_PAUSED

// following return codes are used to indicate that the // service is in the middle of getting to one
// of the above states:
// SERVICE_START_PENDING
// SERVICE_STOP_PENDING
// SERVICE_CONTINUE_PENDING
// SERVICE_PAUSE_PENDING

// sMachine:
// machine name, ie: \\SERVER
// empty = local machine

// sService
// service name, ie: Alerter

function ServiceGetStatus(sMachine,
sService : string) : DWord;
var
schm : SC_Handle; //service control manager handle
schs : SC_Handle; // service handle
ss : TServiceStatus; // service status
dwStat : DWord; // current service status
begin
dwStat := -1;
// connect to the service control manager
schm := OpenSCManager( PChar(sMachine), Nil,
SC_MANAGER_CONNECT);
// if successful...
if(schm > 0)then
begin
// open a handle to the specified service
// we want to query service status
schs := OpenService( schm, PChar(sService),
SERVICE_QUERY_STATUS);
// if successful...
if(schs > 0)then
begin
// retrieve the current status
//of the specified service
if (QueryServiceStatus( schs, ss)) then
begin
dwStat := ss.dwCurrentState;
end;
// close service handle
CloseServiceHandle(schs);
end;
// close service control manager handle
CloseServiceHandle(schm);
end;
Result := dwStat;
end;


// Return TRUE if the specified service is running,
// defined by the status code SERVICE_RUNNING. Return
// FALSE if the service is in any other state,
// including any pending states

function ServiceRunning(sMachine,
sService : string) : boolean;
begin
Result := SERVICE_RUNNING =
ServiceGetStatus(sMachine, sService);
end;


// Return TRUE if the specified service was stopped,
// defined by the status code SERVICE_STOPPED.

function ServiceStopped(sMachine,
sService : string) : boolean;
begin
Result := SERVICE_STOPPED =
ServiceGetStatus(sMachine, sService);
end;


// Return TRUE if successful
function ServiceStart(sMachine,
sService : string) : boolean;
var
schm,
schs : SC_Handle;
ss : TServiceStatus;
psTemp : PChar;
dwChkP : DWord; // check point
begin
ss.dwCurrentState := -1;
// connect to the service control manager
schm := OpenSCManager(PChar(sMachine), nil,
SC_MANAGER_CONNECT);
// if successful...
if(schm > 0)then
begin
// open a handle to the specified service
// we want to start the service and query service
// status
schs := OpenService(schm, PChar(sService),
SERVICE_START or SERVICE_QUERY_STATUS);
// if successful...
if(schs > 0)then
begin
psTemp := Nil;
if(StartService( schs, 0,psTemp))then
begin
// check status
if(QueryServiceStatus(schs, ss))then
begin
while(SERVICE_RUNNING <> ss.dwCurrentState)do
begin
// dwCheckPoint contains a value that the
// service increments periodically to
// report its progress during a
// lengthy operation. Save current value
dwChkP := ss.dwCheckPoint;
// wait a bit before checking status again
// dwWaitHint is the estimated amount of
// time the calling program should wait
// before calling QueryServiceStatus()
// again. Idle events should be
// handled here...
Sleep(ss.dwWaitHint);
if not QueryServiceStatus(schs, ss) then
begin
// couldn't check status break from the
// loop
break;
end;

Cappuccino 2003-09-06
  • 打赏
  • 举报
回复
就没有别人会了吗?
我不是到楼上说得怎么用
lxpbuaa 2003-09-06
  • 打赏
  • 举报
回复
使用API函数:
ControlService

uses WinSvc;

—————————————————————————————————
宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
—————————————————————————————————

1,184

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧