biweb43836 Posted December 20, 2020 Posted December 20, 2020 Hi. I wanted to impose some memory usage limits on a process and found this: https://docs.microsoft.com/en-us/windows/win32/procthread/job-objects Job Objects look like the perfect tool for the job at hand, but no matter what I try, the _WinAPI_SetInformationJobObject function never succeeds. The problem can be reproduced as follows: #include <WinAPIProc.au3> #include <WinAPIDiag.au3> #include <ProcessConstants.au3> Local $hJob = _WinAPI_CreateJobObject() Local $tJobObjectInfo = DllStructCreate($tagJOBOBJECT_EXTENDED_LIMIT_INFORMATION) DllStructSetData($tJobObjectInfo, "LimitFlags", 0x2000) ;~ JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE _WinAPI_DisplayStruct($tJobObjectInfo, $tagJOBOBJECT_EXTENDED_LIMIT_INFORMATION) _WinAPI_SetInformationJobObject($hJob, $tagJOBOBJECT_EXTENDED_LIMIT_INFORMATION, $tJobObjectInfo) If Not _WinAPI_SetInformationJobObject($hJob, $tagJOBOBJECT_EXTENDED_LIMIT_INFORMATION, $tJobObjectInfo) Then MsgBox(0, 'SetInformationJobObject() failed', _WinAPI_GetLastError()) Else MsgBox(0, 'Success!', '') EndIf I based the code off the accepted answer in https://stackoverflow.com/a/9164742 but for some reason it always fails with an error code of 87 (0x57). Any clues?
biweb43836 Posted December 20, 2020 Author Posted December 20, 2020 Found the cause. The docs for the $iJobObjectInfoClass parameter say this: The information class for the limits to be set. This parameter specifies the type of $tJobObjectInfo structure, valid values: 2 - $tagJOBOBJECT_BASIC_LIMIT_INFORMATION 4 - $tagJOBOBJECT_BASIC_UI_RESTRICTIONS 5 - $tagJOBOBJECT_SECURITY_LIMIT_INFORMATION 6 - $tagJOBOBJECT_END_OF_JOB_TIME_INFORMATION 7 - $tagJOBOBJECT_ASSOCIATE_COMPLETION_PORT 9 - $tagJOBOBJECT_EXTENDED_LIMIT_INFORMATION 11 - $tagJOBOBJECT_GROUP_INFORMATION It caused me to pass $tagJOBOBJECT_EXTENDED_LIMIT_INFORMATION in there (which is a string describing the struct), but instead I had to specify the number 9 literally. Now it works as expected. Thanks.
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now