【问题标题】:Issue with setting ADMIN password on Windows CE在 Windows CE 上设置 ADMIN 密码的问题
【发布时间】:2010-04-29 12:59:33
【问题描述】:

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

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

当我使用 NTLMSetUserInfo 时,Admin 的注册表看起来像这样

NT = [hex value]

当我通过 CE 网页设置管理员密码时,管理员的注册表包含一个额外字段 Password

NT = [hex value]
Password = [hex value]

我认为NTLMSetUserInfo 没有正确设置管理员的全局 CE 密码,因此无法在框上进行文件浏览。

我在 CE Web 代码解析 DLL 中找到了以下函数,该函数称为 SetPassword。我编写了一个单独的函数来处理管理案例,但我无法编译它。这是它的一个sn-p

#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 在 你的 Cesysgen.bat 文件。

我不确定这意味着什么,因为我对 PlatformBuilder 等还是很陌生...

谁能帮助我或指出正确的方向?

【问题讨论】:

    标签: authentication passwords windows-ce platform-builder


    【解决方案1】:

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

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

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

    【讨论】:

    • 对,就是找不到表头的快捷方式。我倾向于为我知道的函数执行此操作,但我找不到声明(TouchCalibrate、SetPassword 等)。
    【解决方案2】:

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

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

    关于文档中的评论,我认为它们归结为在目录中选择了SYSGEN_FSPASSWORD,尽管我还没有追踪到这一点。如果您可以设置密码等,我想您已选择此选项。

    【讨论】:

    • @Shaihi。感谢您的回复。我们的 SDK 已编译 SYSGEN_FSPASSWORD,因此无法想象该组件不是 SDK 的一部分。你知道它是哪个 LIB 的一部分,所以我可以链接到它吗?
    • 我刚刚将它添加到常规驱动程序中,它也被编译了。我猜它位于coredll。我在发布目录的coredll.dll 中搜索了函数名称,它显示在那里。您是否尝试将呼叫添加到驱动程序?
    猜你喜欢
    • 2011-03-28
    • 2015-12-17
    • 1970-01-01
    • 2020-12-18
    • 1970-01-01
    • 2015-08-11
    • 2020-08-29
    • 1970-01-01
    • 2017-07-15
    相关资源
    最近更新 更多