У меня есть следующий фрагмент кода:установить режим сообщения именованный канал
//...
SafeFileHandle handle = NativeMethods.CreateFile(pipeName, FileAccess.ReadWrite, FileShare.None, IntPtr.Zero, FileMode.Open, FileAttributes.Normal, IntPtr.Zero);
if (handle.IsInvalid)
continue;
uint mode = (uint)PipeMode.ReadModeMessage; // mode==2
bool result = NativeMethods.SetNamedPipeHandleState(handle, ref mode, IntPtr.Zero, IntPtr.Zero);
//...
Проблема заключается в том, что вызов «SetNamedPipeHandleState» терпит неудачу: результат неверен и GetLastError() возвращает 5 (ERROR_ACCESS_DENIED). Кроме того, труба работает очень хорошо - я могу читать и писать данные. Кроме того, конечно, что он не работает в режиме сообщений - например. содержимое двух вызовов сообщений WriteFile считывается одним вызовом ReadFile. Что я здесь делаю неправильно?
Я уже писал, что труба создается в режиме сообщения в комментарии к ответу Ханса Пассана (который был удален). Я думал, что FileAccess.ReadWrite будет переводить на то же, что и GENERIC_READ | GENERIC_WRITE, но (как вы указали) это не так. –