Search code examples
c++winapiworking-set

How to set PROCESS_SET_QUOTA to process?


I want to use SetProcessWorkingSetSize function, and on MSDN i see this:

"The handle must have the PROCESS_SET_QUOTA access right. For more information, see Process Security and Access Rights."

So, how can i set PROCESS_SET_QUOTA to process handle?

I want to write program that runs executable with working set limits, so there is main piece of code:

STARTUPINFO si;
    memset(&si, 0, sizeof(si));
    si.cb = sizeof(si);
    GetStartupInfo(&si);
    si.dwFlags = 0;
    PROCESS_INFORMATION pi;

if (!CreateProcess(
        exePath.c_str(),
        cmdParametersBuffer,
        NULL,
        NULL,
        FALSE,
        NORMAL_PRIORITY_CLASS,
        NULL,
        NULL,
        &si,
        &pi))
    {
     cout << "error" << endl;
    }
SetProcessWorkingSetSize(pi.hProcess, 20 * 4 * 1024, 100*1024*1024);

Solution

  • Did you actually try the code you have showed and it is not working for you? If so, what error is GetLastError() reporting?

    If you read the documentation, it says:

    Process Security and Access Rights

    PROCESS_ALL_ACCESS
    All possible access rights for a process object.
    ...
    The handle returned by the CreateProcess function has PROCESS_ALL_ACCESS access to the process object

    So you should be able to call SetProcessWorkingSetSize() after CreateProcess() exits, exactly like you have showed, without doing anything extra to enable PROCESS_SET_QUOTA rights, as it should already be enabled.