Fre*_*abe 2 c++ windows winapi
我似乎无法使用AssignProcessToJobObject函数将当前进程分配给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;
}
Run Code Online (Sandbox Code Playgroud)
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>
Run Code Online (Sandbox Code Playgroud)
我通过运行来构建此示例
cl main.cpp
mt -manifest main.exe.manifest -outputresource:main.exe;1
Run Code Online (Sandbox Code Playgroud)
不幸的是,main.exe在尝试执行这些步骤之后运行示例仍会在调试输出中产生“访问被拒绝”错误AssignProcessToJobObject。有人知道为什么吗?
小智 6
我知道这是一个老问题,但是最近我遇到了完全相同的问题。如建议的那样,直到几分钟前我一直在使用命令行解决方法,我发现了这篇文章。
自创建流程以来,我只是按照文章中的说明将CREATE_BREAKAWAY_FROM_JOB添加到流程创建标志中:
CreateProcess(szPath, NULL, NULL, NULL, FALSE, NORMAL_PRIORITY_CLASS, NULL, NULL, &si, &pi)
Run Code Online (Sandbox Code Playgroud)
与
CreateProcess(szPath, NULL, NULL, NULL, FALSE, NORMAL_PRIORITY_CLASS | CREATE_BREAKAWAY_FROM_JOB, NULL, NULL, &si, &pi)
Run Code Online (Sandbox Code Playgroud)
我进行了测试,它可以按预期工作,该进程已分配给该作业,没有UAC清单,没有命令行。
希望它可以帮助您或其他任何有此问题的人。
| 归档时间: |
|
| 查看次数: |
2596 次 |
| 最近记录: |