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