如何使用 C++ 复制 SID 以进行存储

Posted

技术标签:

【中文标题】如何使用 C++ 复制 SID 以进行存储【英文标题】:How to copy SID for storage with C++ 【发布时间】:2013-02-23 23:30:50 【问题描述】:

假设我使用以下 API 获取用户的 SID:

TOKEN_USER* pTU = (TOKEN_USER*)pbytes;
DWORD dwSize;
GetTokenInformation(hToken, TokenUser, pTU, dwSize, &dwSize);

pTU->User.Sid;  //Contains the SID I need

我需要存储这个 SID 以供以后在程序中使用/比较。但是如何复制呢?

如果我这样做:

SID globalSIDStorage;
globalSIDStorage = *pTU->User.Sid;

我收到一个错误:

错误 C2679:二进制“=”:未找到采用右手的运算符 'PSID' 类型的操作数(或没有可接受的转换。

【问题讨论】:

【参考方案1】:

您可能想使用CopySid。

【讨论】:

谢谢。这里的问题是知道 SID 长度。有那个API吗?同样根据我的粗略计算,如果我将 SID 存储为二进制数组,它将最大为 68 个字节。能比这个大吗? 好吧,没关系,它是GetLengthSid: msdn.microsoft.com/en-us/library/windows/desktop/…,最大 SID 大小在 SECURITY_MAX_SID_SIZE

以上是关于如何使用 C++ 复制 SID 以进行存储的主要内容,如果未能解决你的问题,请参考以下文章