private static CredUi.SimpleCredentials ReadCredential(string key)
{
IntPtr nCredPtr;
var read = CredUi.CredRead(key, CredUi.CredTypes.CRED_TYPE_GENERIC, 0, out nCredPtr);
var lastError = Marshal.GetLastWin32Error();
if (!read)
{
if (lastError == (int)CredUi.CredUIReturnCodes.ERROR_NOT_FOUND)
{
return(null);
}
else
{
throw new CredentialException(lastError);
}
}
var credential = new CredUi.SimpleCredentials();
using (var criticalCredentialHandle = new CredUi.CriticalCredentialHandle(nCredPtr))
{
var cred = criticalCredentialHandle.GetCredential();
credential.UserName = cred.UserName;
credential.Password = cred.CredentialBlob;
}
return(credential);
}