У меня есть две анонимные дескрипторы канала. Я хочу передать один из них дочернему процессу.
Он работает правильно, если я вызываю 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? И это правильный обходной путь?