C# 如何解密从安全桌面获得的身份验证缓冲区

C# 如何解密从安全桌面获得的身份验证缓冲区,c#,winapi,credentials,C#,Winapi,Credentials,我试图请求用户在安全桌面上输入凭据,但找不到解密生成的身份验证缓冲区的方法: 通过以下方式获得凭据: 凭据的解包方式为: 如果我在CredUIPromptForWindowsCredentials中指定CREDUIWIN\u SECURE\u提示符,如上例所示,CredUnPackAuthenticationBuffer将失败,并出现错误。如果我使用CREDUIWIN\u GENERIC而不是安全桌面,它会成功 我如何从安全桌面上的加密凭据中获取名称、域和密码?或者如果不可能,我如何使用它们?我

我试图请求用户在安全桌面上输入凭据,但找不到解密生成的身份验证缓冲区的方法:

通过以下方式获得凭据:

凭据的解包方式为:

如果我在
CredUIPromptForWindowsCredentials
中指定
CREDUIWIN\u SECURE\u提示符
,如上例所示,
CredUnPackAuthenticationBuffer
将失败,并出现
错误
。如果我使用
CREDUIWIN\u GENERIC
而不是安全桌面,它会成功


我如何从安全桌面上的加密凭据中获取名称、域和密码?或者如果不可能,我如何使用它们?

我有类似的问题-我获得的密码与指定的加密blob相同,域缓冲区也有同样的情况,如果我启用秘密桌面…我也会在这里停下来。一个安全的提示确实。。。大多数人无法使用它。。。
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);