最新公告
  • 欢迎您光临立业阁,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入我们
  • 一个删除进程的小程序详细介绍_小程序开发教程


    看windows api的时候,作为练习,编写了个删除进程的程序。觉得里面知识点挺多的,所以贴上来当个笔记用。当然难免有错误,欢迎指教 ^^
    其中也用到了篇文章里面说到的调整权限的函数,于是就直接从关机程序里面copy过来了。下面是程序,关键地方给了注释。

    看windows api的时候,作为练习,编写了个删除进程的程序。觉得里面知识点挺多的,所以贴上来当个笔记用。当然难免有错误,欢迎指教 ^^    
    其中也用到了上篇文章里面说到的调整权限的函数,于是就直接从关机程序里面copy过来了。下面是程序,关键地方给了注释。
    #include<stdio.h>
    #include<windows.h>
    #include<Tlhelp32.h>
    
    void ListProcess()                        //列出进程名称及ID
    {
        HANDLE hProcessSnap=NULL;
        PROCESSENTRY32 pe32={0};            //存放进程信息的结构体
        hProcessSnap=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);        //创建系统所有进程的快照
        if(hProcessSnap==INVALID_HANDLE_VALUE)
        {
            printf("CreateToolhelp32Snapshot failed: %d\n",GetLastError());
            return;
        }
        pe32.dwSize=sizeof(PROCESSENTRY32);
        printf("ProcessName            ProcessID\n");
        if(Process32First(hProcessSnap,&pe32))                //指向第一个进程,并将其放入PROCESSENTRY32结构体中
        {
            char c[5];
            do
            {
                itoa(pe32.th32ProcessID,c,10);
                printf("%-30s%d\n",pe32.szExeFile,pe32.th32ProcessID);        //szExeFile为进程的可执行文件名称
            }
            while(Process32Next(hProcessSnap,&pe32));
        }
        else
        {
            printf("Process32First() failed:%d\n",GetLastError());
        }
        CloseHandle(hProcessSnap);
        return;
    }
    
    BOOL EnablePrivilege()                //获取系统权限
    {
        HANDLE hProcess = NULL;
        HANDLE hToken = NULL;
        LUID uID = {0};
        TOKEN_PRIVILEGES stToken_Privileges = {0};
        hProcess = GetCurrentProcess();                                    //获取当前应用程序进程句柄
        if(!OpenProcessToken(hProcess,TOKEN_ADJUST_PRIVILEGES,&hToken))    //打开当前进程的访问令牌句柄
                                                                        //(OpenProcessToken函数调用失败返回值为零)
            return FALSE;
        if(!LookupPrivilegeValue(NULL,SE_SHUTDOWN_NAME,&uID))        //获取权限名称为"SeShutdownPrivilege"的LUID
                                                                    //LookupPrivilegeValue函数调用失败返回值为零
            return FALSE;
        stToken_Privileges.PrivilegeCount = 1;                            //欲调整的权限个数
        stToken_Privileges.Privileges[0].Luid = uID;                    //权限的LUID
        stToken_Privileges.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;        //权限的属性,
                                                                                //SE_PRIVILEGE_ENABLED为使能该权限
        //调整访问令牌里的指定权限(AdjustTokenPrivileges函数调用失败返回值为零)
        if(!AdjustTokenPrivileges(hToken,FALSE,&stToken_Privileges,sizeof stToken_Privileges,NULL,NULL))
            return FALSE;
        if(GetLastError() != ERROR_SUCCESS)                                //查看权限是否调整成功
            return FALSE;
        CloseHandle(hToken);
        return TRUE;
    }
    
    bool KillProcess(DWORD id)
    {
        HANDLE hProcess=NULL,hProcessToken=NULL;
        bool isKilled=false,bRet=false;
    
        EnablePrivilege();                    //调整权限
        printf("Enable Privilege OK!\n");
        if((hProcess=OpenProcess(PROCESS_ALL_ACCESS,FALSE,id))==NULL)    //打开进程获得句柄
        {
            printf("Open process %d failed: %d\n",id,GetLastError());
            return false;
        }
        if(!TerminateProcess(hProcess,1))                                //终结进程
        {
            printf("TerminateProcess failed: %d\n",GetLastError());
            return false;
        }
        isKilled=true;
        if(hProcessToken!=NULL)
            CloseHandle(hProcessToken);
        if(hProcess!=NULL)
            CloseHandle(hProcess);
        return isKilled;
    }
    
    void main()
    {
        int id=0;
        ListProcess();
        while(1)
        {
            printf("选择要删除的进程ID:");
            scanf("%d",&id);
            if(KillProcess(id)==true)
            {
                system("cls");
                ListProcess();
            }
            else
                printf("Failed!!");
        }
    }

    以上就是一个删除进程的小程序详细介绍的详细内容,更多请关注liyege.cn其它相关文章!

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    • 1154会员总数(位)
    • 111856资源总数(个)
    • 6本周发布(个)
    • 0 今日发布(个)
    • 240稳定运行(天)

    提供最优质的资源集合

    立即查看 了解详情
    冀ICP备19022365号-1 百度地图

    侵权联系邮箱[email protected]

    立业阁(www.liyege.cn)免费提供wordpress主题模板、dedecms模板、帝国cms模板、小说网站源码、电影网站源码以及网络技术分享,建站源码,小说模板,电影模板,网赚教程,VPS推荐