gpt4 book ai didi

c++ - 与 PSECURITY_STRING 不兼容

转载 作者:行者123 更新时间:2023-11-28 08:13:11 25 4
gpt4 key购买 nike

我正在尝试使用来自 http://msdn.microsoft.com/en-us/library/windows/desktop/aa380536(v=VS.85).aspx 的代码

AcquireCredentialsHandle 行表示第二个参数与 PSECURITY_STRING 不兼容。有人知道我在这里能做什么吗?

最佳答案

与大多数带有字符串参数的 Win32 API 函数一样,AcquireCredentialsHandle() 映射到 AcquireCredentialsHandleA()AcquireCredentialsHandleW(),具体取决于是否UNICODE 已定义,因此它分别需要 char*wchar_t* 指针。另一方面,SECURITY_STRING 是一个以 UNICODE_STRING 为模型的结构。结构 - 两者都仅包含 UTF-16 编码的 Unicode 数据。

要将 SECURITY_STRING 值传递给 AcquireCredentialsHandleA(),您需要先将 SECURITY_STRING::Buffer 成员的内容转换为 Ansi :

PSECURITY_STRING str;
...
int len = WideCharToMultiByte(0, 0, (LPWSTR)str->Buffer, str->Length, NULL, 0, NULL, NULL);
std::string tmp(len);
WideCharToMultiByte(0, 0, (LPWSTR)str->Buffer, str->Length, &tmp[0], len, NULL, NULL);
AcquireCredentialsHandle(..., tmp.c_str(), ...);

要将 SECURITY_STRING 值传递给 AcquireCredentialsHandleW(),您需要按原样传递 SECURITY_STRING::Buffer 成员:

PSECURITY_STRING str;
...
AcquireCredentialsHandle(..., (LPWSTR)str->Buffer, ...);

无论哪种方式,您都不会传递指向 SECURITY_STRING 本身的指针。

关于c++ - 与 PSECURITY_STRING 不兼容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8476892/

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