Как заполнить поле имени пользователя 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;
}