В примере MSDN
https://docs.microsoft.com/en-us/windows/desktop/ipc/named-pipe-client
Клиентская сторона делает это
while (true)
{
pipe = CreateFile
if pipe is not invalid break
if GetLastError return
if !wait for pipe return
}
// The pipe connected; change to message-read mode.
*** Why do I need to call this function? ****
dwMode = PIPE_READMODE_MESSAGE;
fSuccess = SetNamedPipeHandleState(
hPipe, // pipe handle
&dwMode, // new pipe mode
NULL, // don't set maximum bytes
NULL); // don't set maximum time
if ( ! fSuccess)
{
_tprintf( TEXT("SetNamedPipeHandleState failed. GLE=%d\n"), GetLastError() );
return -1;
}
... теперь напишите наше сообщение в трубу
Так вот мой вопрос
1. Что это делает? Нигде в этом примере SetNamedPipeHandleState не дано другое значение
2. Мое приложение работает довольно счастливо без него
3. Есть случай, когда Explorer запускает мое приложение как зарегистрированное приложение. В этом случае он не может подключиться к серверу, так как в этой строке выводится
error 87
ERROR_INVALID_PARAMETER
87 (0x57)
The parameter is incorrect.
... но работает без этого звонка. Я не хочу вызывать эту функцию. (!)
Есть предложения?