CreateNamedPipe ERROR_INVALID_NAME

Ave*_*y3R 2 winapi multithreading named-pipes visual-c++

代码段:

void RunThread(void* unused_args)
{
    PSECURITY_DESCRIPTOR sdsc;
    ULONG size;
    ConvertStringSecurityDescriptorToSecurityDescriptor("S:(ML;;NW;;;LW)", SDDL_REVISION_1, &sdsc, &size);
    SECURITY_ATTRIBUTES sa;
    sa.nLength = sizeof(sa);
    sa.bInheritHandle = false;
    sa.lpSecurityDescriptor = sdsc;
    HANDLE pipe = CreateNamedPipe("\\.\pipe\mmaivpc_test_pipe", PIPE_ACCESS_DUPLEX, PIPE_TYPE_BYTE, 255, 1024, 1024, 0, &sa);
    DWORD error = GetLastError();
}
Run Code Online (Sandbox Code Playgroud)

如果你还没有从函数名中找到它,那么这个函数就会被调用_beginthread. GetLastError()正在回归ERROR_INVALID_NAME,我无法弄清楚为什么.

hmj*_*mjd 5

您需要转义用于管道名称的字符串文字中的反斜杠:

HANDLE pipe = CreateNamedPipe("\\\\.\\pipe\\mmaivpc_test_pipe",
                              PIPE_ACCESS_DUPLEX, 
                              PIPE_TYPE_BYTE, 255, 1024, 1024, 0, &sa);
Run Code Online (Sandbox Code Playgroud)