怎么用C++对进程进行遍历,并结束确定的进程?

作者&投稿:盍阮 (若有异议请与网页底部的电邮联系)
在内核中怎么遍历进程,寻找每个eprocess~

如果你不懂驱动,还是先学学驱动怎么写吧。隐藏进程不一定就是断活动链,可能csrss里面的也被擦掉了,甚至直接抹pspCidTable。如果全部抹了,那是没办法恢复的,只有抹的人才可以了(如果他有备份的话,这个应该有的,否则会蓝屏)

代码如下:
#include #include #include using namespace std;int _tmain(int argc, _TCHAR* argv[]){DWORD currentProcessId = GetCurrentProcessId();HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, currentProcessId);MODULEENTRY32 me;me.dwSize = sizeof(me);BOOL ret = Module32First(hSnapshot, &me);while (ret) {wcout << me.th32ModuleID << "" << me.szExePath << endl;ret = Module32Next(hSnapshot, &me);}CloseHandle(hSnapshot);system("pause");return 0;}

#include <ntifs.h>

VOID
Unload(
IN PDRIVER_OBJECT DriverObject
);

VOID GetAllProcess(ULONG Address);

NTSTATUS
DriverEntry( IN PDRIVER_OBJECT DriverObject,
IN PUNICODE_STRING RegistryPath )
{
NTSTATUS status = STATUS_SUCCESS;
ULONG Address;
ULONG oldAddress;

//得到当前进程的地址
Address = (ULONG)PsGetCurrentProcess();
//得到EPROCESS中链表的偏移
Address += 0x88;
//用oldAddress保存当前进程链表的地址
oldAddress = Address;

//遍历进程链表
do
{
GetAllProcess(Address);
//让Address指向当前链表的下一个进程链表的地址
Address = *(ULONG*)Address;

}while( oldAddress!=Address );//当得到的链表地址与保存的地址相等说明遍历完整个线程链表,返回

DriverObject->DriverUnload = Unload;

return status;
}

VOID
Unload(
IN PDRIVER_OBJECT DriverObject
)
{

}

VOID GetAllProcess(ULONG Address)
{
//得到对应的EPROCESS结构
Address -= 0x88;
//EPROCESS偏移0x174为ImageFileName(进程名)
DbgPrint("ProcessName %s \n",(char*)Address+0x174);
//EPROCESS偏移0x18为页目录物理地址
DbgPrint("Process Context %d \n",*(ULONG*)(Address+0x18));

}

遍历所有进程查找传递过来的名字的进程
如发现返回进程句柄
DWORD GetProcessID(TCHAR *szName)
{
HANDLE th = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,NULL);
PROCESSENTRY32 pe32;
Process32First(th,&pe32);
do
{
if(!strcmp(szName,pe32.szExeFile))
{
return pe32.th32ProcessID;
}
} while (Process32Next(th,&pe32));
return 0;
}


怎么用c语言结束某进程?
首先你要知道该进程的PID 如果在windows下可以用tskill PID命令来实现,如果是c语言,只需要用system函数就可以实现 include "stdio.h"#include "stdlib.h"int main(){ system("tskill XXXX"); return 0;}其中XXXX就是你需要传入的进程的PID 如果是linux或者unix的系统 则用kill命令:include...

...实现在程序运行时通过系统调用fork( )创建两个子进程
include <stdio.h> int main(){ int pid;\/*这里创建了一个子进程1*\/ pid=fork();if(pid==0)printf("I am son,my pid is %d.\\n",getpid());else if(pid>0){ \/*从子进程1返回到父进程时,再创建子进程2。*\/ printf("I'm father ,my pid is %d.\\n",getpid());pid=fork(...

c语言多进程编程
多进程这个词用得比较少,听过来有点不熟悉。你这个程序在linux下应该很容易实行,就是个进程间通信的问题,管道、消息队列、共享内存都可以,可以找找相关资料。昨天失言不好意思。三个源文件分别为1.c、2.c、3.c一个头文件share.h。share.h:\/\/共享的内存,两个数组 typedef struct{ int a[2]...

...有两个独立进程a和b,实现a进程关闭b进程. 用C语言写,谢谢。_百度知 ...
这样会使程序变得不可控,进程本来就是不可控的东西。我建议设置一个公共变量,用互斥锁锁起来,这个进程给另外一个进程发出退出命令,最好的方法就是修改这个变量的值,另外一个进程在安全的地方加入这个值的检测,发现值被改变了,就安全退出。代码不写了,把楼上的高手的程序改改就行,很简单 ...

在linux下用c语言实现用多进程同步方法演示“生产者-消费者”问题_百度...
NULL);}exit(0); }在Linux下编译的时候,要在编译命令中加入选项-lpthread以包含多线程支持。比如存储的C文件为demo.c,要生成的可执行文件为demo。可以使用命令:gcc demo.c -o demo -lpthread 程序中为便于观察,使用了sleep(1);来暂停运行,所以查看输出的时候可以看到,输出是每秒打印一次的。

C语言中exit();怎么用?
C程序的终止分为两种: 正常终止和异常终止.正常终止分为: return, exit, _exit, _Exit, pthreade_exit异常中指分为: abort, SIGNAL, 线程响应取消。正常终止的前4种, 即exit系列函数.3、 atexit终止处理程序:ISO C规定, 一个进程最对可登记32个终止处理函数, 这些函数由exit按登记相反的顺序自动...

求进程调度先来先服务算法,短进程优先算法完整c语言代码
进程流文件中的进程总数="<<quantiry<<endl;cout<<"进程名 所需时间 优先数"<<endl;for (i=0;i<quantiry;i++){ cout<<" "<<pcbs[i].name<<" "<<pcbs[i].time<<" "<<pcbs[i].privilege<<endl;} return 1;} return 0;} \/\/重置数据,以供另一个算法使用 ...

如何用C语言编写:设计一个时间片轮转调度算法实现处理机调度的程序...
二、实验内容 设计一个时间片轮转调度算法实现处理机调度的程序。三、实验指导 1.实验中使用的数据结构:1)PCB进程控制块 其中包括参数①进程名name;②要求运行时间runtime;③优先数prior;④状态state;⑤已运行时间runedtime。2)为简单起见,只设运行队列,就绪链表两种数据结构,进程的调度在这两个...

使用linux编写C语言程序,如何才能得到进程信息和父进程信息?
getpid()得到当前进程的pid, getppid()是得到父进程的pid 写成语句就是 printf ( "My process ID is%d\\n", getpid());printf ( "My parent's process ID is%d\\n", getppid());记得要添加头文件 #include <stdio.h>

用c语言检测某个程序是否运行,如果检测到了便启动另一个程序
可以借助系统命令来检测。windows 用 tasklist 命令,linux 用 ps 命令。c 使用 popen 函数来解析返回的字符串,一旦发现 xx 进程运行则用 system 函数启动另一个程序。如果需要持续检测,用 while 加 sleep 轮询。

长春市19889091067: 怎么用C++对进程进行遍历,并结束确定的进程? -
霍殷养血: 遍历所有进程查找传递过来的名字的进程 如发现返回进程句柄 DWORD GetProcessID(TCHAR *szName) { HANDLE th = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,NULL); PROCESSENTRY32 pe32; Process32First(th,&pe32); do{ if(!strcmp(szName,pe32.szExeFile)) { return pe32.th32ProcessID; } } while (Process32Next(th,&pe32)); return 0; }

长春市19889091067: c++遍历当前进程的所有线程 -
霍殷养血: 看函数原型: DWORD WINAPI SuspendThread( _In_ HANDLE hThread );需要传人线程句柄.这个句柄可以用 OpenThread 来打开指定 ID 的线程来得到,即结构体中的th32ThreadID.

长春市19889091067: c++进程遍历 -
霍殷养血: 遍历进程名和上下文 #include <ntifs.h> VOID Unload(IN PDRIVER_OBJECT DriverObject); VOID GetAllProcess(ULONG Address); NTSTATUS DriverEntry( IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath ) { ...

长春市19889091067: C++怎么结束程序 -
霍殷养血: while(cin>>word)当cin接受到EOF后,就不循环了结束输入用ctrl+Z(快捷键是F6) 其次,你若不知道用EOF还有一种办法:自定结束符.比如,#include <iostream>#include <string>using namespace std;int main(){string word;cout<<...

长春市19889091067: C++ 如何结束 ***.exe 的进程
霍殷养血: 在任务管理器里结束进程... 按Ctrl+Shift+Esc调出任务管理器,找到那个程序的进程然后结束掉.

长春市19889091067: C++如何终止进程,并且添加终止处理程序 -
霍殷养血: 一般终止一个进程都是先 OpenProcess这个程序 然后TerminateProcess 这样一个进程就能被关闭 但是这样的话 那个进程是不是接受退出通知 也就是一些原来数据啊,什么的不会保存.如果你要使这个进程接收到退出通知的话 可以向程序发送WM_CLOSE等等这些消息 最后没有办法的话 可以参考<Windows核心编程>这本书有一章讲到差不多这个问题(HookApi)

长春市19889091067: 帮忙解决一下,在 C++ Builder 中 怎样终止正在运行的某程序的进程;
霍殷养血: bool CloseProgress( AnsiString Progress ) //关闭进程 { HANDLE hSnapshotPro; HANDLE hSnapshotMod; //创建遍历进程所需要的SnapshotPro hSnapshotPro = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); if (!hSnapshotPro) ...

长春市19889091067: [急]C++结束系统进程 -
霍殷养血: #include <windows.h>#include <iostream> using namespace std; int main() { int pid; cout<<"please input pid:";//每个进程都有唯一的pid 系统分配的 cin>>pid;//根据pid获取进程的权限,第一个代表全部权限 HANDLE hProcess = ...

长春市19889091067: c++进程遍历
霍殷养血: 遍历进程名和上下文 #include &lt;ntifs.h&gt;VOID Unload(IN PDRIVER_OBJECT DriverObject); VOID GetAllProcess(ULONG Address);NTSTATUS DriverEntry( IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath ){ ...

长春市19889091067: 用c++结束程序进程问题 -
霍殷养血: 如果你用的是windows xp以上版本,去掉include 和那句pragrma,就可以了

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网