CreateProcess tem êxito, mas GetLastError () retorna acesso negado

Estou tendo uma pequena confusão devido aos valores de retorno conflitantes deCreateProcess() eGetLastError(). Quando eu usoCreateProcess() de uma maneira similar a abaixo, ele consegue e parece cumprir suas tarefas requeridas. Ainda,GetLastError() ainda retorna o acesso negado.

Se o acesso for negado, por que ele parece concluir a tarefa? Em contraste, seCreateProcess() consegue, porque éGetLastError() retornando o acesso negado?

Ou é o meu uso deGetLastError() incorreta? Eu só deveria usá-lo quandoCreateProcess() retorna um valor com falha? (Minha justificativa para o comportamento abaixo foi que achei que era melhor prevenir do que remediar)

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

Esse tipo de comportamento é normal? NoCreateProcess() documentação, menciona usarGetLastError() quandoCreateProcess() falha, mas não menciona o inverso. Não criticar a documentação, gostaria apenas de alguns esclarecimentos.

Isso ocorre se o segundo parâmetro emCreateProcess() éNULL ou não. Talvez tenha a ver comcmd.exe permissões? Se for esse o caso, não deveCreateProcess() falhou? Obrigado.

questionAnswers(2)

yourAnswerToTheQuestion