首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >添加新的文本字段pGina

问添加新的文本字段pGina
EN

Stack Overflow用户
提问于 2018-09-24 19:21:28
回答 3查看 708关注 0票数 1

除了通常由pGina在windows登录UI中提供的用户名和密码字段之外,我还需要有第三个文本字段。我将使用此字段接收一个密码,该密码将根据在后台运行的一次性密码服务进行检查。

如何在pGina登录UI中添加新字段并将其值传递给后台运行的服务?

任何帮助都是非常感谢的。

EN

回答 3

Stack Overflow用户

发布于 2018-10-10 16:38:28

我终于设法做到了这一点。

正如@Alexander所指出的,我编辑了TileUiLogon.h和TileUiTypes.h,并遵循模式将第三个字段添加到登录屏幕。然后,我编辑了Credential::Initialize并在" for“循环中添加了新的一行,与"password”字段的模式相同(我不确定那里到底发生了什么,但由于我们遵循现有的模式,只要新字段的内容是由类似于其他字段的代码收集的)。

因为我不想更改所有的函数签名和乱七八糟的代码,所以我只需编辑Credential::ProcessLoginAttempt函数,并将新字段的内容与密码字段的内容连接起来,并嵌入一个自定义分隔符,以便在以下步骤中分隔两个字符串。在点击submit按钮之后,字段数据在真正的序列化之前首先被发送到pGina服务正在侦听的管道(pGinaTransactions.cpp)。此服务将登录信息发送到其插件。然后,我编辑了已经提供的"Sample“插件,并将两个连接在一起的字符串分开,立即用用户提供的真实密码填充对象的password属性,因为这些数据将通过管道发送回凭证提供者进行进一步处理。如果插件返回成功,则密码将用于真正的序列化和登录尝试。

我可能遗漏了一些细节,欢迎您在评论中提问。

票数 2
EN

Stack Overflow用户

发布于 2018-09-25 22:48:26

我认为你必须修改TileUiLogon.h文件:

namespace pGina { namespace CredProv { // Fields for unlock and logon: typedef enum LOGON_UI_FIELD_ID { LUIFI_TILEIMAGE = 0, LUIFI_MOTD = 1, LUIFI_USERNAME = 2, LUIFI_PASSWORD = 3, LUIFI_OTP = 4, LUIFI_SUBMIT = 5, LUIFI_STATUS = 6, LUIFI_NUM_FIELDS = 7, };

代码语言:javascript
复制
    static const UI_FIELDS s_logonFields =
    {
        LUIFI_NUM_FIELDS,       // Number of fields total
        LUIFI_PASSWORD,         // Field index which submit button should be adjacent to
        LUIFI_USERNAME,         // Username field index value
        LUIFI_PASSWORD,         // Password field index value
        LUIFI_STATUS,           // Status field
        {
            //  when to display,               style,             field id,        type,               name           data source     value         callback
            { { CPFS_DISPLAY_IN_BOTH,          CPFIS_NONE },    { LUIFI_TILEIMAGE, CPFT_TILE_IMAGE,    L"Image" },    SOURCE_NONE,    NULL,         NULL }, 
            { { CPFS_DISPLAY_IN_BOTH,          CPFIS_NONE },    { LUIFI_MOTD,      CPFT_SMALL_TEXT,    L"MOTD" },     SOURCE_DYNAMIC, L"pGina",     NULL }, 
            { { CPFS_DISPLAY_IN_SELECTED_TILE, CPFIS_FOCUSED }, { LUIFI_USERNAME,  CPFT_EDIT_TEXT,     L"Username" }, SOURCE_NONE,    NULL,         NULL }, 
            { { CPFS_DISPLAY_IN_SELECTED_TILE, CPFIS_NONE },    { LUIFI_PASSWORD,  CPFT_PASSWORD_TEXT, L"Password" }, SOURCE_NONE,    NULL,         NULL }, 
            { { CPFS_DISPLAY_IN_SELECTED_TILE, CPFIS_NONE },    { LUIFI_OTP,  CPFT_PASSWORD_TEXT, L"OTP" },         SOURCE_NONE,    NULL,           NULL },
            { { CPFS_DISPLAY_IN_SELECTED_TILE, CPFIS_NONE },    { LUIFI_SUBMIT,    CPFT_SUBMIT_BUTTON, L"Submit" },   SOURCE_NONE,    NULL,         NULL }, 
            { { CPFS_DISPLAY_IN_BOTH,          CPFIS_NONE },    { LUIFI_STATUS,    CPFT_SMALL_TEXT,    L"Status" },   SOURCE_STATUS,  L"Status",    NULL },
        }
    };
}

}

以及其他相关文件,如pGinaTransactions.h等,用于处理新字段。;-)

票数 1
EN

Stack Overflow用户

发布于 2018-09-25 20:25:00

据我所知(如果你使用的是Vista或更高版本),你必须创建your own Credential Provider并注册它。

对于与服务的交互,我会说这取决于它是在本地运行还是在远程服务器上运行。无论如何,这可能是工作中最容易的部分。

更新:我一点也不了解pGina。但是您应该查看对话框下面的gina.rc (第93行)。这似乎是一个有趣的起点。

尝试添加一个自定义的EDITEXT (顺便说一句,很多IDE很可能有一个用于这些资源的可视化工具。我知道Visual Studio就是其中之一,因为我已经经历过了。)

Visualizor and resource.h --> /!\这是它的外观和资源的屏幕截图。

代码语言:javascript
复制
//Third TEXTEDIT I just added
EDITTEXT        IDC_CUSTOM_PASSWORD_TXT, 146, 88, 183, 12, ES_PASSWORD | ES_AUTOHSCROLL
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52478238

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档