HANDLE CreateSandBox(){
HANDLE hjob =CreateJobObject(NULL,NULL);
if(hjob!=NULL)
{
JOBOBJECT_BASIC_LIMIT_INFORMATION jobli;
memset(&jobli,0,sizeof(jobli));
jobli.LimitFlags=JOB_OBJECT_LIMIT_PRIORITY_CLASS|JOB_OBJECT_LIMIT_ACTIVE_PROCESS|/*JOB_OBJECT_LIMIT_WORKINGSET*/|JOB_OBJECT_LIMIT_PROCESS_TIME;
jobli.PriorityClass=IDLE_PRIORITY_CLASS;
jobli.ActiveProcessLimit=nProcessLimit; //Limit of processes
// jobli.MinimumWorkingSetSize= 1;
// jobli.MaximumWorkingSetSize= 1024*memory_limit;
jobli.PerProcessUserTimeLimit.QuadPart=10000*time_limit;
if(SetInformationJobObject(hjob,JobObjectBasicLimitInformation,&jobli,sizeof(jobli)))
{
JOBOBJECT_BASIC_UI_RESTRICTIONS jobuir;
jobuir.UIRestrictionsClass=JOB_OBJECT_UILIMIT_NONE;
jobuir.UIRestrictionsClass |=JOB_OBJECT_UILIMIT_EXITWINDOWS;
jobuir.UIRestrictionsClass |=JOB_OBJECT_UILIMIT_READCLIPBOARD ;
jobuir.UIRestrictionsClass |=JOB_OBJECT_UILIMIT_WRITECLIPBOARD ;
jobuir.UIRestrictionsClass |=JOB_OBJECT_UILIMIT_SYSTEMPARAMETERS;
jobuir.UIRestrictionsClass |=JOB_OBJECT_UILIMIT_HANDLES;
if(SetInformationJobObject(hjob,JobObjectBasicUIRestrictions,&jobuir,sizeof(jobuir)))
{
return hjob;
}
else
{
write_log("SetInformationJobObject1 JOBOBJECT_BASIC_UI_RESTRICTIONS [Error:%d]\n",GetLastError());
}
}
else
{
write_log("SetInformationJobObject2 JOBOBJECT_BASIC_LIMIT_INFORMATION [Error:%d]\n",GetLastError());
}
}
else
{
write_log("CreateJobObject [Error:%d]\n",GetLastError());
}
return NULL;
}
源代碼如上,去掉注釋部分就沒有錯誤,可是在LimitFlags加上JOB_OBJECT_LIMIT_WORKINGSET這一限制就會出錯
SetInformationJobObject2 JOBOBJECT_BASIC_LIMIT_INFORMATION [Error:87]
GetLastError()值為87
求解,什么原因不能JOB_OBJECT_LIMIT_WORKINGSET,是可用記憶體太小嗎,一開始設定1024*1024*128,128M,后來設定成1024,1K也不行,怎么回事啊
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/136969.html
標籤:Windows客戶端使用
