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

原创 2004年09月26日 18:19:00
  • 小弟初学SDK时间不长,写了个小东西.... 大家凑活看,写得不好,不要骂.....

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

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

     

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

     

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

     

    1,  每个运行的进程都有1ID, 要对某一个进程操作是需要这个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;    // 声明结构体(详见msdnProcess32First函数)

     

             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 ++;

     

           }

     

    }

     

     

小程序二维码地推如何考核?

HotApp小程序统计支持二维码精准统计,那么如何通过HotApp对地推人员进行考核呢? (1)有三个地推人员 张三 , 李四, 王五  (2)通过HotApp小程序的参数二维码生成器生成三个人的...
  • yaoohfox
  • yaoohfox
  • 2017年01月10日 17:34
  • 1034

理解线程的小程序

Table of Contents 1. 一个简单的C语言实现的线程示例一个简单的C语言实现的线程示例在看《Beginning Linux Programming》时,为了更好的理解线程的概念,书中列...
  • imnisen1992
  • imnisen1992
  • 2016年11月16日 22:07
  • 145

javaweb struts2 登陆小程序

写的第一个小的struts2 登陆程序
  • shanyinxiao
  • shanyinxiao
  • 2015年06月11日 08:53
  • 326

圣诞节的狂欢,小程序内惊喜不断

叮叮当,叮叮当,叮儿响叮当……圣诞节临近,相信大家都按捺不住自己那颗想要购物的心,或是做自己的圣诞老人给自己实现节日愿望,亦或是做他人的圣诞老人,给亲朋送上祝福的礼物。不论如何,大家在过节这件事上都有...
  • weixiaocheng123
  • weixiaocheng123
  • 2017年12月25日 10:51
  • 168

一个关于二叉树的小程序

假设这棵二叉树是这样的 代码实现#include #include #include typedef char ElemType; //定义一个二叉树 typedef struct BiTN...
  • CCSUXWZ
  • CCSUXWZ
  • 2016年10月20日 21:20
  • 1694

TODO:小程序的使用体验

TODO:小程序的使用体验 2017.01.09小程序如期而至,话说十年前的今天2007.01.09是第一代iPhone发布日期。 清晨朋友圈发了一张小程序的截图,很多朋友问用什么...
  • sinat_36342775
  • sinat_36342775
  • 2017年01月09日 14:27
  • 352

微信小程序开发前言

微信小程序的开发,可以参考官方的文档 微信小程序官网文档 我是一个做android开发的,所以刚接触微信小程序的时候还是有点不习惯,因为微信小程序的开始其实使用的是前端的知识。 以前有学...
  • shuang__zi
  • shuang__zi
  • 2017年07月04日 11:46
  • 163

关闭LOL等电脑进程小程序

现在,很多人沉迷游戏,之前我弟弟总是玩电脑游戏,现在最火的电脑游戏,应该是LOL吧。于是,初学C#的我,准备写一个关闭LOL的小程序。能够开机自启动,后台运行,每10秒检测一次,关闭LOL进程。 下...
  • FBI__xiu
  • FBI__xiu
  • 2017年05月02日 21:59
  • 320

关于微信小程序正式上线的那些事儿

期待许久的微信小程序正式于1月9日凌晨上线,用户只要将微信更新到最新版本(V6.5.3),即可通过扫描二维码,或搜索等方式体验微信小程序。体验微信小程序后,即可在微信「发现」菜单末尾出现诸如朋友圈各种...
  • English0523
  • English0523
  • 2017年01月09日 11:00
  • 1306

精品微信小程序源码demo推荐-仿饿了么点餐

http://bbs.html51.com/t-554-1-1/ 精品微信小程序源码demo推荐-仿饿了么点餐! 项目要求: 1.产品展示 2,点餐下单 3,价格,配送等 仿饿了么...
  • llixiangjian
  • llixiangjian
  • 2017年08月19日 17:46
  • 2801
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于进程的小程序(发错地了,重发....)
举报原因:
原因补充:

(最多只允许输入30个字)