1 // Copyright © 2015, skdltmxn 2 // Licensed under the MIT License <LICENSE.md> 3 //! Data Protection API Prototypes and Definitions 4 // This header file provides the definitions and symbols necessary for an 5 // Application or Smart Card Service Provider to access the Smartcard Subsystem. 6 pub type LPCBYTE = *const ::BYTE; 7 pub type SCARDCONTEXT = ::ULONG_PTR; 8 pub type PSCARDCONTEXT = *mut SCARDCONTEXT; 9 pub type LPSCARDCONTEXT = *mut SCARDCONTEXT; 10 pub type SCARDHANDLE = ::ULONG_PTR; 11 pub type PSCARDHANDLE = *mut SCARDHANDLE; 12 pub type LPSCARDHANDLE = *mut SCARDHANDLE; 13 pub const SCARD_AUTOALLOCATE: ::DWORD = -1i32 as ::DWORD; 14 pub const SCARD_SCOPE_USER: ::DWORD = 0; 15 pub const SCARD_SCOPE_TERMINAL: ::DWORD = 1; 16 pub const SCARD_SCOPE_SYSTEM: ::DWORD = 2; 17 pub const SCARD_PROVIDER_PRIMARY: ::DWORD = 1; 18 pub const SCARD_PROVIDER_CSP: ::DWORD = 2; 19 pub const SCARD_PROVIDER_KSP: ::DWORD = 3; 20 STRUCT!{nodebug struct SCARD_READERSTATEA { 21 szReader: ::LPCSTR, 22 pvUserData: ::LPVOID, 23 dwCurrentState: ::DWORD, 24 dwEventState: ::DWORD, 25 cbAtr: ::DWORD, 26 rgbAtr: [::BYTE; 36], 27 }} 28 pub type PSCARD_READERSTATEA = *mut SCARD_READERSTATEA; 29 pub type LPSCARD_READERSTATEA = *mut SCARD_READERSTATEA; 30 STRUCT!{nodebug struct SCARD_READERSTATEW { 31 szReader: ::LPCWSTR, 32 pvUserData: ::LPVOID, 33 dwCurrentState: ::DWORD, 34 dwEventState: ::DWORD, 35 cbAtr: ::DWORD, 36 rgbAtr: [::BYTE; 36], 37 }} 38 pub type PSCARD_READERSTATEW = *mut SCARD_READERSTATEW; 39 pub type LPSCARD_READERSTATEW = *mut SCARD_READERSTATEW; 40 pub type SCARD_READERSTATE_A = SCARD_READERSTATEA; 41 pub type SCARD_READERSTATE_W = SCARD_READERSTATEW; 42 pub type PSCARD_READERSTATE_A = PSCARD_READERSTATEA; 43 pub type PSCARD_READERSTATE_W = PSCARD_READERSTATEW; 44 pub type LPSCARD_READERSTATE_A = LPSCARD_READERSTATEA; 45 pub type LPSCARD_READERSTATE_W = LPSCARD_READERSTATEW; 46 pub const SCARD_STATE_UNAWARE: ::DWORD = 0x00000000; 47 pub const SCARD_STATE_IGNORE: ::DWORD = 0x00000001; 48 pub const SCARD_STATE_CHANGED: ::DWORD = 0x00000002; 49 pub const SCARD_STATE_UNKNOWN: ::DWORD = 0x00000004; 50 pub const SCARD_STATE_UNAVAILABLE: ::DWORD = 0x00000008; 51 pub const SCARD_STATE_EMPTY: ::DWORD = 0x00000010; 52 pub const SCARD_STATE_PRESENT: ::DWORD = 0x00000020; 53 pub const SCARD_STATE_ATRMATCH: ::DWORD = 0x00000040; 54 pub const SCARD_STATE_EXCLUSIVE: ::DWORD = 0x00000080; 55 pub const SCARD_STATE_INUSE: ::DWORD = 0x00000100; 56 pub const SCARD_STATE_MUTE: ::DWORD = 0x00000200; 57 pub const SCARD_STATE_UNPOWERED: ::DWORD = 0x00000400; 58 STRUCT!{nodebug struct SCARD_ATRMASK { 59 cbAtr: ::DWORD, 60 rgbAtr: [::BYTE; 36], 61 rgbMask: [::BYTE; 36], 62 }} 63 pub type PSCARD_ATRMASK = *mut SCARD_ATRMASK; 64 pub type LPSCARD_ATRMASK = *mut SCARD_ATRMASK; 65 pub const SCARD_SHARE_EXCLUSIVE: ::DWORD = 1; 66 pub const SCARD_SHARE_SHARED: ::DWORD = 2; 67 pub const SCARD_SHARE_DIRECT: ::DWORD = 3; 68 pub const SCARD_LEAVE_CARD: ::DWORD = 0; 69 pub const SCARD_RESET_CARD: ::DWORD = 1; 70 pub const SCARD_UNPOWER_CARD: ::DWORD = 2; 71 pub const SCARD_EJECT_CARD: ::DWORD = 3; 72 pub const SC_DLG_MINIMAL_UI: ::DWORD = 0x01; 73 pub const SC_DLG_NO_UI: ::DWORD = 0x02; 74 pub const SC_DLG_FORCE_UI: ::DWORD = 0x04; 75 pub const SCERR_NOCARDNAME: ::DWORD = 0x4000; 76 pub const SCERR_NOGUIDS: ::DWORD = 0x8000; 77 pub type LPOCNCONNPROCA = Option<unsafe extern "system" fn( 78 SCARDCONTEXT, ::LPSTR, ::LPSTR, ::PVOID, 79 ) -> SCARDHANDLE>; 80 pub type LPOCNCONNPROCW = Option<unsafe extern "system" fn( 81 SCARDCONTEXT, ::LPWSTR, ::LPWSTR, ::PVOID, 82 ) -> SCARDHANDLE>; 83 pub type LPOCNCHKPROC = Option<unsafe extern "system" fn( 84 SCARDCONTEXT, SCARDHANDLE, ::PVOID, 85 ) -> ::BOOL>; 86 pub type LPOCNDSCPROC = Option<unsafe extern "system" fn(SCARDCONTEXT, SCARDHANDLE, ::PVOID)>; 87 STRUCT!{nodebug struct OPENCARD_SEARCH_CRITERIAA { 88 dwStructSize: ::DWORD, 89 lpstrGroupNames: ::LPSTR, 90 nMaxGroupNames: ::DWORD, 91 rgguidInterfaces: ::LPCGUID, 92 cguidInterfaces: ::DWORD, 93 lpstrCardNames: ::LPSTR, 94 nMaxCardNames: ::DWORD, 95 lpfnCheck: LPOCNCHKPROC, 96 lpfnConnect: LPOCNCONNPROCA, 97 lpfnDisconnect: LPOCNDSCPROC, 98 pvUserData: ::LPVOID, 99 dwShareMode: ::DWORD, 100 dwPreferredProtocols: ::DWORD, 101 }} 102 pub type POPENCARD_SEARCH_CRITERIAA = *mut OPENCARD_SEARCH_CRITERIAA; 103 pub type LPOPENCARD_SEARCH_CRITERIAA = *mut OPENCARD_SEARCH_CRITERIAA; 104 STRUCT!{nodebug struct OPENCARD_SEARCH_CRITERIAW { 105 dwStructSize: ::DWORD, 106 lpstrGroupNames: ::LPWSTR, 107 nMaxGroupNames: ::DWORD, 108 rgguidInterfaces: ::LPCGUID, 109 cguidInterfaces: ::DWORD, 110 lpstrCardNames: ::LPWSTR, 111 nMaxCardNames: ::DWORD, 112 lpfnCheck: LPOCNCHKPROC, 113 lpfnConnect: LPOCNCONNPROCW, 114 lpfnDisconnect: LPOCNDSCPROC, 115 pvUserData: ::LPVOID, 116 dwShareMode: ::DWORD, 117 dwPreferredProtocols: ::DWORD, 118 }} 119 pub type POPENCARD_SEARCH_CRITERIAW = *mut OPENCARD_SEARCH_CRITERIAW; 120 pub type LPOPENCARD_SEARCH_CRITERIAW = *mut OPENCARD_SEARCH_CRITERIAW; 121 STRUCT!{nodebug struct OPENCARDNAME_EXA { 122 dwStructSize: ::DWORD, 123 hSCardContext: SCARDCONTEXT, 124 hwndOwner: ::HWND, 125 dwFlags: ::DWORD, 126 lpstrTitle: ::LPCSTR, 127 lpstrSearchDesc: ::LPCSTR, 128 hIcon: ::HICON, 129 pOpenCardSearchCriteria: POPENCARD_SEARCH_CRITERIAA, 130 lpfnConnect: LPOCNCONNPROCA, 131 pvUserData: ::LPVOID, 132 dwShareMode: ::DWORD, 133 dwPreferredProtocols: ::DWORD, 134 lpstrRdr: ::LPSTR, 135 nMaxRdr: ::DWORD, 136 lpstrCard: ::LPSTR, 137 nMaxCard: ::DWORD, 138 dwActiveProtocol: ::DWORD, 139 hCardHandle: SCARDHANDLE, 140 }} 141 pub type POPENCARDNAME_EXA = *mut OPENCARDNAME_EXA; 142 pub type LPOPENCARDNAME_EXA = *mut OPENCARDNAME_EXA; 143 STRUCT!{nodebug struct OPENCARDNAME_EXW { 144 dwStructSize: ::DWORD, 145 hSCardContext: SCARDCONTEXT, 146 hwndOwner: ::HWND, 147 dwFlags: ::DWORD, 148 lpstrTitle: ::LPCWSTR, 149 lpstrSearchDesc: ::LPCWSTR, 150 hIcon: ::HICON, 151 pOpenCardSearchCriteria: POPENCARD_SEARCH_CRITERIAW, 152 lpfnConnect: LPOCNCONNPROCW, 153 pvUserData: ::LPVOID, 154 dwShareMode: ::DWORD, 155 dwPreferredProtocols: ::DWORD, 156 lpstrRdr: ::LPWSTR, 157 nMaxRdr: ::DWORD, 158 lpstrCard: ::LPWSTR, 159 nMaxCard: ::DWORD, 160 dwActiveProtocol: ::DWORD, 161 hCardHandle: SCARDHANDLE, 162 }} 163 pub type POPENCARDNAME_EXW = *mut OPENCARDNAME_EXW; 164 pub type LPOPENCARDNAME_EXW = *mut OPENCARDNAME_EXW; 165 pub type OPENCARDNAMEA_EX = OPENCARDNAME_EXA; 166 pub type OPENCARDNAMEW_EX = OPENCARDNAME_EXW; 167 pub type POPENCARDNAMEA_EX = POPENCARDNAME_EXA; 168 pub type POPENCARDNAMEW_EX = POPENCARDNAME_EXW; 169 pub type LPOPENCARDNAMEA_EX = LPOPENCARDNAME_EXA; 170 pub type LPOPENCARDNAMEW_EX = LPOPENCARDNAME_EXW; 171 pub const SCARD_READER_SEL_AUTH_PACKAGE: ::DWORD = -629i32 as ::DWORD; 172 ENUM!{enum READER_SEL_REQUEST_MATCH_TYPE { 173 RSR_MATCH_TYPE_READER_AND_CONTAINER = 1, 174 RSR_MATCH_TYPE_SERIAL_NUMBER, 175 RSR_MATCH_TYPE_ALL_CARDS, 176 }} 177 STRUCT!{struct READER_SEL_REQUEST_ReaderAndContainerParameter { 178 cbReaderNameOffset: ::DWORD, 179 cchReaderNameLength: ::DWORD, 180 cbContainerNameOffset: ::DWORD, 181 cchContainerNameLength: ::DWORD, 182 dwDesiredCardModuleVersion: ::DWORD, 183 dwCspFlags: ::DWORD, 184 }} 185 STRUCT!{struct READER_SEL_REQUEST_SerialNumberParameter { 186 cbSerialNumberOffset: ::DWORD, 187 cbSerialNumberLength: ::DWORD, 188 dwDesiredCardModuleVersion: ::DWORD, 189 }} 190 STRUCT!{struct READER_SEL_REQUEST { 191 dwShareMode: ::DWORD, 192 dwPreferredProtocols: ::DWORD, 193 MatchType: READER_SEL_REQUEST_MATCH_TYPE, 194 ReaderAndContainerParameter: READER_SEL_REQUEST_ReaderAndContainerParameter, 195 }} 196 UNION!( 197 READER_SEL_REQUEST, ReaderAndContainerParameter, SerialNumberParameter, 198 SerialNumberParameter_mut, READER_SEL_REQUEST_SerialNumberParameter 199 ); 200 pub type PREADER_SEL_REQUEST = *mut READER_SEL_REQUEST; 201 STRUCT!{struct READER_SEL_RESPONSE { 202 cbReaderNameOffset: ::DWORD, 203 cchReaderNameLength: ::DWORD, 204 cbCardNameOffset: ::DWORD, 205 cchCardNameLength: ::DWORD, 206 }} 207 pub type PREADER_SEL_RESPONSE = *mut READER_SEL_RESPONSE; 208 STRUCT!{nodebug struct OPENCARDNAMEA { 209 dwStructSize: ::DWORD, 210 hwndOwner: ::HWND, 211 hSCardContext: SCARDCONTEXT, 212 lpstrGroupNames: ::LPSTR, 213 nMaxGroupNames: ::DWORD, 214 lpstrCardNames: ::LPSTR, 215 nMaxCardNames: ::DWORD, 216 rgguidInterfaces: ::LPCGUID, 217 cguidInterfaces: ::DWORD, 218 lpstrRdr: ::LPSTR, 219 nMaxRdr: ::DWORD, 220 lpstrCard: ::LPSTR, 221 nMaxCard: ::DWORD, 222 lpstrTitle: ::LPCSTR, 223 dwFlags: ::DWORD, 224 pvUserData: ::LPVOID, 225 dwShareMode: ::DWORD, 226 dwPreferredProtocols: ::DWORD, 227 dwActiveProtocol: ::DWORD, 228 lpfnConnect: LPOCNCONNPROCA, 229 lpfnCheck: LPOCNCHKPROC, 230 lpfnDisconnect: LPOCNDSCPROC, 231 hCardHandle: SCARDHANDLE, 232 }} 233 pub type POPENCARDNAMEA = *mut OPENCARDNAMEA; 234 pub type LPOPENCARDNAMEA = *mut OPENCARDNAMEA; 235 STRUCT!{nodebug struct OPENCARDNAMEW { 236 dwStructSize: ::DWORD, 237 hwndOwner: ::HWND, 238 hSCardContext: SCARDCONTEXT, 239 lpstrGroupNames: ::LPWSTR, 240 nMaxGroupNames: ::DWORD, 241 lpstrCardNames: ::LPWSTR, 242 nMaxCardNames: ::DWORD, 243 rgguidInterfaces: ::LPCGUID, 244 cguidInterfaces: ::DWORD, 245 lpstrRdr: ::LPWSTR, 246 nMaxRdr: ::DWORD, 247 lpstrCard: ::LPWSTR, 248 nMaxCard: ::DWORD, 249 lpstrTitle: ::LPCWSTR, 250 dwFlags: ::DWORD, 251 pvUserData: ::LPVOID, 252 dwShareMode: ::DWORD, 253 dwPreferredProtocols: ::DWORD, 254 dwActiveProtocol: ::DWORD, 255 lpfnConnect: LPOCNCONNPROCW, 256 lpfnCheck: LPOCNCHKPROC, 257 lpfnDisconnect: LPOCNDSCPROC, 258 hCardHandle: SCARDHANDLE, 259 }} 260 pub type POPENCARDNAMEW = *mut OPENCARDNAMEW; 261 pub type LPOPENCARDNAMEW = *mut OPENCARDNAMEW; 262 pub type OPENCARDNAME_A = OPENCARDNAMEA; 263 pub type OPENCARDNAME_W = OPENCARDNAMEW; 264 pub type POPENCARDNAME_A = POPENCARDNAMEA; 265 pub type POPENCARDNAME_W = POPENCARDNAMEW; 266 pub type LPOPENCARDNAME_A = LPOPENCARDNAMEA; 267 pub type LPOPENCARDNAME_W = LPOPENCARDNAMEW; 268 pub const SCARD_AUDIT_CHV_FAILURE: ::DWORD = 0x0; 269 pub const SCARD_AUDIT_CHV_SUCCESS: ::DWORD = 0x1; 270