在Windows CE上设置ADMIN密码的问题

时间:2010-04-29 12:59:34

标签: authentication passwords windows-ce platform-builder

我编写了一个用户管理器脚本,使用NTLMSetUserInfo来设置某些用户的密码,包括ADMIN ...我注意到的是,如果我这样做,用户名/密码组合就可以了适用于所有场景,如Telnet,HTTP Auth等,但不是文件浏览。

经过进一步检查后,我注意到当通过内置的CE配置网页设置管理员密码时,它可以正常工作。

当我使用NTLMSetUserInfo

时,Admin的注册表看起来是这样的
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等很陌生......

任何人都可以帮助我或指出正确的方向吗?

2 个答案:

答案 0 :(得分:0)

我现在无法给出确切的答案(从未使用此身份验证)。但是,我只是尝试在我拥有的蓝牙AudioGateway驱动程序的克隆版本中使用(实际编译)SetPassword,并且编译没有问题。

当我尝试在子项目或常规独立项目中使用它时,我遇到了同样的错误。因此,快速解决方案可能是在驱动程序中执行此操作,看看它是否有效。

关于文档中的注释,我假设它们归结为在目录中选择SYSGEN_FSPASSWORD,但我还没有跟踪它。如果您可以设置密码等,我猜你已经选择了这个。

答案 1 :(得分:0)

将以下内容添加到代码文件的顶部:

extern "C" BOOL SetPassword(LPWSTR lpszOldPassword, LPWSTR lpszNewPassword);

链接器将完成剩下的工作。