gpt4 book ai didi

c# - 如何更改现有命名管道的安全性?

转载 作者:可可西里 更新时间:2023-11-01 09:59:03 26 4
gpt4 key购买 nike

我在 Windows 8 上使用 Hyper V,并希望能够通过命名管道与虚拟串行端口通信。我给管道选择了一个名称,它可以很好地与虚拟操作系统(在我的例子中是 XP)串行端口通信,但由于 PipeSecurity 设置,只能在管理员用户下进行通信。

现在我希望能够在由 Hyper-V 创建的命名管道上为每个人提供完全控制权。以编程方式或可能使用某些 Hyper V 设置。我需要能够作为普通用户与虚拟操作系统进行通信。

我知道如何在我自己使用 NamedPipeServerStream 和 PipeSecurity 对象创建的命名管道上设置特定的安全性。我主要使用 C#,但我看到有像 SetSecurityInfo 这样的 C++ API。但是这些需要现有管道的句柄。

在伪代码中我想做这样的事情:

SetSecurityInfo("mypipe", new PipeAccessRule("Everyone", PipeAccessRights.FullControl, AccessControlType.Allow));

有人知道怎么做吗? (C++ 或最好是 C#)

最佳答案

我设法获得了一个有效的 C++ 解决方案。 Harry 将此代码嵌入服务的想法对于系统中非永久性的命名管道可能是必要的。

HANDLE hPipe = CreateFile(L"\\\\.\\pipe\\mypipe", GENERIC_WRITE | WRITE_DAC, 0, NULL, OPEN_EXISTING, NULL, NULL);  
if (hPipe != INVALID_HANDLE_VALUE)
{

PACL pOldDACL = NULL;
if(GetSecurityInfo(hPipe, SE_KERNEL_OBJECT, DACL_SECURITY_INFORMATION, NULL, NULL, &pOldDACL, NULL, NULL) == ERROR_SUCCESS)
{
TRUSTEE trustee[1];
trustee[0].TrusteeForm = TRUSTEE_IS_NAME;
trustee[0].TrusteeType = TRUSTEE_IS_GROUP;
trustee[0].ptstrName = _T("Everyone");
trustee[0].MultipleTrusteeOperation = NO_MULTIPLE_TRUSTEE;
trustee[0].pMultipleTrustee = NULL;

EXPLICIT_ACCESS explicit_access_list[1];
ZeroMemory(&explicit_access_list[0], sizeof(EXPLICIT_ACCESS));

explicit_access_list[0].grfAccessMode = GRANT_ACCESS;
explicit_access_list[0].grfAccessPermissions = GENERIC_ALL;
explicit_access_list[0].grfInheritance = NO_INHERITANCE;
explicit_access_list[0].Trustee = trustee[0];

PACL pNewDACL = NULL;
if(SetEntriesInAcl(1, explicit_access_list, pOldDACL, &pNewDACL) == ERROR_SUCCESS)
{
if(SetSecurityInfo(hPipe, SE_KERNEL_OBJECT, DACL_SECURITY_INFORMATION, NULL, NULL, pNewDACL, NULL) != ERROR_SUCCESS)
{
//Error handling
DWORD dw = GetLastError();
}
LocalFree(pNewDACL);
}
else
{
//Error handling
GetLastError();
}
LocalFree(pOldDACL);
}
else
{
//Error
GetLastError();
}
}
else
{
//Error handling
DWORD dw = GetLastError();
}
CloseHandle(hPipe);

关于c# - 如何更改现有命名管道的安全性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25935565/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com