1

我正在使用 Windows Credential Manager API 中的CredRead()andCredWrite()函数来存储和检索用户密码,如StackOverflow answer中所述。

但是,我读过可以通过设置组策略或简单地通过停止/禁用凭据管理器服务来禁用凭据管理器。在这种情况下,我想更新我的应用程序的 UI 以反映凭据存储当前不可用。

是否有可靠的方法来以可编程方式确定凭据管理器是否已被禁用?

4

2 回答 2

3

在 Windows 中存在支持不同保险库类型的VaultSvc(友好名称Credentials Service )。存在实用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和大多数 vaults,比如Web Credentials(在 ie 中存储密码)只有在VaultSvc正在运行的情况下才有效

但是Windows Credentials ( 77BC582B-F0A6-4E15-4E80-61736B6F3B29 ) 是内置在凭据中的,即使 VaultSvc没有运行(禁用),它也始终在运行(在 lsass 中)。, CredRead,CredWriteCredEnumerate其他Cred*api 将始终有效。它不能被禁用


存在未记录的 api Vault*api 在vaultcli.dll. 所有这些 api 都以 form 命名Vault*。当我们调用它并且VaultSvc正在运行时 -vaultsvc.dll加载到 lsass 并处理远程调用:

vaultcli!VaultSomeApi -> rpc - > vaultsvc!VltSomeApi

例如,当我们调用VaultEnumerateItems客户端时,VltEnumerateItems调用 lsass (vaultsvc.dll)。内部调用的内容VltEnumerateItems取决于它调用的具体保险库。对于Windows Credentials vault -CredEnumerateW在内部调用VltEnumerateItems

于 2018-03-30T21:52:07.573 回答
-1

凭据服务的名称是VaultSvc您可以在此答案中找到如何查询任何服务的状态,并在将“ValutSvc”字符串传递给函数的同时使用代码。

于 2018-03-29T23:00:34.647 回答