如何确定 Windows 凭据是否被禁用
How do I determine if Windows Credentials are disabled
我正在使用 Windows 凭据管理器 API 中的 CredRead()
和 CredWrite()
函数来存储和检索用户密码,如 this Whosebug answer 中所述.
但是,我了解到可以通过设置组策略或仅通过 stopping/disabling 凭据管理器服务来禁用凭据管理器。在这种情况下,我想更新我的应用程序的 UI 以反映凭据存储当前不可用。
是否有可靠的方法以可编程方式确定凭据管理器是否已被禁用?
凭据服务的名称是 VaultSvc。
您可以在 this 答案中找到如何查询任何服务的状态,只需在将 "ValutSvc" 字符串传递给函数时使用代码即可。
在 windows 中存在支持不同保管库类型的 VaultSvc(友好名称 Credentials Service)。存在 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\VaultBF4C442-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 是 运行
但是Windows Credentials (77BC582B-F0A6-4E15-4E80-61736B6F3B29) 是内置的凭证,它是始终 运行(在 lsass 内),即使 VaultSvc 不是 运行(已禁用)。 CredRead
、CredWrite
、CredEnumerate
和其他 Cred*
api 将始终有效。它不能被禁用
存在未记录的 api Vault*
api 在 vaultcli.dll
中实施。所有这些 api 都以 Vault*
的形式命名。当我们调用它时,如果 VaultSvc 是 运行 - vaultsvc.dll
加载到 lsass 中并处理远程调用:
vaultcli!VaultSomeApi -> rpc - > vaultsvc!VltSomeApi
例如,当我们在客户端调用VaultEnumerateItems
时,VltEnumerateItems
在lsass(vaultsvc.dll)中调用。 VltEnumerateItems
内部调用的内容取决于它调用的混凝土拱顶。对于 Windows 凭据 保险库 - CredEnumerateW
在 VltEnumerateItems
中调用
我正在使用 Windows 凭据管理器 API 中的 CredRead()
和 CredWrite()
函数来存储和检索用户密码,如 this Whosebug answer 中所述.
但是,我了解到可以通过设置组策略或仅通过 stopping/disabling 凭据管理器服务来禁用凭据管理器。在这种情况下,我想更新我的应用程序的 UI 以反映凭据存储当前不可用。
是否有可靠的方法以可编程方式确定凭据管理器是否已被禁用?
凭据服务的名称是 VaultSvc。 您可以在 this 答案中找到如何查询任何服务的状态,只需在将 "ValutSvc" 字符串传递给函数时使用代码即可。
在 windows 中存在支持不同保管库类型的 VaultSvc(友好名称 Credentials Service)。存在 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\VaultBF4C442-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 是 运行
但是Windows Credentials (77BC582B-F0A6-4E15-4E80-61736B6F3B29) 是内置的凭证,它是始终 运行(在 lsass 内),即使 VaultSvc 不是 运行(已禁用)。 CredRead
、CredWrite
、CredEnumerate
和其他 Cred*
api 将始终有效。它不能被禁用
存在未记录的 api Vault*
api 在 vaultcli.dll
中实施。所有这些 api 都以 Vault*
的形式命名。当我们调用它时,如果 VaultSvc 是 运行 - vaultsvc.dll
加载到 lsass 中并处理远程调用:
vaultcli!VaultSomeApi -> rpc - > vaultsvc!VltSomeApi
例如,当我们在客户端调用VaultEnumerateItems
时,VltEnumerateItems
在lsass(vaultsvc.dll)中调用。 VltEnumerateItems
内部调用的内容取决于它调用的混凝土拱顶。对于 Windows 凭据 保险库 - CredEnumerateW
在 VltEnumerateItems