首页
社区
课程
招聘
[求助]请教:关于强制关闭进程问题
发表于: 2007-11-27 14:20 6257

[求助]请教:关于强制关闭进程问题

2007-11-27 14:20
6257
BOOL GetDebugPriv()
{
HANDLE hToken;
LUID sedebugnameValue;
TOKEN_PRIVILEGES tkp;

HANDLE hGetHandle=GetCurrentProcess();

if ( ! OpenProcessToken(hGetHandle,
  TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken ) )
    {
  return FALSE;
    }

if ( ! LookupPrivilegeValue( NULL, SE_DEBUG_NAME, &sedebugnameValue ) )
{
  CloseHandle( hToken );
  return FALSE;
}

tkp.PrivilegeCount = 1;
tkp.Privileges[0].Luid = sedebugnameValue;
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;

if (!AdjustTokenPrivileges( hToken, FALSE, &tkp, sizeof(tkp), NULL, NULL ) )
    {
        CloseHandle( hToken );
        return FALSE;
    }

CloseHandle(hToken);
    return TRUE;
}

{
...
  DWORD proc_code=420;//这个是我自行指定的进程。通过WINDOWS进程查看得到的PID
  HANDLE hProc;
  bSuc=GetDebugPriv();   //获取DEBUG调试权限
  hProc=OpenProcess(PROCESS_CREATE_THREAD|PROCESS_VM_OPERATION|PROCESS_VM_WRITE|PROCESS_ALL_ACCESS,TRUE,proc_code);   //获进程handle
  bSuc=TerminateProcess(&hProc,0);//终结进程,以上操作均可返回正确数据值,惟此不能正确返回。 不解,遂请教

}
调试环境: 机器AMD  CPU
VC6.0
ms windows2000
不明为何终结方法不可执行

win32
q群一:******
二:*******
三:*******

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 321
活跃值: (271)
能力值: ( LV13,RANK:1050 )
在线值:
发帖
回帖
粉丝
2
bSuc=TerminateProcess(&hProc,0);//终结进程,以上操作均可返回正确数据值,惟此不能正确返回。 不解,遂请教

这句修改为:
bSuc=TerminateProcess(&hProc,1);

这句也不用这么罗嗦
hProc = OpenProcess(PROCESS_CREATE_THREAD|PROCESS_VM_OPERATION|PROCESS_VM_WRITE|PROCESS_ALL_ACCESS,TRUE,proc_code);
修改为;

hProc = OpenProcess (PROCESS_ALL_ACCESS,FALSE,proc_code);
2007-11-27 14:48
0
雪    币: 321
活跃值: (271)
能力值: ( LV13,RANK:1050 )
在线值:
发帖
回帖
粉丝
3
给你贴一个我写的参考下:
#include <windows.h>
#include <iostream.h>

void main()
{
        DWORD pid;
        HWND hWnd = FindWindow("SciCalc","计算器");
        if(!hWnd)        {
                cout<<"Can't Find the Program.!"<<endl;
                return;
        }
       
        GetWindowThreadProcessId(hWnd, &pid );
        HANDLE hProcess = OpenProcess (PROCESS_ALL_ACCESS,FALSE,pid);
        TerminateProcess(hProcess,1);
       
        // 等待进程退出.
        if (WaitForSingleObject(hProcess,INFINITE)==STATUS_WAIT_0)
                cout<<"Program completed!"<<endl;
        else
                cout<<"Unexpected error"<<endl;
}
2007-11-27 14:49
0
雪    币: 230
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
bSuc=TerminateProcess(&hProc,0);//终结进程,以上操作均可返回正确数据值,惟此不能正确返回。 不解,遂请教

第1个参数这里不是传地址。第2个参数随便一个值.
bSuc=TerminateProcess(hProc,0);
如果只是要TerminateProcess,OpenProcess  的时候只要指定 PROCESS_TERMINATE就行。

combojiang 自己写的代码是对,但是指出LZ错误的地方就..............
2007-11-27 16:05
0
雪    币: 321
活跃值: (271)
能力值: ( LV13,RANK:1050 )
在线值:
发帖
回帖
粉丝
5
,没仔细看。
2007-11-27 16:47
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
多谢两位兄弟。   一切ok了,呵
2007-11-27 17:41
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
一楼代码可以杀掉 所有关键进程,包括windows的关键进程---结果是兰屏:D

呵,很高兴与大家交流:D

win32
q群一:******
2007-11-27 17:47
0
游客
登录 | 注册 方可回帖
返回
//