这个是帮别人写的。具体用途不详。
// 通过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;
}
分享到:
相关推荐
- 这一章会介绍进程的基本概念,包括进程的生命周期、进程的状态(如运行、就绪、等待等)、进程间通信(IPC)机制等。 - 可能还会涉及如何使用系统调用来创建新进程、控制进程的行为等。 - **第三章:文件操作**...
在C语言中,进程信号处理是操作系统与程序交互的重要机制,用于通知进程发生了特定的事件。本篇文章将详细探讨如何查询进程信号是否被遮罩(屏蔽)或搁置(挂起),并介绍两个关键的系统调用:`sigprocmask()` 和 `...
- **GCC编译器**: 在Linux环境下,通常使用GNU的GCC编译器来编译C语言源程序。 - **基本编译命令**: `gcc -o <output_file> <source_file>`,其中`-o`选项用于指定输出的可执行文件名。 - **常见编译选项**: - `-c`...
在多线程编程中,这是创建并发执行任务的关键函数,它可以让你的程序同时处理多个任务,提高程序的运行效率。 `bios_*`系列函数如`_bios_disk`、`_bios_equiplist`、`_bios_keybrd`等,它们都是直接调用BIOS(基本...
- `c_exit`, `cexit`: 这两个函数在`process.h`中定义,它们的作用与`_exit`相似,但不终止程序执行,而是进行特定的清理工作后继续运行。 - `chdrive`: 来自`direct.h`,用于设置当前的工作驱动器,如`chdrive('C...
- **进程**:操作系统执行作业的基本单位,代表一个正在运行的程序实例。 **6. 数据的逻辑结构与存储结构** - **逻辑结构**:描述数据元素之间的逻辑关系,与数据的存储结构无关。 - **存储结构**:数据在计算机...
此程序在运行1秒后会被`SIGALRM`信号终止,可以根据最终打印出的`I`值来评估不同系统的性能。 #### 四、结论 通过对Linux下C语言编程中信号处理函数的学习,我们可以更深入地理解如何有效地管理和响应各种信号事件...
根据要求完成父进程与子进程之间通信。 父进程定时、随机产生一个由 12 个字符组成的字符串,子进程获取此字符 ...要求程序在运行过程种屏蔽 “Ctrl+C”,仅当程序接收到键盘输入“q”或“Q”时退出。
为了创建一个僵尸进程并验证其状态,可以编写以下C语言程序: ```c #include #include #include int main() { pid_t pid = fork(); if (pid == 0) { // 子进程 printf("Child process running.\n"); exit...
5. **作业与进程的区别**:“作业与进程”的概念,作业是用户提交给系统的整体工作单元,而进程是操作系统中运行的程序实例,作业由系统自动创建进程来执行。 6. **数据逻辑结构与物理结构**:“数据的逻辑结构是从...
4. 进程与程序的区别:程序是静态的指令集合,而进程是程序的动态执行实例,有状态且可以前台或后台运行。 填空题中,考察了进程间通信方式、管道的优势、消息队列的特点、SQLite数据库类型、SQLite的C语言操作方法...
进程是操作系统资源分配的基本单位,它包含了执行程序的上下文,包括正文段(程序代码)、用户数据段(程序运行时的数据)以及系统数据段(如进程控制块,用于记录进程状态等信息)。在Linux中,进程可以是批处理...
- 进程具有状态,如上述的就绪、运行、等待状态,而程序本身没有这种状态概念。 5. **进程间通信(IPC)** - 常见的IPC方式包括无名管道、有名管道、消息队列、信号量、共享内存、信号、套接字等。 - 命名管道...
此外,如果聊天程序的网址被白名单屏蔽,那么在虚拟机内运行可以绕过这个限制,因为虚拟机可能有独立的网络设置和访问规则。 至于“word格式”,这可能是指聊天记录或消息是以Microsoft Word文档的格式进行保存或...
本压缩包"进程通信之信号.zip"包含了几个与信号(Signal)相关的C语言源代码文件,这是一类用于进程间通信的基础方法。让我们详细探讨一下Linux信号及其在代码中的应用。 1. **信号的概念**: 信号是Linux系统中一...
交互进程是指与用户直接交互的进程,批处理进程则是在无用户交互的情况下运行的任务,而守护进程通常在后台运行,不与终端关联。另外,还提及了进程的状态,如就绪态,但这并不是进程的类型,而是进程生命周期中的一...
9. **程序执行** - C语言程序中的`fork()`调用会创建新的进程,程序执行会打印出9行"Hello World",因为每个进程都会打印两次,包括最初的父进程。 10. **线程创建** - 程序中创建了一个线程`th_f`,当线程创建成功...
写启动代码是ARM开发的第二步骤,这一步骤的目的是编写一个能够启动小程序,包括初始化端口、屏蔽中断、把程序拷贝到SRAM中、完成代码的重映射、配置中断句柄、连接到C语言入口等。这个小程序的目的是使我们的应用...
其中,0-31为不可屏蔽中断和处理器异常预留,而32-255可用于可屏蔽中断和程序异常。 #### 二、Linux系统调用的流程 1. **Linux系统调用的简单流程** Linux系统调用的流程相对简单,主要包括以下步骤: - 用户态...