Добавление нового текстового поля pGina - PullRequest
0 голосов
/ 24 сентября 2018

Мне нужно иметь третье текстовое поле помимо полей имени пользователя и пароля, обычно предоставляемых pGina в пользовательском интерфейсе входа в систему Windows.Я буду использовать это поле для получения пароля, который будет проверен в одноразовой службе паролей, работающей в фоновом режиме.

Как добавить новое поле в пользовательский интерфейс входа в систему pGina и передать его значение вслужбы работают в фоновом режиме?

Любая помощь приветствуется.

Ответы [ 3 ]

0 голосов
/ 25 сентября 2018

Я думаю, вы должны изменить файл 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, <strong>LUIFI_OTP = 4,</strong> LUIFI_SUBMIT = 5, LUIFI_STATUS = 6, LUIFI_NUM_FIELDS = 7, };</p> <pre><code> 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 и т. Д. Для обработки нового поля.; -)

0 голосов
/ 10 октября 2018

Мне, наконец, удалось это сделать.

Как указал @Alexander, я отредактировал TileUiLogon.h и TileUiTypes.h и следовал шаблону, чтобы добавить третье поле на экран входа в систему.Затем я отредактировал Credential :: Initialize и добавил новую строку в цикл «for», следуя тому же шаблону для поля «пароль» (я точно не знаю, что там происходит, но, поскольку мы соблюдаем существующиешаблон, нам все равно, пока содержимое нового поля собирается кодом, подобным другим полям).

Поскольку я не хотел менять все сигнатуры функций и беспорядокс помощью кода я просто отредактировал функцию Credential :: ProcessLoginAttempt и соединил содержимое нового поля с содержимым поля пароля и встроил пользовательский разделитель, чтобы позволить мне разделить две строки в следующих шагах.После нажатия кнопки отправки данные полей перед реальной сериализацией первоначально отправляются в канал, на другом конце которого прослушивается служба pGina (pGinaTransactions.cpp).Этот сервис отправляет информацию для входа в свои плагины.Затем я отредактировал уже предоставленный подключаемый модуль «Образец» и разделил две соединенные строки, немедленно заполнив атрибут пароля объекта реальным паролем, предоставленным пользователем, поскольку эти данные будут отправлены поставщику учетных данных через канал для дальнейшей обработки.,Если плагин возвращает успех, пароль затем используется для реальной сериализации и попытки входа в систему.

Я, вероятно, пропустил несколько деталей, которые вы можете задать в комментариях.

0 голосов
/ 25 сентября 2018

Насколько я знаю (если вы работаете в Vista или выше), вам нужно будет создать свой собственный провайдер учетных данных и зарегистрировать его.

Для взаимодействия со службойЯ бы сказал, что это зависит от того, работает ли он на локальном или удаленном сервере.Во всяком случае, это, вероятно, самая легкая часть работы.

ОБНОВЛЕНИЕ: Я не знаю pGina, как вообще.Но вы должны посмотреть на gina.rc (строка 93) в DIALOGS .Кажется, интересное начало.

Попробуйте добавить пользовательский EDITEXT (кстати, многие IDE, скорее всего, имеют визуализатор для этих ресурсов. Я знаю, что Visual Studio является одним из них, так как я ужеиспытал это.)

Visualizor и resource.h -> /! \ Это скриншот того, как это выглядит, и resource.h.

//Third TEXTEDIT I just added
EDITTEXT        IDC_CUSTOM_PASSWORD_TXT, 146, 88, 183, 12, ES_PASSWORD | ES_AUTOHSCROLL
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...