分享
 
 
 

关于进程的小程序(发错地了,重发....)

王朝vc·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

小弟初学SDK时间不长,写了个小东西.... 大家凑活看,写得不好,不要骂.....

这个对目前运行的进程进行记录,并能对任意的进程进行操作

首先,先枚举出所有的进程,然后对所有的进程进行记录,用ShowProcess函数

ShowProcess对所有的进程进行操作,将每个进程的信息分别存入ProcessAttribute结构体

至于存入结构体需要哪些信息,我来说明一下

1, 每个运行的进程都有1个ID, 要对某一个进程操作是需要这个ID的,而且这个ID是动

态随机分配的,当关闭了1个进程后,这个进程所占的地址被释放,并且ID号也将会被释放,被释放的ID号可能会被下一个开启的进程所使用。

2, 进程的名称。正如在上面提到的,进程的ID有时间性会随着进程的消亡而失去原来

唯一性,所以用ID号来确定进程是不可以的,而又要体现出进程名同ID号的唯一性这就需要创建一个结构体,而这个结构体里面要记录某个进程的名称还有ID,让名称同ID绑定在一起,这就可以针对某一个进程进行操作了。

3, 由于我们的进程一般是一般用户级,无法对一些系统进程进行操作,所以就要提升进程的特权,每个进程都有一个令牌,用于确定自己的级别,我们只要提高这个级别就可以了,提高后就可以对系统进程也进行操作。

在本程序中我关掉了1个系统进程,这样windows就无法正常的使用,只能重起…..

对于随机启动这里不加以讨论….我把那段代码删掉了,有兴趣的朋友可以自己写出来

现在附上代码

#include <windows.h>

#include <tlhelp32.h>

#include <stdio.h>

//==========================================================

// 结构体名 : ProcessAttribute

// 功能 : 里面保存了单个进程的相关属性

//==========================================================

struct ProcessAttribute

{

DWORD ID; // 进程的ID

char ExeFile[100]; // 进程的名称

int total; // 判断进程是否存在 1 为存在其余的值为不存在

};

//================================================================

// 函数名:ShowProcess

// 功能 : 将系统内运行的进程写入文件,并且将进程相关信息储存起来

// 参数 : pAttribute 数据类型 : ProcessAttribute型指针

// 功能 : 接收ProcessAttribute结构体得地址

// 返回值 : 调用成功后返回1,失败后返回0;

//================================================================

int ShowProcess ( ProcessAttribute *pAttribute)

{

HANDLE Snapshot; // 声明1个句柄变量,接收CreateToolhelp32Snapshot函数的返回值

tagPROCESSENTRY32 process; // 声明结构体(详见msdn的Process32First函数)

char *ProcessInformation,*ptotal;

FILE *fp; // 建立文件指针

int total = 0, n=0 ;

ProcessAttribute *top;

top = pAttribute;

fp = fopen ("prcoessinformation.txt","w+"); // 建立或打开1个名为 prcoessinformation 的文件

process.dwSize = sizeof( tagPROCESSENTRY32 );

Snapshot = CreateToolhelp32Snapshot (TH32CS_SNAPPROCESS,0); //接收句柄值

if( Process32First (Snapshot,&process) == true ) //对于异常发生的处理

{

while( Process32Next ( Snapshot, &process ) )

{

ProcessInformation = ptotal = process.szExeFile; // 将prcoessinformation 指向process.szExeFile 字符串

while ( *ptotal != '\0' )

{

top->ExeFile[n] = *ptotal ; // 将进程名的字符数组的首地址传给top结构体里得ExeFile

total ++ ;

ptotal ++ ;

n ++;

}

top->ExeFile[n] = '\0';

n = 0;

top->ID = process.th32ProcessID; // 将和上一个进程名唯一的ID存入top结构体里的th32ProcessID

top->total = 1; // 判断进程是否存在

fwrite ( ProcessInformation, sizeof(char), total, fp );

total = 0 ;

top ++;

}

CloseHandle (Snapshot); //关闭句柄

fclose (fp); //关闭文件

return 1;

}

else

return 0;

}

//====================================================================

// 函数名 : CheckProcess

// 功能 : 判断现在运行的进程是否为非法进程表提供的非法进程

// 参数 : ProcessAttribute 数据结构 : pAttribute结构体指针

// 功能 : 传入一个pAttribute结构体指针,只能传入1个进程属性,然后按位

// 传入

// 返回参数 : id 或 0,1

// 说明 : 0为没有搜索到非法进程,id为搜索到非法进程的ID号

// 1为没有找到非法进程表文件

//====================================================================

DWORD CheckProcess ( ProcessAttribute *pAttribute )

{

FILE *fp;

DWORD id;

char Data[100]={"svchost.exe"}, *pData, *init;

int ntop = 0, m = 0;

ProcessAttribute *top;

pData = init = Data;

top = pAttribute;

if ( strcmp ( pData, top->ExeFile ) == 0)

{

id = top->ID;

return id;

}

return 0;

}

//=============================================================

// 函数名: CloseProcess

// 功能 : 关闭选定的进程

// 参数: processID 数据类型:DWORD

// 功能 : 选定要关闭进程的进程ID

//=============================================================

void CloseProcess (DWORD processID)

{

HANDLE hprocess; //进程的句柄

hprocess = OpenProcess(PROCESS_TERMINATE,true,processID); //得到该进程的句柄

TerminateProcess (hprocess,0);

CloseHandle (hprocess); // 关闭句柄

}

//===============================================================

// 函数名 :EnablePrivilege

// 功能 : 提升权限

//===============================================================

BOOL EnablePrivilege ()

{

HANDLE hToken;

LUID DebugValue;

TOKEN_PRIVILEGES tkp;

if ( !OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY,&hToken) )

return FALSE;

if ( !LookupPrivilegeValue((TCHAR *) NULL, SE_DEBUG_NAME, &DebugValue) )

return FALSE;

tkp.PrivilegeCount = 1;

tkp.Privileges[0].Luid = DebugValue;

tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;

AdjustTokenPrivileges( hToken,

FALSE,

&tkp,

sizeof(TOKEN_PRIVILEGES),

(PTOKEN_PRIVILEGES)NULL,

(PDWORD)NULL

);

if( GetLastError() == ERROR_SUCCESS ) {

CloseHandle(hToken);

return TRUE;

}

else {

CloseHandle(hToken);

return FALSE;

}

}

void main()

{

ProcessAttribute aProcess[100], *paProcess;

paProcess = aProcess;

DWORD id, ID;

ShowProcess ( paProcess );

EnablePrivilege ();

while ( paProcess->total ==1 )

{

id = CheckProcess ( paProcess );

if ( id != 0 )

CloseProcess (id);

paProcess ++;

}

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有