Я использую API Credential Manager согласно этому ответу Шифрование учетных данных в приложении WPF . Я использую enumerateCredentials, чтобы получить список всех учетных данных в диспетчере учетных данных Windows.
Добавление фрагмента кода:
public static IReadOnlyList<Credential> EnumerateCrendentials()
{
List<Credential> result = new List<Credential>();
int count;
IntPtr pCredentials;
bool ret = CredEnumerate(null, 1, out count, out pCredentials);
if (ret)
{
for (int n = 0; n < count; n++)
{
IntPtr credential = Marshal.ReadIntPtr(pCredentials, n * Marshal.SizeOf(typeof(IntPtr)));
result.Add(ReadCredential((CREDENTIAL)Marshal.PtrToStructure(credential, typeof(CREDENTIAL))));
}
}
else
{
int lastError = Marshal.GetLastWin32Error();
throw new Win32Exception(lastError);
}
return result;
}
[DllImport("Advapi32.dll", EntryPoint = "CredReadW", CharSet = CharSet.Unicode, SetLastError = true)]
static extern bool CredRead(string target, CredentialType type, int reservedFlag, out IntPtr credentialPtr);
[DllImport("Advapi32.dll", EntryPoint = "CredWriteW", CharSet = CharSet.Unicode, SetLastError = true)]
static extern bool CredWrite([In] ref CREDENTIAL userCredential, [In] UInt32 flags);
[DllImport("advapi32", SetLastError = true, CharSet = CharSet.Unicode)]
static extern bool CredEnumerate(string filter, int flag, out int count, out IntPtr pCredentials);
Когда я выполняю приведенный выше код, я могу получить всесохраненные учетные данные Windows. Но когда я запускаю консольное приложение после создания исполняемого файла релиза, оно возвращает только одно удостоверение.
Почему это поведение? Использует ли диспетчер учетных данных учетные данные пользователя при запуске из Visual Studio в режиме отладки?
В документации упоминается, что
Функция CredEnumerate перечисляет учетные данные изнабор учетных данных пользователя. Используется набор учетных данных, связанный с сеансом входа в систему текущего токена. Токен не должен иметь SID пользователя отключенным.
Как я могу запустить его? Есть ли другой способ получить только имя приложения и имя пользователя, сохраненные в моих учетных данных Windows?