Краткий ответ: в хранилище. Начиная с Windows 7, хранилище было создано для хранения любых конфиденциальных данных среди них учетных данных Internet Explorer.
Хранилище фактически является службой LocalSystem - vaultsvc.dll.
Длинный ответ:
Internet Explorer позволяет использовать два способа хранения учетных данных: учетные данные веб-сайтов (например, имя пользователя и пароль Facebook) и автозаполнение данных. Начиная с версии 10 вместо использования Реестра появился новый термин: Windows Vault. Windows Vault - это хранилище по умолчанию для информации диспетчера учетных данных.
Вам необходимо проверить, какая ОС работает. Если это Windows 8 или выше, вы звоните VaultGetItemW8 . Если это не так, вы звоните VaultGetItemW7 .
Чтобы использовать «Vault», вы загружаете DLL с именем «vaultcli.dll» и при необходимости получаете доступ к ее функциям.
Типичный код C ++ будет:
hVaultLib = LoadLibrary(L"vaultcli.dll");
if (hVaultLib != NULL)
{
pVaultEnumerateItems = (VaultEnumerateItems)GetProcAddress(hVaultLib, "VaultEnumerateItems");
pVaultEnumerateVaults = (VaultEnumerateVaults)GetProcAddress(hVaultLib, "VaultEnumerateVaults");
pVaultFree = (VaultFree)GetProcAddress(hVaultLib, "VaultFree");
pVaultGetItemW7 = (VaultGetItemW7)GetProcAddress(hVaultLib, "VaultGetItem");
pVaultGetItemW8 = (VaultGetItemW8)GetProcAddress(hVaultLib, "VaultGetItem");
pVaultOpenVault = (VaultOpenVault)GetProcAddress(hVaultLib, "VaultOpenVault");
pVaultCloseVault = (VaultCloseVault)GetProcAddress(hVaultLib, "VaultCloseVault");
bStatus = (pVaultEnumerateVaults != NULL)
&& (pVaultFree != NULL)
&& (pVaultGetItemW7 != NULL)
&& (pVaultGetItemW8 != NULL)
&& (pVaultOpenVault != NULL)
&& (pVaultCloseVault != NULL)
&& (pVaultEnumerateItems != NULL);
}
Затем вы перечисляете все сохраненные учетные данные, вызывая
VaultEnumerateVaults
Затем вы переходите к результатам.