| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3293 人关注过本帖
标题:求助 AssignProcessToJobObject 函数的成功调用示例
只看楼主 加入收藏
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
结帖率:95.24%
收藏
已结贴  问题点数:100 回复次数:27 
求助 AssignProcessToJobObject 函数的成功调用示例
最近想写一个ACM后台测评程序的内核,正在写运行模块 基本思路就是
1.创建运行的进程,让后让进城挂起。
2.创建一个作业,然后放置限制信息,包括时间,内存,输入输出等。。。
3.把作业关联到一个端口,然后就可以在端口处查询作业的信息
4.把进程放到作业里面,问题就出到这一步,GetLastError返回的错误信息时没有权限
5.唤醒进程,让他运行然后去端口查询信息即可

下面是源代码  注释已经写好了  很容易看懂  求大神不吝赐教  如果需要报酬 联系我QQ 553069938

程序代码:
#define _WIN32_WINNT 0x0500
#include<Windows.h>
#include<WinSafer.h>
#include<iostream>
#include<string>
#include<fstream>
#include <iostream>
using namespace std;
int main()
{
    SECURITY_ATTRIBUTES sa;//安全结构体,在CreateFile中使用
    sa.nLength = sizeof( SECURITY_ATTRIBUTES );
    sa.bInheritHandle = TRUE;
    sa.lpSecurityDescriptor = NULL;


    PROCESS_INFORMATION piProcInfo;
    STARTUPINFO siStartInfo;//启动信息结构体,设置它的hStdOutput和hStdInput可以重定用户进程的数据输入与输出

    ZeroMemory(&piProcInfo, sizeof(PROCESS_INFORMATION));

    ZeroMemory(&siStartInfo, sizeof(STARTUPINFO));
    
    siStartInfo.cb = sizeof(STARTUPINFO);
    siStartInfo.dwFlags |= STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW;
    siStartInfo.wShowWindow = SW_HIDE;//让用户进程的窗口隐藏启动
    char cmd[200] = "notepad";
    CreateProcess(NULL,cmd,NULL,NULL,TRUE,CREATE_SUSPENDED ,NULL,NULL,&siStartInfo,&piProcInfo);


    HANDLE hJob = CreateJobObject(NULL, NULL);//创建作业对象,利用它来限制用户进程运行
    JOBOBJECT_EXTENDED_LIMIT_INFORMATION lim;//作业扩展限制
    
    lim.BasicLimitInformation.ActiveProcessLimit = 1;//限制用户进程不能创建新进程
        
    lim.BasicLimitInformation.PerProcessUserTimeLimit.QuadPart =(LONGLONG)(1000 *10000); //设置运行时间
        
    lim.JobMemoryLimit = (size_t)(65536 *1024); //设置运行内存
        
    lim.BasicLimitInformation.LimitFlags = JOB_OBJECT_LIMIT_ACTIVE_PROCESS
            | JOB_OBJECT_LIMIT_PROCESS_TIME
            | JOB_OBJECT_LIMIT_JOB_MEMORY
            | JOB_OBJECT_LIMIT_DIE_ON_UNHANDLED_EXCEPTION;
        
    SetInformationJobObject(hJob, JobObjectExtendedLimitInformation, &lim,sizeof(lim));
    
    JOBOBJECT_BASIC_UI_RESTRICTIONS uiLim;
        
    uiLim.UIRestrictionsClass = JOB_OBJECT_UILIMIT_EXITWINDOWS //限制用户进程进行关机,更改本机设置
             | JOB_OBJECT_UILIMIT_SYSTEMPARAMETERS       //限制更改系统变量
             | JOB_OBJECT_UILIMIT_HANDLES           //不能访问外部进程对象
             | JOB_OBJECT_UILIMIT_DESKTOP            //创建窗口
                | JOB_OBJECT_UILIMIT_DISPLAYSETTINGS;   
             
        
    SetInformationJobObject(hJob, JobObjectBasicUIRestrictions, &uiLim,sizeof(uiLim));
    
    JOBOBJECT_ASSOCIATE_COMPLETION_PORT info_port;
        
    //建立作业完成端口,因为作业对象要与完成端口相关联
    HANDLE port = CreateIoCompletionPort(INVALID_HANDLE_VALUE, NULL, NULL, 0);
    info_ = port;

    cout<<SetInformationJobObject(hJob, JobObjectAssociateCompletionPortInformation,&info_port, sizeof(info_port));
    
    cout<<AssignProcessToJobObject(hJob, piProcInfo.hProcess);//用户进程与作业对象关联起来,这样就可以利用作业对象来限制用户进程

    cout<<ResumeThread(piProcInfo.hThread);//唤醒用户线程

    cout<<CloseHandle(piProcInfo.hThread);
    return 0;
}
搜索更多相关主题的帖子: 信息 源代码 
2012-12-24 09:37
yuccn
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:何方
等 级:版主
威 望:167
帖 子:6815
专家分:42393
注 册:2010-12-16
收藏
得分:0 
win7 测试的,操作之前做下提权 看看

我行我乐
公众号:逻辑客栈
我的博客:
https://blog.yuccn. net
2012-12-24 09:48
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
收藏
得分:0 
回复 2楼 yuccn
Win7 我也测试过   下面这句调用一直返回0
函数的返回类型是布尔型  参数一是作业的句柄,参数二是进程的句柄 两个都不是NULL
但是返回值是NULL  你可以用下GetLastError  我获得的错误值是5  代表权限不够

cout<<AssignProcessToJobObject(hJob, piProcInfo.hProcess);//用户进程与作业对象关联起来,这样就可以利用作业对象来限制用户进程

                                         
===========深入<----------------->浅出============
2012-12-24 09:54
yaobao
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:蒙面侠
威 望:4
帖 子:1854
专家分:4121
注 册:2012-10-25
收藏
得分:0 
膜拜

认认真真的学习,踏踏实实的走路:戒骄戒躁!!!
2012-12-24 10:09
青春无限
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江苏
等 级:贵宾
威 望:24
帖 子:3452
专家分:19340
注 册:2012-3-31
收藏
得分:0 
学习

学 会看代码…学习写程序…学会搞开发…我的目标!呵呵是不是说大话啊!!一切皆可能
2012-12-24 10:40
yuccn
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:何方
等 级:版主
威 望:167
帖 子:6815
专家分:42393
注 册:2010-12-16
收藏
得分:0 
Parameters
 hJob [in]
A handle to the job object to which the process will be associated. The CreateJobObject or OpenJobObject function returns this handle. The handle must have the JOB_OBJECT_ASSIGN_PROCESS access right. For more information, see Job Object Security and Access Rights.
 hProcess [in]
A handle to the process to associate with the job object. The handle must have the PROCESS_SET_QUOTA and PROCESS_TERMINATE access rights. For more information, see Process Security and Access Rights.
 
If the process is already associated with a job, the job specified by hJob must be empty or it must be in the hierarchy of nested jobs to which the process already belongs, and it cannot have UI limits set (SetInformationJobObject with JobObjectBasicUIRestrictions). For more information, see Remarks.


Windows 7, Windows Server 2008 R2, Windows XP with SP3, Windows Server 2008, Windows Vista, and Windows Server 2003:  The process must not already be assigned to a job; if it is, the function fails with ERROR_ACCESS_DENIED. This behavior changed starting in Windows 8 and Windows Server 2012.
 

Terminal Services:  All processes within a job must run within the same session as the job.

对于进程 确保你的程序有这两个权限吧(红色标注),


[ 本帖最后由 yuccn 于 2012-12-24 10:42 编辑 ]

我行我乐
公众号:逻辑客栈
我的博客:
https://blog.yuccn. net
2012-12-24 10:41
yuccn
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:何方
等 级:版主
威 望:167
帖 子:6815
专家分:42393
注 册:2010-12-16
收藏
得分:10 
SetInformationJobObject 这一步已经就出错了,1314 错误码(客户端没有所需的特权。 )

先给程序提权吧。

我行我乐
公众号:逻辑客栈
我的博客:
https://blog.yuccn. net
2012-12-24 10:47
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
收藏
得分:0 
不懂,帮顶!

My life is brilliant
2012-12-24 15:39
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
收藏
得分:0 
回复 7楼 yuccn
SetInformationJobObject 我GetLastError 貌似没有错误  而且返回值也是真

不知道你那里输出了什么   一会我看下你的那段英文解释

另外  我对windows编程不是很懂   求赐教个成功调用示例

                                         
===========深入<----------------->浅出============
2012-12-24 16:12
hit小龙
Rank: 6Rank: 6
等 级:侠之大者
帖 子:173
专家分:462
注 册:2012-12-6
收藏
得分:0 
都是大神啊
膜拜……
2012-12-24 16:57
快速回复:求助 AssignProcessToJobObject 函数的成功调用示例
数据加载中...
 
   



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

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