CrerdWriteW 在 Windows 上以普通话存储凭据
CrerdWriteW storing credentials in Mandarin on Windows
我使用答案 here 以编程方式将凭据添加到 Windows 凭据管理器。该代码的灵感来自答案中的代码。但是,当我 运行 它时,cred manager 中的凭据以普通话显示。我不确定我做错了什么。将不胜感激任何指针。 TIA。
作为参考,这是我的代码
#include <iostream>
#include "windows.h"
#include "wincred.h"
#pragma hdrstop
using namespace std;
int main()
{
const char* password = "testpass";
CREDENTIALW creds = { 0 };
creds.Type = CRED_TYPE_GENERIC;
creds.TargetName = (LPWSTR)("testaccount");
creds.CredentialBlobSize = strlen(password) + 1;
creds.CredentialBlob = (LPBYTE)password;
creds.Persist = CRED_PERSIST_LOCAL_MACHINE;
creds.UserName = (LPWSTR)("testuser");
BOOL result = CredWriteW(&creds, 0);
if (result != TRUE)
{
cout << "Some error occurred" << endl;
}
else
{
cout << "Stored the password successfully" << endl;
}
return 0;
}
为确保没有默认语言问题,我在凭证管理器中为 test.com 手动创建了一个凭证,并且没有遇到任何问题。信誉经理的快照 -
显然,TargetName 需要引用可变数组,即不是字符串文字。它还需要是 wide 字符串,否则字符将被错误解释,在这种情况下会导致汉字。
解决方案是定义一个用宽字符串初始化的可变数组,并让 TargetName
指向它:
WCHAR targetName [] = L"testuser";
creds.TargetName = targetName;
这样,编译就不需要可疑的强制转换了。当您想输入非硬编码字符串(例如来自用户输入或文件)时,您需要确保它们已正确编码并且 convert 适当。
我使用答案 here 以编程方式将凭据添加到 Windows 凭据管理器。该代码的灵感来自答案中的代码。但是,当我 运行 它时,cred manager 中的凭据以普通话显示。我不确定我做错了什么。将不胜感激任何指针。 TIA。
作为参考,这是我的代码
#include <iostream>
#include "windows.h"
#include "wincred.h"
#pragma hdrstop
using namespace std;
int main()
{
const char* password = "testpass";
CREDENTIALW creds = { 0 };
creds.Type = CRED_TYPE_GENERIC;
creds.TargetName = (LPWSTR)("testaccount");
creds.CredentialBlobSize = strlen(password) + 1;
creds.CredentialBlob = (LPBYTE)password;
creds.Persist = CRED_PERSIST_LOCAL_MACHINE;
creds.UserName = (LPWSTR)("testuser");
BOOL result = CredWriteW(&creds, 0);
if (result != TRUE)
{
cout << "Some error occurred" << endl;
}
else
{
cout << "Stored the password successfully" << endl;
}
return 0;
}
为确保没有默认语言问题,我在凭证管理器中为 test.com 手动创建了一个凭证,并且没有遇到任何问题。信誉经理的快照 -
显然,TargetName 需要引用可变数组,即不是字符串文字。它还需要是 wide 字符串,否则字符将被错误解释,在这种情况下会导致汉字。
解决方案是定义一个用宽字符串初始化的可变数组,并让 TargetName
指向它:
WCHAR targetName [] = L"testuser";
creds.TargetName = targetName;
这样,编译就不需要可疑的强制转换了。当您想输入非硬编码字符串(例如来自用户输入或文件)时,您需要确保它们已正确编码并且 convert 适当。