如何检索SID的字节数组

时间:2010-03-14 14:52:58

标签: c++ security winapi authentication

如何将PSID类型转换为包含SID字节值的字节数组? 类似的东西:

PSID pSid;
byte sidBytes[68];//Max. length of SID in bytes is 68
 if(GetAccountSid(
        NULL,       // default lookup logic
        AccountName,// account to obtain SID
        &pSid       // buffer to allocate to contain resultant SID
        )

{

ConvertPSIDToByteArray(pSid, sidBytes);

}

- 我该如何编写ConvertPSIDToByteArray函数?

2 个答案:

答案 0 :(得分:2)

使用GetLengthSid()获取您需要的字节数。然后来自PSID的memcpy()。

答案 1 :(得分:0)

我认为您可能正在寻找的功能是ConvertSidToStringSid。一般的想法是将PSID结构转换为LPTSTR,实际上类型为wchar_t。然后,您可以使用标准函数将此转换为使用wcstombs的多字节字符数组,然后将以字节为单位为您提供SID。或者,您可以直接对wchar_t类型进行操作,然后将其写出来 - 有处理它的函数。在任何一种情况下,结果都会UTF-16 LE编码,如果您需要更改,则必须进行转换。