CreateJobObjectで指定されたジョブオブジェクトハンドルに現在のプロセスを割り当てるのに、関数を使用できないようです。これは既にStackOverflowで数回質問されていますが、これまでのところUACマニフェストの埋め込みに至るまでの解決策のどれも私にとってはうまくいかないようです。新しく作成されたジョブオブジェクトにどのように現在のプロセスを割り当てることができますか?
私はこれにWindows 7でMSVC9を使用しています。ここに私のサンプルアプリケーションと私は埋め込んだ小型マニフェストのソースコードです(たぶん問題を修正します - しかし、ではない私のために):
私のサンプルアプリケーション(main.cpp
):
#include <windows.h>
static void dumpLastError()
{
LPVOID lpMsgBuf;
DWORD dw = GetLastError();
FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM,
NULL,
dw,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
(LPTSTR) &lpMsgBuf,
0, NULL);
OutputDebugStringA((LPTSTR)lpMsgBuf);
LocalFree(lpMsgBuf);
}
int main()
{
HANDLE job = CreateJobObjectA(NULL, "demo job 123");
if (!job) {
OutputDebugStringA("CreateJobObject failed");
dumpLastError();
return 1;
}
if (!AssignProcessToJobObject(job, GetCurrentProcess())) {
OutputDebugStringA("AssignProcessToJobObject failed");
dumpLastError();
return 1;
}
return 0;
}
UACマニフェスト(main.exe.manifest
):
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<ms_asmv3:trustInfo xmlns:ms_asmv3="urn:schemas-microsoft-com:asm.v3">
<ms_asmv3:security>
<ms_asmv3:requestedPrivileges>
<ms_asmv3:requestedExecutionLevel level="requireAdministrator"/>
</ms_asmv3:requestedPrivileges>
</ms_asmv3:security>
</ms_asmv3:trustInfo>
</assembly>
私は
cl main.cpp
mt -manifest main.exe.manifest -outputresource:main.exe;1
を実行することによって、このサンプルをビルド
残念ながら、AssignProcessToJobObject
呼び出しを試みると、これらの手順の後に私のmain.exe
サンプルを実行すると、デバッグ出力に「アクセス拒否」エラーが発生します。誰がなぜそれが分かっていますか?
万が一cygwinを使用していますか?または、あなたのビルド/実行コマンドは、cmdのウィンドウですか? –
@ Ryan Calhoun:いいえ、私はCygwinを使用していませんが、PyCmd(単純なcmd.exeの置き換え)を使用しています。それは興味深い質問です!私はcmd.exeの中から試してみましたが、今はうまくいくようです!奇妙な –