|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
PS:不要在意函数名啊变量名这些细节,←_←英语高考只有37的人体谅下
- #include<stdio.h>
- #include<windows.h>
- #include<tlhelp32.h>
- #include<string.h>
- void csh_all();//初始化所有
- void csh_tq(int * i);//提权相关过程
- void print_star();//输出最开始显示的内
- void print_jclb();//输出当前进程列表
- void zx_zzjc_jcm();//执行终止进程_进程名过程
- void zx_zzjc_jcid();//执行终止进程_进程ID过程
- void cls();//情况缓冲区
- int tq_debug();//提权到debug
- int qjcID(char*jcm);//取进程ID(英文很烂见谅)
- int KillProcess_jcid(int jcid);//终止进程_进程ID
- int KillProcess_jcm(char*jcm);//终止进程_进程名
- HANDLE dkjc(char*jcm);//打开进程
- char ch;
- int main()
- {
- csh_all();
- return 0;
- }
- void csh_all()
- {
- int t = 0;
- csh_tq(&t);
- if (t)
- {
- while (1)
- {
- print_star();
- ch = getchar();
- switch (ch)
- {
- case '0':
- if ((ch = getchar()) != '\n')//解决01退出BUG
- {
- goto cs;
- }
- return 0;
- case '1':
- if ((ch = getchar()) != '\n')
- {
- goto cs;
- }
- print_jclb();
- break;
- case'2':
- if ((ch = getchar()) != '\n')
- {
- goto cs;
- }
- printf("请选择方式(1:进程名 其他:进程ID):");
- ch = getchar();
- if (ch != '1')
- {
- zx_zzjc_jcid();
- }
- else
- {
- if ((ch = getchar()) != '\n')
- {
- cls();
- zx_zzjc_jcid();
- }
- else
- {
- zx_zzjc_jcm();
- }
- }
- break;
- default:
- cs: printf("你的输入有误!\n");
- cls();
- break;
- }
- }
- }
- }
- void csh_tq(int * i)
- {
- if (tq_debug())
- {
- *i = 1;
- }
- else
- {
- printf("提权失败!是否继续?(1:继续,其他:退出):");
- ch = getchar();
- if (49 != ch)
- {
- return 0;
- }
- else
- {
- cls();
- *i = 1;
- }
- }
- }
- void print_star()
- {
- printf("------------------------------------------------------\n");
- printf("1:打印进程列表 2:终止进程 \n");
- printf("0:退出 \n");
- printf("------------------------------------------------------\n");
- }
- void print_jclb()
- {
- HANDLE jckz;
- int jcjb;
- PROCESSENTRY32 jcxx;
- jckz = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);//先取得进程快照
- if (0 == jckz)//判断是否成功
- {
- return;
- }
- jcxx.dwSize = sizeof(PROCESSENTRY32);//设置 PROCESSENTRY32 变量的大小
- jcjb = Process32First(jckz, &jcxx);//获取第一个进程句柄
- printf("进程名 进程ID 父进程ID 优先级\n");
- while (jcjb != 0)//只要获取到的句柄不为零即成功获取就进入循环
- {
- printf("%-32s", jcxx.szExeFile);
- printf("%-8d", jcxx.th32ProcessID);
- printf("%-10d", jcxx.th32ParentProcessID);
- printf("%d\n", jcxx.pcPriClassBase);
- jcjb = Process32Next(jckz, &jcxx);//如果不是我们要的进程就获取下一个进程句柄
- }
- CloseHandle(jckz);
- return;
- }
- void zx_zzjc_jcid()
- {
- int jcid;
- printf("请输入你要终止的进程ID:");
- scanf("%d", &jcid);
- cls();
- if (jcid < 0 || jcid>10000)
- {
- printf("你输入有误!\n");
- return;
- }
- if (KillProcess_jcid(jcid))
- {
- printf("以成功终止进程!\n");
- }
- else
- {
- printf("终止进程失败!\n");
- }
- }
- int KillProcess_jcid(int jcid)
- {
- HANDLE jb;
- jb = OpenProcess(PROCESS_ALL_ACCESS, FALSE, jcid);//打开进程
- if (TerminateProcess(jb, 0))//终止进程
- {
- return 1;
- }
- else
- {
- return 0;
- }
- }
- void zx_zzjc_jcm()
- {
- WCHAR jcm[100];
- printf("请输入你要终止的进程名:");
- scanf("%s", jcm);
- cls();
- if (KillProcess_jcm(jcm))
- {
- printf("以成功终止进程!\n");
- }
- else
- {
- printf("终止进程失败!\n");
- }
- }
- int KillProcess_jcm(char*jcm)
- {
- int jcjb, jcID;
- HANDLE jb;
- jcID = qjcID(jcm);//先获取进程ID
- jb = OpenProcess(PROCESS_ALL_ACCESS, FALSE, jcID);//打开进程
- if (TerminateProcess(jb, 0))//终止进程
- {
- return 1;
- }
- else
- {
- return 0;
- }
- }
- int qjcID(char*jcm)
- {
- HANDLE jckz;
- int jcjb;
- PROCESSENTRY32 jcxx;
- jckz = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);//先取得进程快照
- if (0 == jckz)//判断是否成功
- {
- return 0;
- }
- jcxx.dwSize = sizeof(PROCESSENTRY32);//设置 PROCESSENTRY32 变量的大小
- jcjb = Process32First(jckz, &jcxx);//获取第一个进程句柄
- while (jcjb != 0)//只要获取到的句柄不为零即成功获取就进入循环
- {
- if (strcmp(jcm, jcxx.szExeFile) == 0)//判断进程名是否和我们要结束的一样
- {
- CloseHandle(jckz);
- return jcxx.th32ProcessID;//如果是就返回进程PID
- }
- jcjb = Process32Next(jckz, &jcxx);//如果不是我们要的进程就获取下一个进程句柄
- }
- CloseHandle(jckz);
- return 0;//如果没有我们要的就返回0
- }
- int tq_debug()
- {
- int retn;
- TOKEN_PRIVILEGES qxlx;
- HANDLE lpjb,jcjb;
- jcjb = GetCurrentProcess();
- OpenProcessToken(jcjb, TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY,&lpjb);
- LookupPrivilegeValueA(NULL,"SeDebugPrivilege",&qxlx.Privileges->Luid);
- qxlx.PrivilegeCount = 1;
- qxlx.Privileges->Attributes = SE_PRIVILEGE_ENABLED;
- retn = AdjustTokenPrivileges(lpjb, 0, &qxlx, NULL, NULL, NULL);
- CloseHandle(jcjb);
- return retn;
- }
- void cls()
- {
- while ((ch = getchar()) != '\n');
- }
复制代码 |
评分
-
查看全部评分
|