我编写了一个用户管理器脚本,使用NTLMSetUserInfo
来设置某些用户的密码,包括ADMIN
...我注意到的是,如果我这样做,用户名/密码组合就可以了适用于所有场景,如Telnet,HTTP Auth等,但不是文件浏览。
经过进一步检查后,我注意到当通过内置的CE配置网页设置管理员密码时,它可以正常工作。
当我使用NTLMSetUserInfo
NT = [hex value]
当我通过CE网页设置管理员密码时,Admin的注册表包含一个额外字段Password
。
NT = [hex value]
Password = [hex value]
我认为NTLMSetUserInfo
没有正确设置Admin的全局CE密码,因此无法将文件浏览到框中。
我在CE网页代码解析DLL中找到了以下函数来执行名为SetPassword
的工作。我写了一个单独的函数来处理Admin案例,但我无法编译它。这是它的片段
#include <windbase.h>
bool UserAccounts::SetAdminPassword(const std::string &passwordOld, const std::string &password)
{
wchar_t wpass[512];
wchar_t wpassold[512];
mbstowcs(wpass, password.c_str(), 512);
mbstowcs(wpassold, passwordOld.c_str(), 512);
return SetPassword(wpassold, wpass) == TRUE;
}
这不会编译说明'SetPassword': identifier not found
。我在CE documentation for SetPassword
注意到它有以下行
要使用此功能,您必须包括 密码组件,Fspass,in 你的Cesysgen.bat文件。
我不确定这意味着什么,因为我对PlatformBuilder等很陌生......
任何人都可以帮助我或指出正确的方向吗?
答案 0 :(得分:0)
我现在无法给出确切的答案(从未使用此身份验证)。但是,我只是尝试在我拥有的蓝牙AudioGateway驱动程序的克隆版本中使用(实际编译)SetPassword
,并且编译没有问题。
当我尝试在子项目或常规独立项目中使用它时,我遇到了同样的错误。因此,快速解决方案可能是在驱动程序中执行此操作,看看它是否有效。
关于文档中的注释,我假设它们归结为在目录中选择SYSGEN_FSPASSWORD
,但我还没有跟踪它。如果您可以设置密码等,我猜你已经选择了这个。
答案 1 :(得分:0)
将以下内容添加到代码文件的顶部:
extern "C" BOOL SetPassword(LPWSTR lpszOldPassword, LPWSTR lpszNewPassword);
链接器将完成剩下的工作。