我正在尝试使用来自http://msdn.microsoft.com/en-us/library/windows/desktop/aa380536(v=VS.85).aspx的代码
AcquireCredentialsHandle 行表示第二个参数与 PSECURITY_STRING 不兼容。有人知道我可以在这里做什么吗?
我正在尝试使用来自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
另一方面,A是一个以该结构为模型的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
自身。