C++ 如何设置进程?如何设置要处理的配额?

C++ 如何设置进程?如何设置要处理的配额?,c++,winapi,working-set,C++,Winapi,Working Set,我想使用SetProcessWorkingSetSize函数,在MSDN上我看到: 句柄必须具有进程\设置\配额访问权限。有关详细信息,请参阅进程安全性和访问权限 那么,我如何将PROCESS\u set\u QUOTA设置为PROCESS handle呢 我想编写一个程序,该程序运行的可执行文件具有工作集限制,因此有一段主要代码: STARTUPINFO si; memset(&si, 0, sizeof(si)); si.cb = sizeof(si); Ge

我想使用SetProcessWorkingSetSize函数,在MSDN上我看到:

句柄必须具有进程\设置\配额访问权限。有关详细信息,请参阅进程安全性和访问权限

那么,我如何将PROCESS\u set\u QUOTA设置为PROCESS handle呢

我想编写一个程序,该程序运行的可执行文件具有工作集限制,因此有一段主要代码:

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);
startupinfosi;
memset(&si,0,sizeof(si));
si.cb=sizeof(si);
GetStartupInfo&si;
si.dwFlags=0;
处理信息;
如果(!CreateProcess(
exePath.c_str(),
cmdParametersBuffer,
无效的
无效的
假,,
正常优先级等级,
无效的
无效的
&嗯,
&(圆周率)
{

难道你真的尝试了你展示的代码,但它不适合你吗?如果是,什么错误是
GetLastError()
reporting

如果您阅读文档,它会说:

处理所有访问权限
进程对象的所有可能访问权限。

CreateProcess函数返回的句柄对PROCESS对象具有PROCESS\u ALL\u访问权限


因此,您应该能够在
CreateProcess()
退出后调用
SetProcessWorkingSetSize()
,就像您所展示的那样,无需执行任何额外操作即可启用
PROCESS\u SET\u QUOTA
权限,因为它应该已经启用。

您的示例代码正在调用
SetProcessWorkingSetSize()
成功,因为您得到的错误为0。如果出现类似的错误,则您将知道呼叫失败

了解应用程序预计能够分配的内存超过其工作集大小可能会有所帮助。操作系统将从RAM中调出内存。如果使用任务管理器查看进程的工作集,它是否实际超过了您设置的配额


您可能还需要使用来强制操作系统实际应用您的设置。

Must downvote,net中充满了如何启用或禁用权限的示例。例如MSDN中的片段:据我所知,这个示例可以更改现有对象的权限。问题是如何设置权限以处理CreateProcess创建的对象。因此,我可以在网络中找不到任何答案,抱歉。你能帮我吗?嗨,谢谢你的回答。GetLastError返回0我只是编写了这个thest应用程序并使用这个代码示例运行它,但没有收到任何通知或错误消息。所以所有的工作都像我没有设置任何限制一样,所以我将工作集大小设置为100 Mb,但在应用程序中分配1Gb而没有错误或错误通知。那么,你能帮我吗?