Windows凭据管理器存储凭据的数量是否存在限制?
Windows凭据管理器凭据存储数量限制说明
核心结论
- 你找到的微软官方文档中提到的每应用500个凭据的默认限制,是适用于整个Windows凭据管理器的通用规则,并非仅针对RDP场景。
- 该限制以调用
CredWriteW的进程(按可执行文件路径标识)为单位统计,不同应用的凭据计数相互独立。
关键细节补充
- 当你存储
CRED_TYPE_DOMAIN_PASSWORD类型的凭据时,所有通过同一进程调用CredWriteW写入的凭据,都会被计入该进程对应的应用配额。 - 超出限制时,
CredWriteW会返回错误码ERROR_NOT_ENOUGH_QUOTA(数值1816),可在错误处理逻辑中捕获该错误,执行清理旧凭据或提示用户等操作。 - 关于持久化设置:你当前代码中使用的
CRED_PERSIST_SESSION仅能保证凭据在当前用户会话内有效,若要实现跨用户会话持久化,需将Persist字段改为CRED_PERSIST_LOCAL(适用于本地用户,凭据存储在本地机器)或CRED_PERSIST_ENTERPRISE(适用于域用户,可跨设备同步)。
你的参考代码(标注持久化修正点)
CREDENTIAL credential = {0}; credential.Type = CRED_TYPE_DOMAIN_PASSWORD; credential.TargetName = account; credential.CredentialBlobSize = credentialBlobSize; credential.CredentialBlob = (LPBYTE)password; // 修正:CRED_PERSIST_SESSION仅会话内有效,跨会话持久化需替换为以下两者之一 // credential.Persist = CRED_PERSIST_LOCAL; // credential.Persist = CRED_PERSIST_ENTERPRISE; credential.Persist = CRED_PERSIST_SESSION; credential.UserName = (LPWSTR)userName; // 写入用户空间凭据 if (!CredWriteW(&credential, 0)) { // 可添加错误码检查: // DWORD err = GetLastError(); // if (err == ERROR_NOT_ENOUGH_QUOTA) { /* 处理超限逻辑 */ } }
内容的提问来源于stack exchange,提问作者andre_ss6
相关产品推荐
相关产品推荐

