共用方式為


CREDENTIALA 結構 (wincred.h)

CREDENTIAL 結構包含個別認證。

語法

typedef struct _CREDENTIALA {
  DWORD                  Flags;
  DWORD                  Type;
  LPSTR                  TargetName;
  LPSTR                  Comment;
  FILETIME               LastWritten;
  DWORD                  CredentialBlobSize;
  LPBYTE                 CredentialBlob;
  DWORD                  Persist;
  DWORD                  AttributeCount;
  PCREDENTIAL_ATTRIBUTEA Attributes;
  LPSTR                  TargetAlias;
  LPSTR                  UserName;
} CREDENTIALA, *PCREDENTIALA;

成員

Flags

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

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

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

如果 Type是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 函式。

只有在 Type是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 成員可唯一識別認證。 建立認證之後,就無法變更此成員。 相反地,應該刪除具有舊名稱的認證,以及建立新名稱的認證。

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

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

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

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

如果 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

上次修改認證的時間,以國際標準時間 (Greenwich Mean Time) 。 針對寫入作業,會忽略這個成員的值。

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 的帳戶用戶名稱。

如果認證類型CRED_TYPE_DOMAIN_PASSWORD,此成員可以是 DomainNameUserName 或 UPN。

如果認證類型CRED_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