1 // Copyright © 2015, Peter Atashian 2 // Licensed under the MIT License <LICENSE.md> 3 //! Authentication API Prototypes and Definitions 4 pub const NERR_BASE: ::DWORD = 2100; 5 pub const NERR_PasswordExpired: ::DWORD = NERR_BASE+142; 6 pub const CRED_MAX_STRING_LENGTH: ::DWORD = 256; 7 pub const CRED_MAX_USERNAME_LENGTH: ::DWORD = 256+1+256; 8 pub const CRED_MAX_GENERIC_TARGET_NAME_LENGTH: ::DWORD = 32767; 9 pub const CRED_MAX_DOMAIN_TARGET_NAME_LENGTH: ::DWORD = 256+1+80; 10 pub const CRED_MAX_TARGETNAME_NAMESPACE_LENGTH: ::DWORD = 256; 11 pub const CRED_MAX_TARGETNAME_ATTRIBUTE_LENGTH: ::DWORD = 256; 12 pub const CRED_MAX_VALUE_SIZE: ::DWORD = 256; 13 pub const CRED_MAX_ATTRIBUTES: ::DWORD = 64; 14 pub const CRED_LOGON_TYPES_MASK: ::DWORD = 0xF000; 15 pub const CRED_FLAGS_PASSWORD_FOR_CERT: ::DWORD = 0x0001; 16 pub const CRED_FLAGS_PROMPT_NOW: ::DWORD = 0x0002; 17 pub const CRED_FLAGS_USERNAME_TARGET: ::DWORD = 0x0004; 18 pub const CRED_FLAGS_OWF_CRED_BLOB: ::DWORD = 0x0008; 19 pub const CRED_FLAGS_REQUIRE_CONFIRMATION: ::DWORD = 0x0010; 20 pub const CRED_FLAGS_WILDCARD_MATCH: ::DWORD = 0x0020; 21 pub const CRED_FLAGS_VALID_FLAGS: ::DWORD = 0xF03F; 22 pub const CRED_FLAGS_VALID_INPUT_FLAGS: ::DWORD = 0xF01F; 23 pub const CRED_TYPE_GENERIC: ::DWORD = 1; 24 pub const CRED_TYPE_DOMAIN_PASSWORD: ::DWORD = 2; 25 pub const CRED_TYPE_DOMAIN_CERTIFICATE: ::DWORD = 3; 26 pub const CRED_TYPE_DOMAIN_VISIBLE_PASSWORD: ::DWORD = 4; 27 pub const CRED_TYPE_GENERIC_CERTIFICATE: ::DWORD = 5; 28 pub const CRED_TYPE_DOMAIN_EXTENDED: ::DWORD = 6; 29 pub const CRED_TYPE_MAXIMUM: ::DWORD = 7; 30 pub const CRED_TYPE_MAXIMUM_EX: ::DWORD = CRED_TYPE_MAXIMUM+1000; 31 pub const CRED_MAX_CREDENTIAL_BLOB_SIZE: ::DWORD = 5*512; 32 pub const CRED_PERSIST_NONE: ::DWORD = 0; 33 pub const CRED_PERSIST_SESSION: ::DWORD = 1; 34 pub const CRED_PERSIST_LOCAL_MACHINE: ::DWORD = 2; 35 pub const CRED_PERSIST_ENTERPRISE: ::DWORD = 3; 36 STRUCT!{struct CREDENTIAL_ATTRIBUTEA { 37 Keyword: ::LPSTR, 38 Flags: ::DWORD, 39 ValueSize: ::DWORD, 40 Value: ::LPBYTE, 41 }} 42 pub type PCREDENTIAL_ATTRIBUTEA = *mut CREDENTIAL_ATTRIBUTEA; 43 STRUCT!{struct CREDENTIAL_ATTRIBUTEW { 44 Keyword: ::LPWSTR, 45 Flags: ::DWORD, 46 ValueSize: ::DWORD, 47 Value: ::LPBYTE, 48 }} 49 pub type PCREDENTIAL_ATTRIBUTEW = *mut CREDENTIAL_ATTRIBUTEW; 50 STRUCT!{struct CREDENTIALA { 51 Flags: ::DWORD, 52 Type: ::DWORD, 53 TargetName: ::LPSTR, 54 Comment: ::LPSTR, 55 LastWritten: ::FILETIME, 56 CredentialBlobSize: ::DWORD, 57 CredentialBlob: ::LPBYTE, 58 Persist: ::DWORD, 59 AttributeCount: ::DWORD, 60 Attributes: PCREDENTIAL_ATTRIBUTEA, 61 TargetAlias: ::LPSTR, 62 UserName: ::LPSTR, 63 }} 64 pub type PCREDENTIALA = *mut CREDENTIALA; 65 STRUCT!{struct CREDENTIALW { 66 Flags: ::DWORD, 67 Type: ::DWORD, 68 TargetName: ::LPWSTR, 69 Comment: ::LPWSTR, 70 LastWritten: ::FILETIME, 71 CredentialBlobSize: ::DWORD, 72 CredentialBlob: ::LPBYTE, 73 Persist: ::DWORD, 74 AttributeCount: ::DWORD, 75 Attributes: PCREDENTIAL_ATTRIBUTEW, 76 TargetAlias: ::LPWSTR, 77 UserName: ::LPWSTR, 78 }} 79 pub type PCREDENTIALW = *mut CREDENTIALW; 80 pub const CRED_TI_SERVER_FORMAT_UNKNOWN: ::ULONG = 0x0001; 81 pub const CRED_TI_DOMAIN_FORMAT_UNKNOWN: ::ULONG = 0x0002; 82 pub const CRED_TI_ONLY_PASSWORD_REQUIRED: ::ULONG = 0x0004; 83 pub const CRED_TI_USERNAME_TARGET: ::ULONG = 0x0008; 84 pub const CRED_TI_CREATE_EXPLICIT_CRED: ::ULONG = 0x0010; 85 pub const CRED_TI_WORKGROUP_MEMBER: ::ULONG = 0x0020; 86 pub const CRED_TI_VALID_FLAGS: ::ULONG = 0xF07F; 87 STRUCT!{struct CREDENTIAL_TARGET_INFORMATIONA { 88 TargetName: ::LPSTR, 89 NetbiosServerName: ::LPSTR, 90 DnsServerName: ::LPSTR, 91 NetbiosDomainName: ::LPSTR, 92 DnsDomainName: ::LPSTR, 93 DnsTreeName: ::LPSTR, 94 PackageName: ::LPSTR, 95 Flags: ::ULONG, 96 CredTypeCount: ::DWORD, 97 CredTypes: ::LPDWORD, 98 }} 99 pub type PCREDENTIAL_TARGET_INFORMATIONA = *mut CREDENTIAL_TARGET_INFORMATIONA; 100 STRUCT!{struct CREDENTIAL_TARGET_INFORMATIONW { 101 TargetName: ::LPWSTR, 102 NetbiosServerName: ::LPWSTR, 103 DnsServerName: ::LPWSTR, 104 NetbiosDomainName: ::LPWSTR, 105 DnsDomainName: ::LPWSTR, 106 DnsTreeName: ::LPWSTR, 107 PackageName: ::LPWSTR, 108 Flags: ::ULONG, 109 CredTypeCount: ::DWORD, 110 CredTypes: ::LPDWORD, 111 }} 112 pub type PCREDENTIAL_TARGET_INFORMATIONW = *mut CREDENTIAL_TARGET_INFORMATIONW; 113 pub const CERT_HASH_LENGTH: usize = 20; 114 STRUCT!{struct CERT_CREDENTIAL_INFO { 115 cbSize: ::ULONG, 116 rgbHashOfCert: [::UCHAR; CERT_HASH_LENGTH], 117 }} 118 pub type PCERT_CREDENTIAL_INFO = *mut CERT_CREDENTIAL_INFO; 119 STRUCT!{struct USERNAME_TARGET_CREDENTIAL_INFO { 120 UserName: ::LPWSTR, 121 }} 122 pub type PUSERNAME_TARGET_CREDENTIAL_INFO = *mut USERNAME_TARGET_CREDENTIAL_INFO; 123 STRUCT!{struct BINARY_BLOB_CREDENTIAL_INFO { 124 cbBlob: ::ULONG, 125 pbBlob: ::LPBYTE, 126 }} 127 pub type PBINARY_BLOB_CREDENTIAL_INFO = *mut BINARY_BLOB_CREDENTIAL_INFO; 128 ENUM!{enum CRED_MARSHAL_TYPE { 129 CertCredential = 1, 130 UsernameTargetCredential, 131 BinaryBlobCredential, 132 UsernameForPackedCredentials, 133 }} 134 pub type PCRED_MARSHAL_TYPE = *mut CRED_MARSHAL_TYPE; 135 ENUM!{enum CRED_PROTECTION_TYPE { 136 CredUnprotected, 137 CredUserProtection, 138 CredTrustedProtection, 139 }} 140 pub type PCRED_PROTECTION_TYPE = *mut CRED_PROTECTION_TYPE; 141 pub const CRED_PACK_PROTECTED_CREDENTIALS: ::DWORD = 0x1; 142 pub const CRED_PACK_WOW_BUFFER: ::DWORD = 0x2; 143 pub const CRED_PACK_GENERIC_CREDENTIALS: ::DWORD = 0x4; 144 pub const CRED_PACK_ID_PROVIDER_CREDENTIALS: ::DWORD = 0x8; 145 STRUCT!{struct CREDUI_INFOA { 146 cbSize: ::DWORD, 147 hwndParent: ::HWND, 148 pszMessageText: ::PCSTR, 149 pszCaptionText: ::PCSTR, 150 hbmBanner: ::HBITMAP, 151 }} 152 pub type PCREDUI_INFOA = *mut CREDUI_INFOA; 153 STRUCT!{struct CREDUI_INFOW { 154 cbSize: ::DWORD, 155 hwndParent: ::HWND, 156 pszMessageText: ::PCWSTR, 157 pszCaptionText: ::PCWSTR, 158 hbmBanner: ::HBITMAP, 159 }} 160 pub type PCREDUI_INFOW = *mut CREDUI_INFOW; 161 pub const CREDUI_MAX_MESSAGE_LENGTH: ::DWORD = 1024; 162 pub const CREDUI_MAX_CAPTION_LENGTH: ::DWORD = 128; 163 pub const CREDUI_MAX_GENERIC_TARGET_LENGTH: ::DWORD = CRED_MAX_GENERIC_TARGET_NAME_LENGTH; 164 pub const CREDUI_MAX_DOMAIN_TARGET_LENGTH: ::DWORD = CRED_MAX_DOMAIN_TARGET_NAME_LENGTH; 165 pub const CREDUI_MAX_USERNAME_LENGTH: ::DWORD = CRED_MAX_USERNAME_LENGTH; 166 pub const CREDUI_MAX_PASSWORD_LENGTH: ::DWORD = 512 / 2; 167 pub const CREDUI_FLAGS_INCORRECT_PASSWORD: ::DWORD = 0x00001; 168 pub const CREDUI_FLAGS_DO_NOT_PERSIST: ::DWORD = 0x00002; 169 pub const CREDUI_FLAGS_REQUEST_ADMINISTRATOR: ::DWORD = 0x00004; 170 pub const CREDUI_FLAGS_EXCLUDE_CERTIFICATES: ::DWORD = 0x00008; 171 pub const CREDUI_FLAGS_REQUIRE_CERTIFICATE: ::DWORD = 0x00010; 172 pub const CREDUI_FLAGS_SHOW_SAVE_CHECK_BOX: ::DWORD = 0x00040; 173 pub const CREDUI_FLAGS_ALWAYS_SHOW_UI: ::DWORD = 0x00080; 174 pub const CREDUI_FLAGS_REQUIRE_SMARTCARD: ::DWORD = 0x00100; 175 pub const CREDUI_FLAGS_PASSWORD_ONLY_OK: ::DWORD = 0x00200; 176 pub const CREDUI_FLAGS_VALIDATE_USERNAME: ::DWORD = 0x00400; 177 pub const CREDUI_FLAGS_COMPLETE_USERNAME: ::DWORD = 0x00800; 178 pub const CREDUI_FLAGS_PERSIST: ::DWORD = 0x01000; 179 pub const CREDUI_FLAGS_SERVER_CREDENTIAL: ::DWORD = 0x04000; 180 pub const CREDUI_FLAGS_EXPECT_CONFIRMATION: ::DWORD = 0x20000; 181 pub const CREDUI_FLAGS_GENERIC_CREDENTIALS: ::DWORD = 0x40000; 182 pub const CREDUI_FLAGS_USERNAME_TARGET_CREDENTIALS: ::DWORD = 0x80000; 183 pub const CREDUI_FLAGS_KEEP_USERNAME: ::DWORD = 0x100000; 184 pub const CREDUI_FLAGS_PROMPT_VALID: ::DWORD = CREDUI_FLAGS_INCORRECT_PASSWORD 185 | CREDUI_FLAGS_DO_NOT_PERSIST | CREDUI_FLAGS_REQUEST_ADMINISTRATOR 186 | CREDUI_FLAGS_EXCLUDE_CERTIFICATES | CREDUI_FLAGS_REQUIRE_CERTIFICATE 187 | CREDUI_FLAGS_SHOW_SAVE_CHECK_BOX | CREDUI_FLAGS_ALWAYS_SHOW_UI 188 | CREDUI_FLAGS_REQUIRE_SMARTCARD | CREDUI_FLAGS_PASSWORD_ONLY_OK 189 | CREDUI_FLAGS_VALIDATE_USERNAME | CREDUI_FLAGS_COMPLETE_USERNAME | CREDUI_FLAGS_PERSIST 190 | CREDUI_FLAGS_SERVER_CREDENTIAL | CREDUI_FLAGS_EXPECT_CONFIRMATION 191 | CREDUI_FLAGS_GENERIC_CREDENTIALS | CREDUI_FLAGS_USERNAME_TARGET_CREDENTIALS 192 | CREDUI_FLAGS_KEEP_USERNAME; 193 pub const CREDUIWIN_GENERIC: ::DWORD = 0x00000001; 194 pub const CREDUIWIN_CHECKBOX: ::DWORD = 0x00000002; 195 pub const CREDUIWIN_AUTHPACKAGE_ONLY: ::DWORD = 0x00000010; 196 pub const CREDUIWIN_IN_CRED_ONLY: ::DWORD = 0x00000020; 197 pub const CREDUIWIN_ENUMERATE_ADMINS: ::DWORD = 0x00000100; 198 pub const CREDUIWIN_ENUMERATE_CURRENT_USER: ::DWORD = 0x00000200; 199 pub const CREDUIWIN_SECURE_PROMPT: ::DWORD = 0x00001000; 200 pub const CREDUIWIN_PREPROMPTING: ::DWORD = 0x00002000; 201 pub const CREDUIWIN_PACK_32_WOW: ::DWORD = 0x10000000; 202 pub const CREDUIWIN_VALID_FLAGS: ::DWORD = CREDUIWIN_GENERIC | CREDUIWIN_CHECKBOX 203 | CREDUIWIN_AUTHPACKAGE_ONLY | CREDUIWIN_IN_CRED_ONLY | CREDUIWIN_ENUMERATE_ADMINS 204 | CREDUIWIN_ENUMERATE_CURRENT_USER | CREDUIWIN_SECURE_PROMPT | CREDUIWIN_PREPROMPTING 205 | CREDUIWIN_PACK_32_WOW; 206 pub const CRED_PRESERVE_CREDENTIAL_BLOB: ::DWORD = 0x1; 207 pub const CRED_ENUMERATE_ALL_CREDENTIALS: ::DWORD = 0x1; 208 pub const CRED_CACHE_TARGET_INFORMATION: ::DWORD = 0x1; 209 pub const CRED_ALLOW_NAME_RESOLUTION: ::DWORD = 0x1; 210