Cześć
Próbuję napisać prosty klient FastCGI dla IIS, ale mam problem z dostaniem się do potoku IIS'a.
Funkcja CreateFile zawsze zwraca ERROR_PIPE_BUSY. Jak poprawnie dostać uchwyt potoku i wysłać odpowiedź?

#include <Windows.h>
#include <stdio.h>

#pragma warning(disable : 4996)

static void Log(const char * log, int logLen)
{
    FILE *  file;

    file = fopen("C:\\tmp\\log.log", "ab");
    fwrite(log, 1, logLen, file);
    fwrite("\n", 1, 1, file);
    fclose(file);
}
static void LogTxt(const char * log)
{
    Log(log, strlen(log));
}
static void LogErrCode(const char * log, int logLen, int err)
{
    char    buf[1024];

    itoa(err, buf, 10);

    strcat(buf, log);
    LogTxt(buf);
}

 int main(int argc, char * argv[])
{
    HANDLE      pipe;
    BOOL        fSuccess = FALSE;
    wchar_t     pipeName[1024];

    LogTxt(getenv("_FCGI_X_PIPE_"));

    while (1)
    {
        pipe = CreateFileA(getenv("_FCGI_X_PIPE_"), GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);

        // Break if the pipe handle is valid. 
        if (pipe != INVALID_HANDLE_VALUE)
            break;

        // Exit if an error other than ERROR_PIPE_BUSY occurs. 
        if (GetLastError() != ERROR_PIPE_BUSY)
        {
            LogErrCode(" Could not open pipe.", 21, GetLastError());
            return -1;
        }

        // All pipe instances are busy, so wait for 20 seconds. 
        if (!WaitNamedPipeA(getenv("_FCGI_X_PIPE_"), 2000))
        {
            LogErrCode(" Could not open pipe: 2 second wait timed out.", 45, GetLastError());
            return -1;
        }
    }
    return 0;
}