3a77f51755dce4d807defca4448b5b0c221b9dce
[reactos.git] / reactos / include / psdk / winscard.h
1 /*
2 * WinSCard.h
3 *
4 * SmartCard API
5 *
6 * THIS SOFTWARE IS NOT COPYRIGHTED
7 *
8 * This source code is offered for use in the public domain. You may
9 * use, modify or distribute it freely.
10 *
11 * This code is distributed in the hope that it will be useful but
12 * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
13 * DISCLAIMED. This includes but is not limited to warranties of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
15 *
16 */
17
18 #ifndef __WINSCARD_H
19 #define __WINSCARD_H
20
21 #include <WinSmCrd.h>
22
23 #ifdef __cplusplus
24 extern "C" {
25 #endif
26
27 #define SCARD_S_SUCCESS NO_ERROR
28
29 #define SCARD_F_INTERNAL_ERROR ((DWORD)0x80100001)
30 #define SCARD_E_CANCELLED ((DWORD)0x80100002)
31 #define SCARD_E_INVALID_HANDLE ((DWORD)0x80100003)
32 #define SCARD_E_INVALID_PARAMETER ((DWORD)0x80100004)
33 #define SCARD_E_INVALID_TARGET ((DWORD)0x80100005)
34 #define SCARD_E_NO_MEMORY ((DWORD)0x80100006)
35 #define SCARD_F_WAITED_TOO_LONG ((DWORD)0x80100007)
36 #define SCARD_E_INSUFFICIENT_BUFFER ((DWORD)0x80100008)
37 #define SCARD_E_UNKNOWN_READER ((DWORD)0x80100009)
38 #define SCARD_E_TIMEOUT ((DWORD)0x8010000A)
39 #define SCARD_E_SHARING_VIOLATION ((DWORD)0x8010000B)
40 #define SCARD_E_NO_SMARTCARD ((DWORD)0x8010000C)
41 #define SCARD_E_UNKNOWN_CARD ((DWORD)0x8010000D)
42 #define SCARD_E_CANT_DISPOSE ((DWORD)0x8010000E)
43 #define SCARD_E_PROTO_MISMATCH ((DWORD)0x8010000F)
44 #define SCARD_E_NOT_READY ((DWORD)0x80100010)
45 #define SCARD_E_INVALID_VALUE ((DWORD)0x80100011)
46 #define SCARD_E_SYSTEM_CANCELLED ((DWORD)0x80100012)
47 #define SCARD_F_COMM_ERROR ((DWORD)0x80100013)
48 #define SCARD_F_UNKNOWN_ERROR ((DWORD)0x80100014)
49 #define SCARD_E_INVALID_ATR ((DWORD)0x80100015)
50 #define SCARD_E_NOT_TRANSACTED ((DWORD)0x80100016)
51 #define SCARD_E_READER_UNAVAILABLE ((DWORD)0x80100017)
52 #define SCARD_P_SHUTDOWN ((DWORD)0x80100018)
53 #define SCARD_E_PCI_TOO_SMALL ((DWORD)0x80100019)
54 #define SCARD_E_READER_UNSUPPORTED ((DWORD)0x8010001A)
55 #define SCARD_E_DUPLICATE_READER ((DWORD)0x8010001B)
56 #define SCARD_E_CARD_UNSUPPORTED ((DWORD)0x8010001C)
57 #define SCARD_E_NO_SERVICE ((DWORD)0x8010001D)
58 #define SCARD_E_SERVICE_STOPPED ((DWORD)0x8010001E)
59 #define SCARD_E_UNEXPECTED ((DWORD)0x8010001F)
60 #define SCARD_E_ICC_INSTALLATION ((DWORD)0x80100020)
61 #define SCARD_E_ICC_CREATEORDER ((DWORD)0x80100021)
62 #define SCARD_E_UNSUPPORTED_FEATURE ((DWORD)0x80100022)
63 #define SCARD_E_DIR_NOT_FOUND ((DWORD)0x80100023)
64 #define SCARD_E_FILE_NOT_FOUND ((DWORD)0x80100024)
65 #define SCARD_E_NO_DIR ((DWORD)0x80100025)
66 #define SCARD_E_NO_FILE ((DWORD)0x80100026)
67 #define SCARD_E_NO_ACCESS ((DWORD)0x80100027)
68 #define SCARD_E_WRITE_TOO_MANY ((DWORD)0x80100028)
69 #define SCARD_E_BAD_SEEK ((DWORD)0x80100029)
70 #define SCARD_E_INVALID_CHV ((DWORD)0x8010002A)
71 #define SCARD_E_UNKNOWN_RES_MNG ((DWORD)0x8010002B)
72 #define SCARD_E_NO_SUCH_CERTIFICATE ((DWORD)0x8010002C)
73 #define SCARD_E_CERTIFICATE_UNAVAILABLE ((DWORD)0x8010002D)
74 #define SCARD_E_NO_READERS_AVAILABLE ((DWORD)0x8010002E)
75 #define SCARD_E_COMM_DATA_LOST ((DWORD)0x8010002F)
76 #define SCARD_E_NO_KEY_CONTAINER ((DWORD)0x80100030)
77 #define SCARD_W_UNSUPPORTED_CARD ((DWORD)0x80100065)
78 #define SCARD_W_UNRESPONSIVE_CARD ((DWORD)0x80100066)
79 #define SCARD_W_UNPOWERED_CARD ((DWORD)0x80100067)
80 #define SCARD_W_RESET_CARD ((DWORD)0x80100068)
81 #define SCARD_W_REMOVED_CARD ((DWORD)0x80100069)
82 #define SCARD_W_SECURITY_VIOLATION ((DWORD)0x8010006A)
83 #define SCARD_W_WRONG_CHV ((DWORD)0x8010006B)
84 #define SCARD_W_CHV_BLOCKED ((DWORD)0x8010006C)
85 #define SCARD_W_EOF ((DWORD)0x8010006D)
86 #define SCARD_W_CANCELLED_BY_USER ((DWORD)0x8010006E)
87 #define SCARD_W_CARD_NOT_AUTHENTICATED ((DWORD)0x8010006F)
88
89 #define SCARD_SHARE_EXCLUSIVE (0x1)
90 #define SCARD_SHARE_SHARED (0x2)
91 #define SCARD_SHARE_DIRECT (0x3)
92
93 #define SCARD_LEAVE_CARD (0x0)
94 #define SCARD_RESET_CARD (0x1)
95 #define SCARD_UNPOWER_CARD (0x2)
96 #define SCARD_EJECT_CARD (0x3)
97
98 #define SCARD_AUTOALLOCATE ((DWORD)-1)
99 #define SCARD_SCOPE_USER (0x0)
100 #define SCARD_SCOPE_TERMINAL (0x1)
101 #define SCARD_SCOPE_SYSTEM (0x2)
102
103 #define SCARD_PROVIDER_PRIMARY (0x1)
104 #define SCARD_PROVIDER_CSP (0x2)
105
106 typedef ULONG_PTR SCARDCONTEXT, *PSCARDCONTEXT, *LPSCARDCONTEXT;
107 typedef ULONG_PTR SCARDHANDLE, *PSCARDHANDLE, *LPSCARDHANDLE;
108 typedef const BYTE *LPCBYTE;
109
110 typedef struct _SCARD_READERSTATEA
111 {
112 LPCSTR szReader;
113 LPVOID pvUserData;
114 DWORD dwCurrentState;
115 DWORD dwEventState;
116 DWORD cbAtr;
117 BYTE rgbAtr[36];
118 } SCARD_READERSTATEA, *PSCARD_READERSTATEA, *LPSCARD_READERSTATEA;
119
120 typedef struct _SCARD_READERSTATEW
121 {
122 LPCWSTR szReader;
123 LPVOID pvUserData;
124 DWORD dwCurrentState;
125 DWORD dwEventState;
126 DWORD cbAtr;
127 BYTE rgbAtr[36];
128 } SCARD_READERSTATEW, *PSCARD_READERSTATEW, *LPSCARD_READERSTATEW;
129
130 typedef struct _SCARD_ATRMASK
131 {
132 DWORD cbAtr;
133 BYTE rgbAtr[36];
134 BYTE rgbMask[36];
135 } SCARD_ATRMASK, *PSCARD_ATRMASK, *LPSCARD_ATRMASK;
136
137 HANDLE WINAPI SCardAccessStartedEvent(VOID);
138 LONG WINAPI SCardAddReaderToGroupA(SCARDCONTEXT, LPCSTR, LPCSTR);
139 LONG WINAPI SCardAddReaderToGroupW(SCARDCONTEXT, LPCWSTR, LPCWSTR);
140 LONG WINAPI SCardBeginTransaction(SCARDHANDLE);
141 LONG WINAPI SCardCancel(SCARDCONTEXT);
142 LONG WINAPI SCardConnectA(SCARDCONTEXT, LPCSTR, DWORD, DWORD, LPSCARDHANDLE, LPDWORD);
143 LONG WINAPI SCardConnectW(SCARDCONTEXT, LPCWSTR, DWORD, DWORD, LPSCARDHANDLE, LPDWORD);
144 LONG WINAPI SCardControl(SCARDHANDLE, DWORD, LPCVOID, DWORD, LPVOID, DWORD, LPDWORD);
145 LONG WINAPI SCardDisconnect(SCARDHANDLE, DWORD);
146 LONG WINAPI SCardEndTransaction(SCARDHANDLE, DWORD);
147 LONG WINAPI SCardEstablishContext(DWORD, LPCVOID, LPCVOID, LPSCARDCONTEXT);
148 LONG WINAPI SCardForgetCardTypeA(SCARDCONTEXT, LPCSTR);
149 LONG WINAPI SCardForgetCardTypeW(SCARDCONTEXT, LPCWSTR);
150 LONG WINAPI SCardForgetReaderA(SCARDCONTEXT, LPCSTR);
151 LONG WINAPI SCardForgetReaderW(SCARDCONTEXT, LPCWSTR);
152 LONG WINAPI SCardForgetReaderGroupA(SCARDCONTEXT, LPCSTR);
153 LONG WINAPI SCardForgetReaderGroupW(SCARDCONTEXT, LPCWSTR);
154 LONG WINAPI SCardFreeMemory(SCARDCONTEXT, LPCVOID);
155 LONG WINAPI SCardGetAttrib(SCARDHANDLE, DWORD, LPBYTE, LPDWORD);
156 LONG WINAPI SCardGetCardTypeProviderNameA(SCARDCONTEXT, LPCSTR, DWORD, LPSTR, LPDWORD);
157 LONG WINAPI SCardGetCardTypeProviderNameW(SCARDCONTEXT, LPCWSTR, DWORD, LPWSTR, LPDWORD);
158 LONG WINAPI SCardGetProviderIdA(SCARDCONTEXT, LPCSTR, LPGUID);
159 LONG WINAPI SCardGetProviderIdW(SCARDCONTEXT, LPCWSTR, LPGUID);
160 LONG WINAPI SCardGetStatusChangeA(SCARDCONTEXT, DWORD, LPSCARD_READERSTATEA, DWORD);
161 LONG WINAPI SCardGetStatusChangeW(SCARDCONTEXT, DWORD, LPSCARD_READERSTATEW, DWORD);
162 LONG WINAPI SCardIntroduceCardTypeA(SCARDCONTEXT, LPCSTR, LPCGUID, LPCGUID, DWORD, LPCBYTE, LPCBYTE, DWORD);
163 LONG WINAPI SCardIntroduceCardTypeW(SCARDCONTEXT, LPCWSTR, LPCGUID, LPCGUID, DWORD, LPCBYTE, LPCBYTE, DWORD);
164 LONG WINAPI SCardIntroduceReaderA(SCARDCONTEXT, LPCSTR, LPCSTR);
165 LONG WINAPI SCardIntroduceReaderW(SCARDCONTEXT, LPCWSTR, LPCWSTR);
166 LONG WINAPI SCardIntroduceReaderGroupA(SCARDCONTEXT, LPCSTR);
167 LONG WINAPI SCardIntroduceReaderGroupW(SCARDCONTEXT, LPCWSTR);
168 LONG WINAPI SCardIsValidContext(SCARDCONTEXT);
169 LONG WINAPI SCardListCardsA(SCARDCONTEXT, LPCBYTE, LPCGUID, DWORD, LPCSTR, LPDWORD);
170 LONG WINAPI SCardListCardsW(SCARDCONTEXT, LPCBYTE, LPCGUID, DWORD, LPCWSTR, LPDWORD);
171 LONG WINAPI SCardListInterfacesA(SCARDCONTEXT, LPCSTR, LPGUID, LPDWORD);
172 LONG WINAPI SCardListInterfacesW(SCARDCONTEXT, LPCWSTR, LPGUID, LPDWORD);
173 LONG WINAPI SCardListReaderGroupsA(SCARDCONTEXT, LPSTR, LPDWORD);
174 LONG WINAPI SCardListReaderGroupsW(SCARDCONTEXT, LPWSTR, LPDWORD);
175 LONG WINAPI SCardListReadersA(SCARDCONTEXT, LPCSTR, LPSTR, LPDWORD);
176 LONG WINAPI SCardListReadersW(SCARDCONTEXT, LPCWSTR, LPWSTR, LPDWORD);
177 LONG WINAPI SCardLocateCardsA(SCARDCONTEXT, LPCSTR, LPSCARD_READERSTATEA, DWORD);
178 LONG WINAPI SCardLocateCardsW(SCARDCONTEXT, LPCWSTR, LPSCARD_READERSTATEW, DWORD);
179 LONG WINAPI SCardLocateCardsByATRA(SCARDCONTEXT, LPSCARD_ATRMASK, DWORD, LPSCARD_READERSTATEA, DWORD);
180 LONG WINAPI SCardLocateCardsByATRW(SCARDCONTEXT, LPSCARD_ATRMASK, DWORD, LPSCARD_READERSTATEW, DWORD);
181 LONG WINAPI SCardReconnect(SCARDHANDLE, DWORD, DWORD, DWORD, LPDWORD);
182 LONG WINAPI SCardReleaseContext(SCARDCONTEXT);
183 VOID WINAPI SCardReleaseStartedEvent(HANDLE);
184 LONG WINAPI SCardRemoveReaderFromGroupA(SCARDCONTEXT, LPCSTR, LPCSTR);
185 LONG WINAPI SCardRemoveReaderFromGroupW(SCARDCONTEXT, LPCWSTR, LPCWSTR);
186 LONG WINAPI SCardSetAttrib(SCARDHANDLE, DWORD, LPCBYTE, DWORD);
187 LONG WINAPI SCardSetCardTypeProviderNameA(SCARDCONTEXT, LPCSTR, DWORD, LPCSTR);
188 LONG WINAPI SCardSetCardTypeProviderNameW(SCARDCONTEXT, LPCWSTR, DWORD, LPCWSTR);
189 LONG WINAPI SCardState(SCARDHANDLE, LPDWORD, LPDWORD, LPBYTE, LPDWORD);
190 LONG WINAPI SCardStatusA(SCARDHANDLE, LPSTR, LPDWORD, LPDWORD, LPDWORD, LPBYTE, LPDWORD);
191 LONG WINAPI SCardStatusW(SCARDHANDLE, LPWSTR, LPDWORD, LPDWORD, LPDWORD, LPBYTE, LPDWORD);
192 LONG WINAPI SCardTransmit(SCARDHANDLE, LPCSCARD_IO_REQUEST, LPCBYTE, DWORD, LPSCARD_IO_REQUEST, LPBYTE, LPDWORD);
193
194 #ifndef _DISABLE_TIDENTS
195
196 #ifdef UNICODE
197 typedef struct SCARD_READERSTATEW SCARD_READERSTATE, *PSCARD_READERSTATE, *LPSCARD_READERSTATE;
198 #define SCardAddReaderToGroup SCardAddReaderToGroupW
199 #define SCardConnect SCardConnectW
200 #define SCardForgetCardType SCardForgetCardTypeW
201 #define SCardForgetReader SCardForgetReaderW
202 #define SCardForgetReaderGroup SCardForgetReaderGroupW
203 #define SCardGetCardTypeProviderName SCardGetCardTypeProviderNameW
204 #define SCardGetProviderId SCardGetProviderIdW
205 #define SCardGetStatusChange SCardGetStatusChangeW
206 #define SCardIntroduceCardType SCardIntroduceCardTypeW
207 #define SCardIntroduceReader SCardIntroduceReaderW
208 #define SCardIntroduceReaderGroup SCardIntroduceReaderGroupW
209 #define SCardListCards SCardListCardsW
210 #define SCardListInterfaces SCardListInterfacesW
211 #define SCardListReaderGroups SCardListReaderGroupsW
212 #define SCardListReaders SCardListReadersW
213 #define SCardLocateCards SCardLocateCardsW
214 #define SCardLocateCardsByATR SCardLocateCardsByATRW
215 #define SCardRemoveReaderFromGroup SCardRemoveReaderFromGroupW
216 #define SCardSetCardTypeProviderName SCardSetCardTypeProviderNameW
217 #define SCardStatus SCardStatusW
218 #else /* !UNICODE */
219 typedef struct SCARD_READERSTATEA SCARD_READERSTATE, *PSCARD_READERSTATE, *LPSCARD_READERSTATE;
220 #define SCardAddReaderToGroup SCardAddReaderToGroupA
221 #define SCardConnect SCardConnectA
222 #define SCardForgetCardType SCardForgetCardTypeA
223 #define SCardForgetReader SCardForgetReaderA
224 #define SCardForgetReaderGroup SCardForgetReaderGroupA
225 #define SCardGetCardTypeProviderName SCardGetCardTypeProviderNameA
226 #define SCardGetProviderId SCardGetProviderIdA
227 #define SCardGetStatusChange SCardGetStatusChangeA
228 #define SCardIntroduceCardType SCardIntroduceCardTypeA
229 #define SCardIntroduceReader SCardIntroduceReaderA
230 #define SCardIntroduceReaderGroup SCardIntroduceReaderGroupA
231 #define SCardListCards SCardListCardsA
232 #define SCardListInterfaces SCardListInterfacesA
233 #define SCardListReaderGroups SCardListReaderGroupsA
234 #define SCardListReaders SCardListReadersA
235 #define SCardLocateCards SCardLocateCardsA
236 #define SCardLocateCardsByATR SCardLocateCardsByATRA
237 #define SCardRemoveReaderFromGroup SCardRemoveReaderFromGroupA
238 #define SCardSetCardTypeProviderName SCardSetCardTypeProviderNameA
239 #define SCardStatus SCardStatusA
240 #endif /* UNICODE */
241
242 #endif /* _DISABLE_TIDENTS */
243
244 extern const SCARD_IO_REQUEST g_rgSCardT0Pci;
245 extern const SCARD_IO_REQUEST g_rgSCardT1Pci;
246 extern const SCARD_IO_REQUEST g_rgSCardRawPci;
247
248 #ifdef __cplusplus
249 }
250 #endif
251 #endif /* __WINSCARD_H */
252
253 /* EOF */