Я пытаюсь попросить пользователя ввести учетные данные на защищенном рабочем столе , но я не могу найти способ расшифровки полученного буфера аутентификации:
Полномочия получены с:
CREDUI_INFO cui = new CREDUI_INFO()
{
cbSize = (uint)Marshal.SizeOf(typeof(CREDUI_INFO)),
pszMessageText = "MyMessage",
pszCaptionText = "MyCaption",
};
bool save = false;
uint authPackage = 0U;
IntPtr authBuffer;
uint authBufferSize;
uint error = CredUIPromptForWindowsCredentials(
ref cui,
0U,
ref authPackage,
IntPtr.Zero,
0U,
out authBuffer,
out authBufferSize,
ref save,
CREDUIWIN_SECURE_PROMPT);
Учетные данные распакованы с:
uint userBufferSize = CREDUI_MAX_USERNAME_LENGTH;
uint domainBufferSize = CRED_MAX_STRING_LENGTH;
uint passwordBufferSize = CREDUI_MAX_PASSWORD_LENGTH;
StringBuilder userBuffer = new StringBuilder((int)userBufferSize);
StringBuilder domainBuffer = new String((int)domainBufferSize);
IntPtr passwordBuffer = Marshal.AllocCoTaskMem((int)passwordBufferSize);
bool success = CredUnPackAuthenticationBuffer(
CRED_PACK_PROTECTED_CREDENTIALS,
authBuffer, authBufferSize
userBuffer, ref userBufferSize,
domainBuffer, ref domainBufferSize,
passwordBuffer, ref passwordBufferSize);
Если я укажу CREDUIWIN_SECURE_PROMPT
в CredUIPromptForWindowsCredentials
, как в примере выше, CredUnPackAuthenticationBuffer
завершится неудачно с ERROR_NOT_CAPABLE
. Если я использую CREDUIWIN_GENERIC
вместо защищенного рабочего стола , это будет успешно.
Как я могу получить имя, домен и пароль из таких зашифрованных учетных данных с защищенного рабочего стола? Или как вообще их использовать, если это невозможно?