为 Intranet 主机创建 C++ 命名管道
Posted
技术标签:
【中文标题】为 Intranet 主机创建 C++ 命名管道【英文标题】:Creating C++ Named Pipes for Intranet hosts 【发布时间】:2013-11-11 08:11:13 【问题描述】:我一直在尝试使用微软代码创建命名管道:
http://code.msdn.microsoft.com/windowsdesktop/CppNamedPipeClient-a88eb958
我还从其他地方获取了安全令牌:
SECURITY_ATTRIBUTES sa;
sa.lpSecurityDescriptor = (PSECURITY_DESCRIPTOR)malloc(
SECURITY_DESCRIPTOR_MIN_LENGTH);
InitializeSecurityDescriptor(sa.lpSecurityDescriptor,
SECURITY_DESCRIPTOR_REVISION);
// ACL is set as NULL in order to allow all access to the object.
SetSecurityDescriptorDacl(sa.lpSecurityDescriptor, TRUE, NULL, FALSE);
sa.nLength = sizeof(sa);
sa.bInheritHandle = TRUE;
我想在我的 ip 上声明服务器而不是本地,以便它被 Intranet 上的其他电脑访问:
#define SERVER_NAME L"10.12.13.122" ("." works)
#define PIPE_NAME L"SamplePipe"
#define FULL_PIPE_NAME L"\\\\" SERVER_NAME L"\\pipe\\" PIPE_NAME
之前有没有人为 C++ 声明过这个?这是拒绝创建命名管道...
【问题讨论】:
您收到什么错误代码/消息?在创建管道的服务器端(即在 CreateNamedPipe() 中)或在客户端(即在 CreateFile() 中)时是否会发生错误?您是否尝试将 NULL 作为您的安全属性? 服务器端,0x7b 【参考方案1】:0x7B 是 ERROR_INVALID__NAME。 “管道服务器无法在另一台计算机上创建管道,因此 CreateNamedPipe 必须使用句点作为服务器名称,如以下示例所示 \\.\pipe\PipeName”:请参阅MSDN。不要忘记将字符串文字的反斜杠加倍。
【讨论】:
以上是关于为 Intranet 主机创建 C++ 命名管道的主要内容,如果未能解决你的问题,请参考以下文章