由于CreateProcess()GetLastError()的返回值冲突,我有些困惑。当我以类似于下面的方式使用CreateProcess()时,它成功并似乎完成了所需的任务。但是,GetLastError()仍然返回Access is Denied。

如果访问被拒绝,为什么会完成任务。相反,如果CreateProcess()成功,为什么GetLastError()返回访问被拒绝?

还是我对GetLastError()的使用不正确?我只应在CreateProcess()返回失败值时使用它吗? (我对以下行为的辩解是,我认为安全比后悔更好)

    SetLastError(0);
    hello = CreateProcess(_T("C:\\Windows\\System32\\cmd.exe"),
        _T("C:\\Windows\\System32\\cmd.exe /C ant debug"),
        NULL,NULL,false,0,NULL,
        _T("C:\\My\\Directory"),&siStartupInfo, &piProcessInfo);
    FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM |FORMAT_MESSAGE_ALLOCATE_BUFFER
        |FORMAT_MESSAGE_IGNORE_INSERTS,NULL,GetLastError(),
        MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
        (LPTSTR)&errorText, 0, NULL);
    AfxMessageBox(errorText);

这种行为正常吗?在CreateProcess()文档中,它提到GetLastError()失败时使用CreateProcess(),但没有提及相反的用法。不批评文档,只是想澄清一下。

无论CreateProcess()中的第二个参数是否为NULL,都会发生这种情况。也许与cmd.exe权限有关?如果是这种情况,CreateProcess()不应该失败吗?谢谢。

最佳答案

来自GetLastError的文档



我认为您获得了有经验的结果,因为成功成功后,CreateProcess不会设置GetLastError返回的错误值。相反,您对GetLastError的调用会返回由先前调用的另一个函数设置的错误

关于c++ - CreateProcess成功,但是GetLastError()返回拒绝访问,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11089825/

10-13 06:44