`
brmrk
  • 浏览: 30788 次
  • 性别: 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是循环杀进程。

相关推荐

    C语言中查询进程信号是否被遮罩或搁置的简单方法

    在C语言中,进程信号处理是操作系统与程序交互的重要机制,用于通知进程发生了特定的事件。本篇文章将详细探讨如何查询进程信号是否被遮罩(屏蔽)或搁置(挂起),并介绍两个关键的系统调用:`sigprocmask()` 和 `...

    C语言编程技巧.doc

    在多线程编程中,这是创建并发执行任务的关键函数,它可以让你的程序同时处理多个任务,提高程序的运行效率。 `bios_*`系列函数如`_bios_disk`、`_bios_equiplist`、`_bios_keybrd`等,它们都是直接调用BIOS(基本...

    c语言编程常见问题解答.doc

    - `c_exit`, `cexit`: 这两个函数在`process.h`中定义,它们的作用与`_exit`相似,但不终止程序执行,而是进行特定的清理工作后继续运行。 - `chdrive`: 来自`direct.h`,用于设置当前的工作驱动器,如`chdrive('C...

    四川省计算机二级C语言等级考试及答案(28次)

    - **进程**:操作系统执行作业的基本单位,代表一个正在运行的程序实例。 **6. 数据的逻辑结构与存储结构** - **逻辑结构**:描述数据元素之间的逻辑关系,与数据的存储结构无关。 - **存储结构**:数据在计算机...

    Linux下C语言编程--信号处理函数.

    此程序在运行1秒后会被`SIGALRM`信号终止,可以根据最终打印出的`I`值来评估不同系统的性能。 #### 四、结论 通过对Linux下C语言编程中信号处理函数的学习,我们可以更深入地理解如何有效地管理和响应各种信号事件...

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

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

    linux高级编程知识点总结——进程线程

    为了创建一个僵尸进程并验证其状态,可以编写以下C语言程序: ```c #include #include #include int main() { pid_t pid = fork(); if (pid == 0) { // 子进程 printf("Child process running.\n"); exit...

    四川省二级C语言28到32次考试笔试题

    5. **作业与进程的区别**:“作业与进程”的概念,作业是用户提交给系统的整体工作单元,而进程是操作系统中运行的程序实例,作业由系统自动创建进程来执行。 6. **数据逻辑结构与物理结构**:“数据的逻辑结构是从...

    Linux程序设计第四版.pdf

    进程是Linux中的执行单元,每个程序在运行时都会被系统转化为一个或多个进程。书中会讲解如何创建、管理和控制进程,包括fork()、exec()和wait()等系统调用的使用,以及进程间的同步和通信机制,如信号量、管道、...

    linux系统编程试卷(答案).pdf

    4. 进程与程序的区别:程序是静态的指令集合,而进程是程序的动态执行实例,有状态且可以前台或后台运行。 填空题中,考察了进程间通信方式、管道的优势、消息队列的特点、SQLite数据库类型、SQLite的C语言操作方法...

    进程单元测试题.doc

    进程是操作系统资源分配的基本单位,它包含了执行程序的上下文,包括正文段(程序代码)、用户数据段(程序运行时的数据)以及系统数据段(如进程控制块,用于记录进程状态等信息)。在Linux中,进程可以是批处理...

    linux系统编程试卷(答案)...doc

    - 进程具有状态,如上述的就绪、运行、等待状态,而程序本身没有这种状态概念。 5. **进程间通信(IPC)** - 常见的IPC方式包括无名管道、有名管道、消息队列、信号量、共享内存、信号、套接字等。 - 命名管道...

    word格式的聊天编程程序

    此外,如果聊天程序的网址被白名单屏蔽,那么在虚拟机内运行可以绕过这个限制,因为虚拟机可能有独立的网络设置和访问规则。 至于“word格式”,这可能是指聊天记录或消息是以Microsoft Word文档的格式进行保存或...

    进程通信之信号.zip

    本压缩包"进程通信之信号.zip"包含了几个与信号(Signal)相关的C语言源代码文件,这是一类用于进程间通信的基础方法。让我们详细探讨一下Linux信号及其在代码中的应用。 1. **信号的概念**: 信号是Linux系统中一...

Global site tag (gtag.js) - Google Analytics