Jump to content

Recommended Posts

Posted

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?

Posted

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.

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...