| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3293 人关注过本帖
标题:求助 AssignProcessToJobObject 函数的成功调用示例
只看楼主 加入收藏
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
收藏
得分:0 
回复 15楼 beyondyf
恩 windows server 2003的

杨大哥  我就算是回来看看吧  因为我下学期就不来了  还有两个星期放假

虽然说以后不准备干这行了,但是我还是舍不得这个论坛,毕竟在这呆了两年多了

还认识了很多好朋友,以后就把编程当做一个兴趣爱好啦。呵呵  就像杨大哥那样

[ 本帖最后由 laoyang103 于 2012-12-25 15:10 编辑 ]

                                         
===========深入<----------------->浅出============
2012-12-25 15:06
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
收藏
得分:0 
回复 20楼 wp231957
多谢这位兄弟,一会我去试试你的代码,如果可以那就太谢谢你了

看来你搞windows已经很久了,以后要多向你学习学习,不知可否交个朋友?

                                         
===========深入<----------------->浅出============
2012-12-25 15:09
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
没问题啊

DO IT YOURSELF !
2012-12-25 15:57
zhangfudong
Rank: 4
等 级:业余侠客
帖 子:119
专家分:212
注 册:2012-12-12
收藏
得分:0 
神啊!赐给我力量把!
2012-12-26 12:14
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
更改了一下 代码  我这里测试无ERRCODE=5的出现(系统xp)
程序代码:
#include <stdio.h>
#include <windows.h> 
#include <winbase.h>
#define MEM_LIMIT 4096*1000  

int main(int argc, char* argv[])
{   
    HANDLE hjob;   
    char *job_name="J1",*pro_name="notepad";   
    int err;   
    JOBOBJECT_EXTENDED_LIMIT_INFORMATION joeli;
    JOBOBJECT_SECURITY_LIMIT_INFORMATION securityLimit;
    ZeroMemory(&securityLimit, sizeof(securityLimit)); 
    JOBOBJECT_BASIC_LIMIT_INFORMATION jbii={0};   
    STARTUPINFOA si ={sizeof(si)};   
    PROCESS_INFORMATION pi;   
      

    if((hjob=CreateJobObjectA(NULL,job_name))==NULL)   
    {       
        printf("Cannot create job!\n");       
        return 1;   
    }     
    joeli.BasicLimitInformation.LimitFlags=JOB_OBJECT_LIMIT_PROCESS_MEMORY;   
    joeli.ProcessMemoryLimit=MEM_LIMIT;     
    if(SetInformationJobObject(hjob,JobObjectExtendedLimitInformation,&joeli,sizeof(joeli))==0)   
    {      
        err=GetLastError();       
        printf("Fail to set job attributes, Error Code:%d\n",err);       
        return 1;  
    } 
   
    if(CreateProcessA(NULL,pro_name,NULL ,NULL,FALSE,CREATE_BREAKAWAY_FROM_JOB ,NULL,NULL,&si,&pi)==0)   
    {       
        err=GetLastError();       
        printf("Cannot create Process %s, Error Code:%d\n",pro_name,err);       
        return 1;   
    }       
    if(!AssignProcessToJobObject(hjob,pi.hProcess))   
    {       
        err=GetLastError();       
        printf("Fail to assign process to job Eror Code:%d\n",err);  
    }     
    ResumeThread(pi.hThread);     
    WaitForSingleObject(pi.hProcess,INFINITE);     
    return 0;
}


DO IT YOURSELF !
2012-12-29 09:22
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
程序代码:
#include <stdio.h>
#include <windows.h> 
#include <winbase.h>
#define MEM_LIMIT 4096*1000  

int main(int argc, char* argv[])
{   
    HANDLE hjob;   
    char *job_name="J1",*pro_name="notepad";   
    int err;   
    JOBOBJECT_EXTENDED_LIMIT_INFORMATION joeli;
    JOBOBJECT_SECURITY_LIMIT_INFORMATION securityLimit;
    ZeroMemory(&securityLimit, sizeof(securityLimit)); 
    JOBOBJECT_BASIC_LIMIT_INFORMATION jbii={0};   
    STARTUPINFOA si ={sizeof(si)};   
    PROCESS_INFORMATION pi;   
    //以下代码主要功能就是提权
    HANDLE hToken;
    TOKEN_PRIVILEGES tkp;
    if (!OpenProcessToken(GetCurrentProcess() ,TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY ,&hToken))
    {
        return false;
    }
    if ( !LookupPrivilegeValue( NULL, SE_SHUTDOWN_NAME, &tkp.Privileges[0].Luid ) )
    {
        CloseHandle( hToken );
        return false;
    }
    tkp.PrivilegeCount = 1;
    tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;

    if ( !AdjustTokenPrivileges( hToken, FALSE, &tkp, sizeof(TOKEN_PRIVILEGES), NULL, NULL ) )
    {
        CloseHandle( hToken );
        return false;
    }
    //以上所有代码都是为了提权,是为下面的函数做准备工作的*/

    if((hjob=CreateJobObjectA(NULL,job_name))==NULL)   
    {       
        printf("Cannot create job!\n");       
        return 1;   
    }     
    joeli.BasicLimitInformation.LimitFlags=JOB_OBJECT_LIMIT_PROCESS_MEMORY;   
    joeli.ProcessMemoryLimit=MEM_LIMIT;     
    if(SetInformationJobObject(hjob,JobObjectExtendedLimitInformation,&joeli,sizeof(joeli))==0)   
    {      
        err=GetLastError();       
        printf("Fail to set job attributes, Error Code:%d\n",err);       
        return 1;  
    } 
   
    if(CreateProcessA(NULL,pro_name,NULL ,NULL,FALSE,CREATE_BREAKAWAY_FROM_JOB ,NULL,NULL,&si,&pi)==0)   
    {       
        err=GetLastError();       
        printf("Cannot create Process %s, Error Code:%d\n",pro_name,err);       
        return 1;   
    }       
    if(!AssignProcessToJobObject(hjob,pi.hProcess))   
    {       
        err=GetLastError();       
        printf("Fail to assign process to job Eror Code:%d\n",err);  
    }     
    ResumeThread(pi.hThread);     
    WaitForSingleObject(pi.hProcess,INFINITE);     
    return 0;
}
貌似25-26楼的代码都可以的

DO IT YOURSELF !
2012-12-30 08:02
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
收藏
得分:0 
回复 26楼 wp231957
多谢大哥   windows7测试通过  我会尽快完善我的后台测评程序

以后遇到不会的地方还请大哥多多帮忙

                                         
===========深入<----------------->浅出============
2012-12-30 09:08
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
ok

DO IT YOURSELF !
2012-12-30 09:25
快速回复:求助 AssignProcessToJobObject 函数的成功调用示例
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.026805 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved