共用方式為


CREDENTIALW 結構 (wincred.h)

CREDENTIAL 結構包含個別認證。

語法

typedef struct _CREDENTIALW {
  DWORD                  Flags;
  DWORD                  Type;
#if ...
  wchar_t                *TargetName;
#else
  LPWSTR                 TargetName;
#endif
#if ...
  wchar_t                *Comment;
#else
  LPWSTR                 Comment;
#endif
  FILETIME               LastWritten;
  DWORD                  CredentialBlobSize;
  LPBYTE                 CredentialBlob;
  DWORD                  Persist;
  DWORD                  AttributeCount;
  PCREDENTIAL_ATTRIBUTEW Attributes;
#if ...
  wchar_t                *TargetAlias;
#else
  LPWSTR                 TargetAlias;
#endif
#if ...
  wchar_t                *UserName;
#else
  LPWSTR                 UserName;
#endif
} CREDENTIALW, *PCREDENTIALW;

成員

Flags

識別認證特性的位成員。 未定義的位應該初始化為零,而不會改變以允許未來的增強功能。

價值 意義
CRED_FLAGS_PROMPT_NOW
2 (0x2)
如果認證未保存 CredentialBlob,而且認證尚未在此登入會話期間寫入,則為位集。 輸入上會忽略此位,並在查詢時自動設定。

如果 類型CRED_TYPE_DOMAIN_CERTIFICATECredentialBlob 不會跨登入會話保存,因為憑證的 PIN 非常機密資訊。 事實上,當認證寫入認證管理員時,PIN 會傳遞至與憑證相關聯的 CSP。 CSP 會強制執行適用於憑證的 PIN 保留原則。

如果 類型CRED_TYPE_DOMAIN_PASSWORDCRED_TYPE_DOMAIN_CERTIFICATE,則使用標示為 CRED_FLAGS_PROMPT_NOW的認證時,驗證套件一律會失敗驗證嘗試。 應用程式(通常是透過金鑰通道 UI)提示使用者輸入密碼。 應用程式會儲存認證並重試驗證。 由於認證最近已寫入,因此驗證套件現在會取得未標示為CRED_FLAGS_PROMPT_NOW的認證。

CRED_FLAGS_USERNAME_TARGET
4 (0x4)
如果此認證 TargetName 成員設定為與 UserName 成員相同的值,則會設定位。 這類認證是專為儲存特定使用者 CredentialBlob 而設計的認證。 如需詳細資訊,請參閱 CredMarshalCredential 函式。

只有當類型 是 CRED_TYPE_DOMAIN_PASSWORDCRED_TYPE_DOMAIN_CERTIFICATE時,才能指定這個位。

Type

認證的類型。 建立認證之後,就無法變更此成員。 下列值有效。

價值 意義
CRED_TYPE_GENERIC
1 (0x1)
認證是一般認證。 任何特定的驗證套件都不會使用認證。 認證會安全地儲存,但沒有其他顯著特性。
CRED_TYPE_DOMAIN_PASSWORD
2 (0x2)
認證是密碼認證,是Microsoft驗證套件特有的認證。 連接到具名目標時,NTLM、Kerberos 和 Negotiate 驗證套件會自動使用此認證。
CRED_TYPE_DOMAIN_CERTIFICATE
3 (0x3)
認證是憑證認證,而且是Microsoft驗證套件特有的認證。 聯機到具名目標時,Kerberos、Negotiate 和 Schannel 驗證套件會自動使用此認證。
CRED_TYPE_DOMAIN_VISIBLE_PASSWORD
4 (0x4)
不再支援此值。

Windows Server 2003 和 Windows XP:認證是密碼認證,而且是來自 Microsoft 驗證套件的特定認證。 當連線到具名目標時,Passport 驗證套件會自動使用此認證。

未來將會定義其他值。 應用程式應該寫入以允許他們不瞭解的認證類型。

CRED_TYPE_GENERIC_CERTIFICATE
5 (0x5)
認證是一般驗證套件的憑證認證。

Windows Server 2008、Windows Vista、Windows Server 2003 和 Windows XP:不支援此值。

CRED_TYPE_DOMAIN_EXTENDED
6 (0x6)
延伸交涉套件支持認證。

Windows Server 2008、Windows Vista、Windows Server 2003 和 Windows XP: 不支援此值。

CRED_TYPE_MAXIMUM
7 (0x7)
支援的認證類型數目上限。

Windows Server 2008、Windows Vista、Windows Server 2003 和 Windows XP:不支援此值。

CRED_TYPE_MAXIMUM_EX
CRED_TYPE_MAXIMUM+1000
現在允許新應用程式在舊版操作系統上執行的支持認證類型擴充數目上限。

Windows Server 2008、Windows Vista、Windows Server 2003 和 Windows XP:不支援此值。

TargetName

認證的名稱。 TargetNameType 成員可唯一識別認證。 建立認證之後,就無法變更此成員。 相反地,應該刪除具有舊名稱的認證,並使用新名稱建立的認證。

如果 類型CRED_TYPE_DOMAIN_PASSWORDCRED_TYPE_DOMAIN_CERTIFICATE,則此成員會識別認證要使用的伺服器或伺服器。 成員是 NetBIOS 或 DNS 伺服器名稱、包含通配符的 DNS 主機名後綴、包含通配符序列的 NetBIOS 或 DNS 功能變數名稱,或是星號。

如果 TargetName 是 DNS 主機名,TargetAlias 成員可以是主機的 NetBIOS 名稱。

如果 TargetName 是包含通配符的 DNS 主機名後綴,則 DNS 主機名的最左邊捲標是星號 \,這表示目標名稱是名稱以指定名稱結尾的任何伺服器,例如 *.microsoft.com。

如果 TargetName 是包含通配符序列的功能變數名稱,則語法是功能變數名稱後面接著反斜杠和星號 (\*),表示目標名稱是具名網域 (或 realm) 成員的任何伺服器。

如果 TargetName 是包含通配符序列的 DNS 功能變數名稱,則 TargetAlias 成員可以是 NetBIOS 功能變數名稱,該功能變數名稱會針對相同的網域使用通配符序列。

如果 TargetName 指定 DFS 共用,例如,DfsRoot\DfsShare,則此認證會符合特定 DFS 共用,以及透過該 DFS 共用到達的任何伺服器。

如果 TargetName 為單一星號 ,則此認證會比對任何伺服器名稱。

如果 TargetName 為CRED_SESSION_WILDCARD_NAME,則此認證會比對任何伺服器名稱。 此認證會比對單一星號之前,而且只有在 PersistCRED_PERSIST_SESSION時才有效。 認證可由想要暫時覆寫預設認證的應用程式設定。

此成員不能超過 CRED_MAX_DOMAIN_TARGET_NAME_LENGTH (337) 個字元。

如果 類型 是CRED_TYPE_GENERIC,此成員應該識別除了實際目標之外,還使用認證的服務。 Microsoft建議名稱前面加上實作服務的公司名稱。 Microsoft會使用前置詞 「Microsoft」。 由 Microsoft 撰寫的服務應該附加其服務名稱,例如,Microsoft_RAS_TargetName。 此成員不能超過 CRED_MAX_GENERIC_TARGET_NAME_LENGTH (32767) 個字元。

此成員不區分大小寫。

Comment

描述此認證的使用者字串批註。 此成員不能超過 CRED_MAX_STRING_LENGTH (256) 個字元。

LastWritten

在國際標準時間(格林威治平均時間)中,認證上次修改的時間。 針對寫入作業,會忽略這個成員的值。

CredentialBlobSize

CredentialBlob 成員的大小,以位元組為單位。 這個成員不能大於 CRED_MAX_CREDENTIAL_BLOB_SIZE (5*512) 個字節。

CredentialBlob

認證的秘密數據。 CredentialBlob 成員可以讀取和寫入。

如果 Type 成員是 CRED_TYPE_DOMAIN_PASSWORD,此成員會包含 UserName的純文本 Unicode 密碼。 CredentialBlobCredentialBlobSize 成員不包含尾端零字元。 此外,針對 CRED_TYPE_DOMAIN_PASSWORD,此成員只能由驗證套件讀取。

如果 Type 成員是 CRED_TYPE_DOMAIN_CERTIFICATE,此成員會包含 UserName的清除測試 Unicode PIN。 CredentialBlobCredentialBlobSize 成員不包含尾端零字元。 此外,此成員只能由驗證套件讀取。

如果 Type 成員是 CRED_TYPE_GENERIC,則此成員是由應用程式定義。

認證必須是可攜式的。 應用程式應該確保 CredentialBlob 中的數據可攜式。 應用程式會定義 credentialBlob 中數據的位元組端和對齊方式,

Persist

定義此認證的持續性。 這個成員可以讀取和寫入。

價值 意義
CRED_PERSIST_SESSION
1 (0x1)
認證會保存登入會話的存留期。 這個相同使用者的其他登入會話將無法看見。 此使用者註銷並重新開啟之後,就不存在。
CRED_PERSIST_LOCAL_MACHINE
2 (0x2)
此認證會保存此同一部計算機上所有後續登入會話的認證。 此同一部計算機上這個相同使用者的其他登入會話可看見,而其他電腦上的此使用者登入會話則看不見。

Windows Vista Home Basic、Windows Vista Home Premium、Windows Vista Starter 和 Windows XP Home Edition:不支援此值。

CRED_PERSIST_ENTERPRISE
3 (0x3)
此認證會保存此同一部計算機上所有後續登入會話的認證。 此同一部電腦上的其他相同使用者的登入會話,以及在其他電腦上登入此使用者的會話是可見的。

如果系統管理員或使用者將使用者帳戶設定為沒有漫遊能力狀態,則可以將此選項實作為本機保存認證。 例如,如果用戶沒有漫遊配置檔,認證只會在本機保存。

Windows Vista Home Basic、Windows Vista Home Premium、Windows Vista Starter 和 Windows XP Home Edition:不支援此值。

AttributeCount

要與認證相關聯的應用程式定義屬性數目。 這個成員可以讀取和寫入。 其值不能大於 CRED_MAX_ATTRIBUTES (64)。

Attributes

與認證相關聯的應用程式定義屬性。 這個成員可以讀取和寫入。

TargetAlias

TargetName 成員的別名。 這個成員可以讀取和寫入。 長度不能超過 CRED_MAX_STRING_LENGTH (256) 個字元。

如果認證 類型CRED_TYPE_GENERIC,這個成員可以是非NULL,但認證管理員會忽略該成員。

UserName

用來連線到 targetName 帳戶的用戶名稱。

如果認證 TypeCRED_TYPE_DOMAIN_PASSWORD,此成員可以是 DomainName\UserName 或 UPN。

如果認證 TypeCRED_TYPE_DOMAIN_CERTIFICATE,此成員必須是使用 CertCredential 呼叫 CredMarshalCredential 所建立的封送處理憑證參考。

如果認證 類型CRED_TYPE_GENERIC,這個成員可以是非NULL,但認證管理員會忽略該成員。

此成員不能超過 CRED_MAX_USERNAME_LENGTH (513) 個字元。

言論

注意

wincred.h 標頭會將 CREDENTIAL 定義為別名,根據 UNICODE 預處理器常數的定義,自動選取此函式的 ANSI 或 Unicode 版本。 混合使用編碼中性別名與非編碼中性的程序代碼,可能會導致編譯或運行時間錯誤不符。 如需詳細資訊,請參閱函式原型的 慣例。

要求

要求 價值
最低支援的用戶端 Windows XP [僅限傳統型應用程式]
支援的最低伺服器 Windows Server 2003 [僅限傳統型應用程式]
標頭 wincred.h