我有两个匿名管柄。我想将其中一个传递给子进程
如果我调用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中的错误吗?这是一个正确的解决方法吗?