Именованные каналы - Что делает SetNamedPipeHandleState? - PullRequest
0 голосов
/ 24 января 2019

В примере 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.

... но работает без этого звонка. Я не хочу вызывать эту функцию. (!)

Есть предложения?

...