`
brmrk
  • 浏览: 30168 次
  • 性别: Icon_minigender_1
  • 来自: 大连
最近访客 更多访客>>
社区版块
存档分类
最新评论

C语言写的屏蔽进程运行的程序

阅读更多
这个是帮别人写的。具体用途不详。
// 通过PSAPI函数枚举进程
#include "stdio.h"
#include "string.h"
#include "windows.h"
// 定义函数指针
typedef BOOL (__stdcall* funEnumPorcess)(DWORD *lpidProcess,      // 进程ID
                                         DWORD cb,                // lpidProcess的大小
                                         DWORD *cbNeeded);        // 实际使用lpidProcess的字节数

typedef DWORD (__stdcall* funGetModuleFileNameEx)(HANDLE hProcess,    // 待获得进程名称的进程句柄
                                                  HMODULE hModule,    // 当前调用进程的句柄
                                                  LPTSTR lpFileName,  // 记录返回的进程名称
                                                  DWORD nSize);       // lpFileName大小

const DWORD MAXPROCESS = 500;   // 假设当前系统最大有500个进程正在执行
int main (){
    while(1){
       killer();  
             };
    } ;
int killer()
{
    char FileName[] = "notepad.exe";     // 大小写任意
    char NameBuff[MAX_PATH];
    char *pFileName;        // pFileName转化为大写后的字符串指针
    char *pNameBuff;        // NameBuff转化为大写后的字符串指针
   
    BOOL bRes;              // 返回结果
    HINSTANCE hInstance;    // 动态库句柄
    HANDLE hHandle;         // 进程句柄
   
    int i, j;      // 循环变量
   
    int len;
   
    funEnumPorcess EnumProcesses;
    funGetModuleFileNameEx GetModuleFileNameEx;
   
    DWORD *buffer, maxNum, factNum;
   
    maxNum = MAXPROCESS;
    factNum = MAXPROCESS;
    buffer = (DWORD *)malloc(maxNum);
   
    hInstance = LoadLibrary("psapi.dll");   // 装载psapi.dll
    if (hInstance)
    {
        EnumProcesses = (funEnumPorcess)GetProcAddress(hInstance, "EnumProcesses");
        if (EnumProcesses)
        {
            bRes = EnumProcesses(buffer, maxNum, &factNum); // 枚举进程,得到进程名称和实际进程总大小
            if (bRes)
            {
                factNum /= sizeof(DWORD);     // 计算实际进程个数
                GetModuleFileNameEx = (funGetModuleFileNameEx)GetProcAddress(hInstance, "GetModuleFileNameExA");
                if (GetModuleFileNameEx)
                {
                    for (i=0; i<factNum; i++)
                    {
                        hHandle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, buffer[i]);   // 获取进程句柄
                        if (hHandle)
                        {
                            bRes = GetModuleFileNameEx(hHandle, NULL, NameBuff, MAX_PATH);   // 获取进程名称
                            if (bRes)
                            {                               
                                pFileName = strupr(FileName);     // 字符串转化为大写
                                pNameBuff = strupr(NameBuff);
                                if (strstr(pNameBuff, pFileName) != NULL)      // 名字查找
                                {
                                    if (TerminateProcess(hHandle, 0));
                                    {
                                        printf("关闭 %s 成功\n", NameBuff);
                                        break;
                                    }
                                }
                            }
                            // 关闭句柄
                            CloseHandle(hHandle);
                        }
                    }
                }
            }
        }
        // 释放动态库
        FreeLibrary(hInstance);
    }
    free(buffer);
   
    return 0;
}

0
0
分享到:
评论
2 楼 brmrk 2010-02-07  
liangguanhui 写道
这段代码也太变态拉,在一个死循环里面不停地LoadLibrary和Free,bt阿。

看了标题说屏蔽,原来就i是循环杀进程。

-_-#。偶C语言很菜的,随便写写
1 楼 liangguanhui 2010-02-07  
这段代码也太变态拉,在一个死循环里面不停地LoadLibrary和Free,bt阿。

看了标题说屏蔽,原来就i是循环杀进程。

相关推荐

    Linux父子进程通信(子进程反转输出,屏蔽Ctrl+c,按Q或q退出)

    根据要求完成父进程与子进程之间通信。 父进程定时、随机产生一个由 12 个字符组成的字符串,子进程获取此字符 ...要求程序在运行过程种屏蔽 “Ctrl+C”,仅当程序接收到键盘输入“q”或“Q”时退出。

    清华大学Linux操作系统原理与应用

    3.1.1 程序和进程 37 3.1.2 进程的层次结构 38 3.1.3 进程状态 39 3.1.4 进程实例 40 3.2 进程控制块 41 3.2.1 进程状态 42 3.2.2 进程标识符 43 3.2.3 进程之间的亲属关系 43 3.2.4 进程控制块的存放 44 3.3 进程的...

    疯狂内核之——内核初始化

    3.2.3 准备实模式下C语言环境 64 3.3 实模式代码main函数 69 3.3.1 复制初始化头变量 71 3.3.2 初始化堆 74 3.3.3 确保支持当前运行的CPU 75 3.3.4 设置BIOS的x86模式 76 3.3.5 内存的检测 78 3.3.6 设置键盘属性 81...

    软件工程-理论与实践(许家珆)习题答案

    若你作为一名管理员刚加入M公司,你认为快速原型法对公司的软件开发更加优越,请向公司副总裁写一份报告阐明你的理由,切记:副总裁不喜欢报告长度 超过一页(B5)。 参考答案提示: 应先简述瀑布模型的缺点,它已不...

    c++ 面试题 总结

    当程序运行时需要从内存中读出这段程序的代码。代码的位置必须在物理内存中才能被运行,由于现在的操作系统中有非常多的程序运行着,内存中不能够完全放下,所以引出了虚拟内存的概念。把哪些不常用的程序片断就放入...

    JAVA面试题最全集

    请写一个java程序实现线程连接池功能? 44.给定一个C语言函数,要求实现在java类中进行调用。 45.如何获得数组的长度? 46.访问修饰符“public/private/protected/缺省的修饰符”的使用 47.用关键字final修饰一...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    3. 运行该批处理程序将自动完成oracle卸载工作,最后手动删除\app文件夹(可能需要重启才能删除) 4. 运行regedit命令,打开注册表窗口。删除注册表中与Oracle相关的内容,具体如下:  删除HKEY_LOCAL_MACHINE/...

Global site tag (gtag.js) - Google Analytics