DuplicateHandle в WINAPI возвращает ERROR_ACCESS_DENIED - PullRequest
0 голосов
/ 05 августа 2011

У меня есть две анонимные дескрипторы канала. Я хочу передать один из них дочернему процессу.
Он работает правильно, если я вызываю DuplicateHandle, чтобы сделать дескриптор наследуемым для дескриптора записи канала, например:

DuplicateHandle(myHandle, fdCP[1], myHandle, &fdCP[1], DUPLICATE_SAME_ACCESS, 1, DUPLICATE_CLOSE_SOURCE);

Однако, делая это для дескриптора чтения другого канала, я получаю значение 0x00000000 в дескрипторе результата.

GetLastError в этом случае 5 (ERROR_ACCESS_DENIED). Я пытался предоставить SECURITY_ATTRIBUTES из GENERIC_ALL|SPECIFIC_RIGHTS_ALL при создании канала. Однако это не помогло.

Я заметил, что DuplicateHandle работает как положено, если вызывается на дескрипторе чтения следующим образом:

DuplicateHandle(myHandle, fdPC[0], myHandle, &fdPC[0], 0, 1, DUPLICATE_CLOSE_SOURCE | DUPLICATE_SAME_ACCESS);

В обоих случаях myHandle равен GetCurrentProcess().

Итак, вопрос в том, что это ошибка в WINAPI? И это правильный обходной путь?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...