gpt4 book ai didi

c++ - 我可以将 Token Privileges 数组从一台计算机复制到另一台计算机吗?

转载 作者:行者123 更新时间:2023-11-28 00:17:20 29 4
gpt4 key购买 nike

我正在编写一个日志记录服务,它可以收集一个进程的特权,以便将它传输到另一台计算机。我使用以下代码来收集它:

HANDLE hToken;
if(OpenProcessToken(::GetCurrentProcess(), TOKEN_QUERY, &hToken))
{
DWORD dwSize = 0;
if(!GetTokenInformation(hToken, TokenPrivileges, NULL, dwSize, &dwSize) &&
::GetLastError() == ERROR_INSUFFICIENT_BUFFER)
{
BYTE* pb = new (std::nothrow) BYTE[dwSize];
if(pb)
{
TOKEN_PRIVILEGES* pTPs = (TOKEN_PRIVILEGES*)pb;
DWORD dwSize2;
if(GetTokenInformation(hToken, TokenPrivileges, pTPs, dwSize, &dwSize2) &&
dwSize2 <= dwSize)
{
//Got our BYTE array in 'pb' of size 'dwSize2' bytes
memcpy(pByteArrayToTransmit, pb, dwSize2);

}

delete[] pb;
}
}

CloseHandle(hToken);
}

但我很好奇,如果我可以将 pByteArrayToTransmit 数组传递给另一台 Windows 计算机并能够使用 LookupPrivilegeName 将其转换为可读形式API?

附言。我没有在客户端计算机(记录数据的地方)上调用 LookupPrivilegeName 的原因是为了节省记录数据的大小,因为这个过程可能会重复多次。

最佳答案

来自documentation for LookupPrivilegeValue :

The LookupPrivilegeValue function retrieves the locally unique identifier (LUID) used on a specified system to locally represent the specified privilege name.

这强烈表明每个系统上的 LUID 是不同的。至少,不能保证它们会相同。

附录

假设日志系统不一定要在所有可能的情况下工作,并且假设日志将在软件中进行分析,并且您可以在每次新版本的 Windows 出现时更新分析软件,并提供日志还包括 Windows 版本,按照 Eryksun 在评论中的建议,将此信息压缩到单个 64 位位图中应该足够安全。

如果您想尽可能安全地使用它,我建议使用一个位图,后跟一个可选的可变长度字段。您可以有一个固定的字符串表(一个对应我们知道的每个特权名称),每个字符串在位图中有一个位。如果您看到的所有权限名称都在表中,那么位图就是您所需要的。

如果您看到一个或多个您不知道的权限名称,请设置位图中的最高位以指示还有更多数据,然后添加一个或多个以 null 结尾的字符串,并在末尾添加一个 null以指示列表的结尾。

关于c++ - 我可以将 Token Privileges 数组从一台计算机复制到另一台计算机吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29404760/

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