Hoy he podido escribir un sencillo programa en C++ que otorgara a un usuario el privilegio "Conectarse como servicio . Parte de esto implicaba la conversión entre un LPCWSTR
y un LSA_UNICODE_STRING
. El código para hacerlo está aquí:
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;
}
Cuando tuve algunos pequeños errores en esta función, mi llamada a LsaLookupNames2()
falló con un código 87(hex 0x57) "El parámetro es incorrecto". Estoy intentando hacer esta llamada en una aplicación C++ que utiliza std::wstring
y está fallando. Mi función actual es la siguiente:
#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
¿Qué estoy haciendo mal?