1

下面的代码生成:

MyProgram1.exe 中 0x749ab763 处的未处理异常:0xC0000005:访问冲突写入位置 0x00d4eb38。

    SECURITY_ATTRIBUTES sa = {0};
    sa.nLength = sizeof(sa);
    STARTUPINFO si = {0};
    si.cb = sizeof(si);
    //si.cbReserved2 = sizeof(si);
    si.lpDesktop = L"winsta0\\default";

    CreateProcessAsUser(hUserTokenDup, NULL, L"Setup.exe", &sa, &sa, false, NORMAL_PRIORITY_CLASS | CREATE_NEW_CONSOLE, NULL, NULL, &si, &procinfo);

代码有什么问题吗?请帮忙

4

1 回答 1

4

CreateProcessAsUser(),指的是第三个参数:

此函数的 Unicode 版本 CreateProcessAsUserW 可以修改此字符串的内容。因此,此参数不能是指向只读内存的指针(例如 const 变量或文字字符串)。如果此参数是一个常量字符串,该函数可能会导致访问冲突。

改成:

WCHAR exeName[] = L"Setup.exe";

exeName并作为第三个参数传递。

于 2012-09-26T10:36:50.543 回答