首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

运用C语言阻止某进程运行的源代码

2013-08-01 
使用C语言阻止某进程运行的源代码?本帖最后由 jdgdf566 于 2013-07-26 08:10:34 编辑使用C/C++语言阻止某

使用C语言阻止某进程运行的源代码?
本帖最后由 jdgdf566 于 2013-07-26 08:10:34 编辑 使用C/C++语言阻止某进程运行,好像是拦截CreateProcess之类的函数。还有,阻止某服务运行,有的服务没有路径的,比如svchost.exe -k PPTVServiceGroup,你不能把D:\windows\System32\svchost.exe给禁止了吧。 C Windows
[解决办法]
如果楼主是想不让此进程运行,开进程前判断下就好;如果此进程已运行,可以向该进程发信号干掉它(前提是他允许被信号中断)。
[解决办法]
while(1)
{
   TerminateProcess();
   Sleep(1000);
}

注意terminateprocess函数,被终止的进程是无法在结束运行前进行退出前的收尾工作
[解决办法]
通过进程的名字获得进程的pid,将pid干掉就好了
[解决办法]
奇怪的需求,也或许是我没有弄清楚需求
[解决办法]

引用:
Quote: 引用:

while(1)
{
   TerminateProcess();
   Sleep(1000);
}

注意terminateprocess函数,被终止的进程是无法在结束运行前进行退出前的收尾工作

那些hips软件也是用Sleep(1000);来实现的吗?
再一个,我怎得到进程的句柄?

可能吧,句柄OpenProcess
[解决办法]
获取进程句柄 杀死进程
    HANDLE   hSnapshot; 
    hSnapshot=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); 
    PROCESSENTRY32   pe; 
    Process32First(hSnapshot,&pe); 
    do 

if(strcmp(pe.szExeFile, "*******")==0) 

HANDLE   hProcess; 
hProcess=OpenProcess(PROCESS_TERMINATE,FALSE,pe.th32ProcessID); 
if(hProcess) 

TerminateProcess(hProcess,0);

}
}   
    while(Process32Next(hSnapshot,&pe)); 
    CloseHandle(hSnapshot); 
[解决办法]
这是遍历进程的方法,你参考
#include<windows.h> 


#include "stdio.h"
#include<tlhelp32.h>
#include "Psapi.h"
#define MAX 128

int main(void)
{   
DWORD needed;
int Num=1;
TCHAR place[MAX]="";
HANDLE hwin=NULL;
HMODULE hMoudle;
PROCESSENTRY32 pe32;

pe32.dwSize=sizeof(pe32);
HANDLE hProcessSnap=::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
if(hProcessSnap==INVALID_HANDLE_VALUE)
{
printf("CreateToolhelp32Snapshot fuild!\n");
return -1;
}
BOOL bMore=::Process32First(hProcessSnap,&pe32);
while(bMore)
{
printf("name:%s\n",pe32.szExeFile);
printf("Num:%d\n",Num);
printf("ID:%u\n",pe32.th32ProcessID);
hwin=::OpenProcess(PROCESS_ALL_ACCESS,TRUE,pe32.th32ProcessID);
EnumProcesses(&(pe32.th32ProcessID),sizeof(pe32.th32ProcessID),&needed);
EnumProcessModules(hwin,&hMoudle,sizeof(hMoudle),&needed);
GetModuleFileNameEx(hwin,hMoudle,place,sizeof(place));
printf("place:%s\n\n",place);
Num++;
bMore=::Process32Next(hProcessSnap,&pe32);

}

CloseHandle(hProcessSnap);
return 0;

}


[解决办法]
找进程特征码,比如exe文件某一代表性字段做散列。

或者直接通过exe名称或路径判断。

在进程管理器中做hook,root或ring3皆可。

热点排行