Как заполнить поле имени пользователя CredUIPromptForWindowsCredentials()?

По сути, все, что меня интересует, это получить поле пароля в виде простого текста из возвращенных данных, чтобы проверить его позже в коде. В настоящее время я используюCREDUIWIN_GENERIC, но я ненавижу, что пользователь может возиться с полем имени пользователя, поэтому я думаю, что было бы хорошо заполнить его чем-то по умолчанию. Я пыталсяCREDUIWIN_ENUMERATE_CURRENT_USER, но он возвращает пароль в неизвестном зашифрованном формате.

Я знаю, что это как-то связано с заполнениемpulAuthPackage, но я понятия не имею, как это сделать.

Вот мой код:

      BOOL save = false;
DWORD authPackage = 0;
LPVOID authBuffer;
ULONG authBufferSize = 0;

CREDUI_INFO credUiInfo;

static WCHAR username[CREDUI_MAX_USERNAME_LENGTH * sizeof(WCHAR)] = { 0 };
static WCHAR password[CREDUI_MAX_PASSWORD_LENGTH * sizeof(WCHAR)] = { 0 };
DWORD uLen = CREDUI_MAX_USERNAME_LENGTH;
DWORD pLen = CREDUI_MAX_PASSWORD_LENGTH;

credUiInfo.pszCaptionText = TEXT("Authentication");
credUiInfo.pszMessageText = TEXT("Please enter your Key in \"Password\".");
credUiInfo.cbSize = sizeof(credUiInfo);
credUiInfo.hbmBanner = NULL;
credUiInfo.hwndParent = NULL;

LPVOID inBuffer = NULL;
ULONG inBufferSize = 0;


HRESULT rc = CredUIPromptForWindowsCredentials(&(credUiInfo), 0, &(authPackage), inBuffer, inBufferSize, &authBuffer, &authBufferSize, &(save), CREDUIWIN_GENERIC);

if (rc == ERROR_SUCCESS)
{
    CredUnPackAuthenticationBufferW(0, authBuffer, authBufferSize, username, &uLen, NULL, 0, password, &pLen);

    wstring ws(password);
    string res(ws.begin(), ws.end());
    return res;
}

0 ответов

Другие вопросы по тегам