今日、私はユーザーに「サービスとしてログオン」特権を付与する単純なC++プログラムを作成することができました。LPCWSTR
これの一部には、aと。の間の変換が含まれていましたLSA_UNICODE_STRING
。そのためのコードは次のとおりです。
LSA_UNICODE_STRING StringToLsaUnicodeString(LPCWSTR string) {
LSA_UNICODE_STRING lsaString;
DWORD dwLen = 0;
dwLen = wcslen(string);
lsaString.Buffer = (LPWSTR) string;
lsaString.Length = (USHORT)((dwLen) * sizeof(WCHAR));
lsaString.MaximumLength = (USHORT)((dwLen + 1) * sizeof(WCHAR));
return lsaString;
}
この関数で小さなエラーが発生したとき、の呼び出しLsaLookupNames2()
はコード87(hex 0x57)「パラメーターが正しくありません」で失敗しました。を使用するC++アプリでこの呼び出しを行おうとしていますstd::wstring
が、失敗します。私の現在の機能は次のとおりです。
#if defined(_UNICODE)
LSA_UNICODE_STRING toLsaUnicodeString (std::wstring str) {
LSA_UNICODE_STRING lsaWStr;
DWORD len = 0;
LPWSTR cstr = (LPWSTR)str.c_str();
len = wcslen(cstr);
lsaWStr.Buffer = cstr;
lsaWStr.Length = (USHORT)((len) * sizeof(WCHAR));
lsaWStr.MaximumLength = (USHORT)((len + 1) * sizeof(WCHAR));
return lsaWStr;
}
#endif
私は何が間違っているのですか?