0

SetProcessWorkingSetSize 関数を使用したいのですが、MSDN では次のように表示されます。

「ハンドルには PROCESS_SET_QUOTA アクセス権が必要です。詳細については、プロセスのセキュリティとアクセス権を参照してください。」

では、PROCESS_SET_QUOTA をプロセス ハンドルに設定するにはどうすればよいですか?

ワーキング セットの制限付きで実行可能ファイルを実行するプログラムを作成したいので、主要なコードは次のとおりです。

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);
4

2 に答える 2

0

エラーが 0 であるため、コード例はSetProcessWorkingSetSize()正常に呼び出されています。次のようなエラーが発生した場合は0x522 ERROR_PRIVILEGE_NOT_HELD、呼び出しが失敗したことがわかります。

アプリがそのワーキング セット サイズよりも多くのメモリを割り当てることができると予想されることを知っておくと役立つ場合があります。OS は RAM からメモリをページアウトします。タスク マネージャーを使用してプロセスのワーキング セットを表示する場合、設定したクォータを実際に超えていますか?

OS に設定を実際に適用させるには、SetProcessWorkingSetSizeExフラグ QUOTA_LIMITS_HARDWS_MAX_ENABLEを使用する必要がある場合もあります。

于 2016-07-28T18:02:42.320 に答える