我正在尝试使用 NamedPipe 在 Win10 中的应用程序和服务之间进行通信。APP是用C#(UWP)开发的,前台作为Pipe Client运行。服务是 C++ 运行后台作为管道服务器。现在的问题是APP无法连接服务。我知道 MSFT 文档说管道仅在应用程序容器中受支持。但我尝试了以下情况:我的 uwp 应用程序 VS C#(nonUWP) 服务器(不在应用程序容器中);C++ 客户端 VS C++ 服务器(与服务相同的代码,除了在前台运行)。两种情况都可以正常工作。所以我认为它的安全权限可能有问题。但是我找不到任何异常,有人可以帮助我吗?
客户端(UWP/C#):
_namedPipeClientHandle[index] = CreateFileW(@"\\.\pipe\starpipe",
DESIREDACCESS.GENERIC_READ | DESIREDACCESS.GENERIC_WRITE,
SHAREMODE.FILE_SHARE_READ | SHAREMODE.FILE_SHARE_WRITE,
0,
CREATIONDISPOSITION.OPEN_EXISTING,
FLAGSANDATTRIBUTES.FILE_FLAG_OVERLAPPED,
0);
if (_namedPipeClientHandle[index] != null && _namedPipeClientHandle[index].IsInvalid == false)
{
_namedPipeClientStream[index] = new FileStream(_namedPipeClientHandle[index], FileAccess.ReadWrite, 2048, true);
isConnected[index] = true;
break;
}
Run Code Online (Sandbox Code Playgroud)
服务器(C++):
EXPLICIT_ACCESS ea[2];
SID_IDENTIFIER_AUTHORITY SIDAuthWorld = SECURITY_WORLD_SID_AUTHORITY;
SID_IDENTIFIER_AUTHORITY SIDAuthNT = SECURITY_NT_AUTHORITY;
SECURITY_ATTRIBUTES sa;
if (!AllocateAndInitializeSid(&SIDAuthWorld, 1, SECURITY_WORLD_RID, 0, 0, 0, 0, 0, 0, 0, &pEveryoneSID)) return …Run Code Online (Sandbox Code Playgroud)