CreateProcess tiene éxito, pero GetLastError () devuelve acceso denegado

Estoy teniendo un poco de confusión debido a valores de retorno conflictivos deCreateProcess() yGetLastError(). Cuando yo usoCreateProcess() de una manera similar a la siguiente, tiene éxito y parece cumplir sus tareas requeridas. Todavía,GetLastError() Todavía se devuelve el acceso está denegado.

Si se niega el acceso, ¿por qué parece que se completa la tarea? En contraste, siCreateProcess() tiene éxito, porque esGetLastError() ¿Acceso de regreso denegado?

O es mi uso deGetLastError() ¿incorrecto? ¿Se supone que solo debo usarlo cuandoCreateProcess() devuelve un valor fallido? (Mi justificación para el siguiente comportamiento fue que pensé que era mejor prevenir que curar)

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

¿Es este tipo de comportamiento normal? En elCreateProcess() Documentación, se menciona utilizando.GetLastError() cuandoCreateProcess() Falla, pero no menciona lo inverso. No criticar la documentación, solo quisiera una aclaración.

Esto ocurre si el segundo parámetro enCreateProcess() esNULL o no. Tal vez tenga que ver concmd.exe permisos? Si ese es el caso, no deberíaCreateProcess() ¿fallar? Gracias.

Respuestas a la pregunta(2)

Su respuesta a la pregunta