C# CredRead()无法跨登录会话工作
我正在按照使用凭据管理器API。引用相关代码段:C# CredRead()无法跨登录会话工作,c#,security,credentials,credential-manager,C#,Security,Credentials,Credential Manager,我正在按照使用凭据管理器API。引用相关代码段: public static Credential ReadCredential(string applicationName) { IntPtr nCredPtr; bool read = CredRead(applicationName, CredentialType.Generic, 0, out nCredPtr); if (read) { using (CriticalCredentialH
public static Credential ReadCredential(string applicationName)
{
IntPtr nCredPtr;
bool read = CredRead(applicationName, CredentialType.Generic, 0, out nCredPtr);
if (read)
{
using (CriticalCredentialHandle critCred = new CriticalCredentialHandle(nCredPtr))
{
CREDENTIAL cred = critCred.GetCredential();
return ReadCredential(cred);
}
}
return null;
}
它工作得很好,除了当我注销Windows帐户然后再次登录时,creaward()返回false并封送。GetLastWin32Error()
给我1168
,或者找不到错误
为什么会有这种行为?凭证管理API是否仅适用于当前会话,还是我做错了什么
编辑:下面的一条评论说:
凭据管理API的文档似乎表明这些凭据与登录会话相关联。LogonUser可能会导致新的登录会话,因此那里不存在凭据
然而,我还没有发现任何证据表明凭证管理是特定于会话的。我想如果是这样的话,那就没什么用了
编辑2:仅针对记录,如果需要获取指示CredRead()失败原因的错误号,请检查中的ReadCred()方法。您可以通过设置Persist
属性来配置凭证的持久化方式
来自MSDN()
CRED_PERSIST_SESSION
CRED_PERSIST_LOCAL_MACHINE
CRED_PERSIST_ENTERPRISE