我正在使用Windows Credential Manager API中的CredRead()
和CredWrite()
函数来存储和检索用户密码,如this StackOverflow answer中所述。
但是,我已经读过可以通过设置组策略或仅通过停止/禁用Credential Manager服务来禁用Credential Manager。在这种情况下,我想更新我的应用程序的UI,以反映当前没有凭据存储。
是否有可靠的方法可以确定Credential Manager是否已被禁用?
答案 0 :(得分:2)
存在 VaultSvc (友好名称凭据服务),它们支持不同的保管库类型。存在util VaultCmd.exe
,我们可以使用它来枚举不同的凭证模式和加载的保险库。例如:
vaultcmd /listschema
Global Schemas
Credential schema: Windows Secure Note
Schema guid: 2F1A6504-0641-44CF-8BB5-3612D865F2E5
Credential schema: Windows Web Password Credential
Schema guid: 3CCD5499-87A8-4B10-A215-608888DD3B55
Credential schema: Windows Credential Picker Protector
Schema guid: 154E23D0-C644-4E6F-8CE6-5069272F999F
Currently loaded credentials schemas:
Vault: Web Credentials
Vault Guid:4BF4C442-9B8A-41A0-B380-DD4A704DDB28
Credential schema: Windows Web Password Credential
Schema guid: 3CCD5499-87A8-4B10-A215-608888DD3B55
Vault: Windows Credentials
Vault Guid:77BC582B-F0A6-4E15-4E80-61736B6F3B29
Credential schema: Windows Domain Certificate Credential
Schema guid: E69D7838-91B5-4FC9-89D5-230D4D4CC2BC
Credential schema: Windows Domain Password Credential
Schema guid: 3E0E35BE-1B77-43E7-B873-AED901B6275B
Credential schema: Windows Extended Credential
Schema guid: 3C886FF3-2669-4AA2-A8FB-3F6759A77548
和
vaultcmd /list
Currently loaded vaults:
Vault: Web Credentials
Vault Guid:4BF4C442-9B8A-41A0-B380-DD4A704DDB28
Location: C:\Users\*\AppData\Local\Microsoft\Vault\4BF4C442-9B8A-41A0-B380-DD4A704DDB28
Vault: Windows Credentials
Vault Guid:77BC582B-F0A6-4E15-4E80-61736B6F3B29
Location: C:\Users\*\AppData\Local\Microsoft\Vault
当然 vaultcmd 和大多数保险库,例如 Web凭证(在ie中存储密码)仅在 VaultSvc 正在运行的情况下才有效/ p>
但 Windows凭据( 77BC582B-F0A6-4E15-4E80-61736B6F3B29 )内置凭证,即使,也始终在运行(在lsass内) VaultSvc 未运行(已禁用)。 CredRead
,CredWrite
,CredEnumerate
和其他Cred*
api将始终有效。它不能被禁用
在Vault*
中实现了未记录的api vaultcli.dll
api。所有这个api都以Vault*
的形式命名。当我们调用它并且 VaultSvc 正在运行时 - vaultsvc.dll
被加载到lsass并处理远程调用:
vaultcli!VaultSomeApi -> rpc - > vaultsvc!VltSomeApi
例如,当我们在客户端调用VaultEnumerateItems
时,在lsass(vaultsvc.dll)中调用VltEnumerateItems
。内部VltEnumerateItems
内部调用的内容取决于它所调用的混凝土保险库。 for Windows凭据保险库 - CredEnumerateW
在VltEnumerateItems
内调用
答案 1 :(得分:-1)
凭据服务的名称为 。 您可以在VaultSvc回答中查找如何查询任何服务的状态,并在传递" ValutSvc"时使用代码。字符串到函数。