分类: C/C++/MFC 2011-10-19 11:15 604人阅读 收藏 举报 Placing Restrictions on a Job's Processes
After creating a job, you will typically want to set up the sandbox (set restrictions) on what processes within the job can do. You can place several different types of restrictions on a job:
The basic limit and extended basic limit prevent processes within a job from monopolizing the system's resources.
Basic UI restrictions prevent processes within a job from altering the user interface.
Security limits prevent processes within a job from accessing secure resources (files, registry subkeys, and so on).
You place restrictions on a job by calling the following:
- BOOL SetInformationJobObject(
- HANDLE hJob,
- JOBOBJECTINFOCLASS JobObjectInformationClass,
- PVOID pJobObjectInformation,
- DWORD cbJobObjectInformationSize);
有些操作系统不能直接调用CreateJobObject的,需要从Kernel32.dll中导入:-
- HINSTANCE hInstance = ::LoadLibrary("Kernel32.dll");
- typedef HANDLE (__stdcall* funCreateJobObject)(LPSECURITY_ATTRIBUTES lpJobAttributes,LPCTSTR lpName) ;
- funCreateJobObject CreateJobObject = (funCreateJobObject)GetProcAddress(hInstance,"CreateJobObjectA");
- HANDLE hJob = CreateJobObject(NULL,"ProcessGroup");
- ::FreeLibrary(hInstance);
或者定义一个宏:
#define _WIN32_WINNT 0x0500实例:
- #define _WIN32_WINNT 0x0500 // 方法一
- #include <windows.h>
- #include <winbase.h>
- #include <iostream.h>
- #pragma comment(lib, "Kernel32.lib ")
-
- void main()
- {
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- HANDLE hJob=CreateJobObject(NULL,"Global\\My_Job_ago");
- if(hJob==NULL)
- {
- cout<<"CreateJobObject Error !\nError Code is"<<GetLastError()<<endl;
- }
-
- JOBOBJECT_SECURITY_LIMIT_INFORMATION jobsec={0};
- jobsec.SecurityLimitFlags =JOB_OBJECT_SECURITY_RESTRICTED_TOKEN;
- jobsec.PrivilegesToDelete=NULL;
- jobsec.RestrictedSids=NULL;
- jobsec.SidsToDisable=NULL;
-
- BOOL ret=SetInformationJobObject(hJob,
- JobObjectSecurityLimitInformation, \
- &jobsec, \
- sizeof(JOBOBJECT_SECURITY_LIMIT_INFORMATION)); \
-
-
-
- STARTUPINFO si={sizeof(STARTUPINFO)};
- PROCESS_INFORMATION pi={0};
-
- BOOL bret=CreateProcess(NULL,"notepad test.txt",NULL,NULL,FALSE,CREATE_SUSPENDED,NULL,NULL,&si,π);
-
- AssignProcessToJobObject(hJob,pi.hProcess);
-
- Sleep(1000);
- ResumeThread(pi.hThread);
- CloseHandle(pi.hThread);
- WaitForSingleObject(pi.hProcess,INFINITE);
- CloseHandle(pi.hProcess);
- CloseHandle(hJob);
-
- }
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请
点击举报。