pcsc-lite  1.8.11
pcsclite.h
Go to the documentation of this file.
1 /*
2  * MUSCLE SmartCard Development ( http://pcsclite.alioth.debian.org/pcsclite.html )
3  *
4  * Copyright (C) 1999-2004
5  * David Corcoran <corcoran@musclecard.com>
6  * Copyright (C) 2002-2011
7  * Ludovic Rousseau <ludovic.rousseau@free.fr>
8  * Copyright (C) 2005
9  * Martin Paljak <martin@paljak.pri.ee>
10  *
11 Redistribution and use in source and binary forms, with or without
12 modification, are permitted provided that the following conditions
13 are met:
14 
15 1. Redistributions of source code must retain the above copyright
16  notice, this list of conditions and the following disclaimer.
17 2. Redistributions in binary form must reproduce the above copyright
18  notice, this list of conditions and the following disclaimer in the
19  documentation and/or other materials provided with the distribution.
20 3. The name of the author may not be used to endorse or promote products
21  derived from this software without specific prior written permission.
22 
23 Changes to this license can be made only by the copyright author with
24 explicit written consent.
25 
26 THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
27 IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
28 OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
29 IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
30 INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
31 NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
32 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
33 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
34 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
35 THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36  *
37  * $Id: pcsclite.h.in 6851 2014-02-14 15:43:32Z rousseau $
38  */
39 
47 #ifndef __pcsclite_h__
48 #define __pcsclite_h__
49 
50 #include <wintypes.h>
51 
52 #ifdef __cplusplus
53 extern "C"
54 {
55 #endif
56 
57 typedef LONG SCARDCONTEXT;
58 typedef SCARDCONTEXT *PSCARDCONTEXT;
59 typedef SCARDCONTEXT *LPSCARDCONTEXT;
60 typedef LONG SCARDHANDLE;
61 typedef SCARDHANDLE *PSCARDHANDLE;
62 typedef SCARDHANDLE *LPSCARDHANDLE;
63 
64 #define MAX_ATR_SIZE 33
66 /* Set structure elements aligment on bytes
67  * http://gcc.gnu.org/onlinedocs/gcc/Structure_002dPacking-Pragmas.html */
68 #ifdef __APPLE__
69 #pragma pack(1)
70 #endif
71 
72 typedef struct
73 {
74  const char *szReader;
75  void *pvUserData;
76  DWORD dwCurrentState;
77  DWORD dwEventState;
78  DWORD cbAtr;
79  unsigned char rgbAtr[MAX_ATR_SIZE];
80 }
82 
84 typedef struct
85 {
86  unsigned long dwProtocol;
87  unsigned long cbPciLength;
88 }
90 
92 
94 
95 /* restore default structure elements alignment */
96 #ifdef __APPLE__
97 #pragma pack()
98 #endif
99 
100 #define SCARD_PCI_T0 (&g_rgSCardT0Pci)
101 #define SCARD_PCI_T1 (&g_rgSCardT1Pci)
102 #define SCARD_PCI_RAW (&g_rgSCardRawPci)
106 #define SCARD_S_SUCCESS ((LONG)0x00000000)
107 #define SCARD_F_INTERNAL_ERROR ((LONG)0x80100001)
108 #define SCARD_E_CANCELLED ((LONG)0x80100002)
109 #define SCARD_E_INVALID_HANDLE ((LONG)0x80100003)
110 #define SCARD_E_INVALID_PARAMETER ((LONG)0x80100004)
111 #define SCARD_E_INVALID_TARGET ((LONG)0x80100005)
112 #define SCARD_E_NO_MEMORY ((LONG)0x80100006)
113 #define SCARD_F_WAITED_TOO_LONG ((LONG)0x80100007)
114 #define SCARD_E_INSUFFICIENT_BUFFER ((LONG)0x80100008)
115 #define SCARD_E_UNKNOWN_READER ((LONG)0x80100009)
116 #define SCARD_E_TIMEOUT ((LONG)0x8010000A)
117 #define SCARD_E_SHARING_VIOLATION ((LONG)0x8010000B)
118 #define SCARD_E_NO_SMARTCARD ((LONG)0x8010000C)
119 #define SCARD_E_UNKNOWN_CARD ((LONG)0x8010000D)
120 #define SCARD_E_CANT_DISPOSE ((LONG)0x8010000E)
121 #define SCARD_E_PROTO_MISMATCH ((LONG)0x8010000F)
122 #define SCARD_E_NOT_READY ((LONG)0x80100010)
123 #define SCARD_E_INVALID_VALUE ((LONG)0x80100011)
124 #define SCARD_E_SYSTEM_CANCELLED ((LONG)0x80100012)
125 #define SCARD_F_COMM_ERROR ((LONG)0x80100013)
126 #define SCARD_F_UNKNOWN_ERROR ((LONG)0x80100014)
127 #define SCARD_E_INVALID_ATR ((LONG)0x80100015)
128 #define SCARD_E_NOT_TRANSACTED ((LONG)0x80100016)
129 #define SCARD_E_READER_UNAVAILABLE ((LONG)0x80100017)
130 #define SCARD_P_SHUTDOWN ((LONG)0x80100018)
131 #define SCARD_E_PCI_TOO_SMALL ((LONG)0x80100019)
132 #define SCARD_E_READER_UNSUPPORTED ((LONG)0x8010001A)
133 #define SCARD_E_DUPLICATE_READER ((LONG)0x8010001B)
134 #define SCARD_E_CARD_UNSUPPORTED ((LONG)0x8010001C)
135 #define SCARD_E_NO_SERVICE ((LONG)0x8010001D)
136 #define SCARD_E_SERVICE_STOPPED ((LONG)0x8010001E)
137 #define SCARD_E_UNEXPECTED ((LONG)0x8010001F)
138 #define SCARD_E_UNSUPPORTED_FEATURE ((LONG)0x8010001F)
139 #define SCARD_E_ICC_INSTALLATION ((LONG)0x80100020)
140 #define SCARD_E_ICC_CREATEORDER ((LONG)0x80100021)
141 /* #define SCARD_E_UNSUPPORTED_FEATURE ((LONG)0x80100022) / **< This smart card does not support the requested feature. */
142 #define SCARD_E_DIR_NOT_FOUND ((LONG)0x80100023)
143 #define SCARD_E_FILE_NOT_FOUND ((LONG)0x80100024)
144 #define SCARD_E_NO_DIR ((LONG)0x80100025)
145 #define SCARD_E_NO_FILE ((LONG)0x80100026)
146 #define SCARD_E_NO_ACCESS ((LONG)0x80100027)
147 #define SCARD_E_WRITE_TOO_MANY ((LONG)0x80100028)
148 #define SCARD_E_BAD_SEEK ((LONG)0x80100029)
149 #define SCARD_E_INVALID_CHV ((LONG)0x8010002A)
150 #define SCARD_E_UNKNOWN_RES_MNG ((LONG)0x8010002B)
151 #define SCARD_E_NO_SUCH_CERTIFICATE ((LONG)0x8010002C)
152 #define SCARD_E_CERTIFICATE_UNAVAILABLE ((LONG)0x8010002D)
153 #define SCARD_E_NO_READERS_AVAILABLE ((LONG)0x8010002E)
154 #define SCARD_E_COMM_DATA_LOST ((LONG)0x8010002F)
155 #define SCARD_E_NO_KEY_CONTAINER ((LONG)0x80100030)
156 #define SCARD_E_SERVER_TOO_BUSY ((LONG)0x80100031)
158 #define SCARD_W_UNSUPPORTED_CARD ((LONG)0x80100065)
159 #define SCARD_W_UNRESPONSIVE_CARD ((LONG)0x80100066)
160 #define SCARD_W_UNPOWERED_CARD ((LONG)0x80100067)
161 #define SCARD_W_RESET_CARD ((LONG)0x80100068)
162 #define SCARD_W_REMOVED_CARD ((LONG)0x80100069)
164 #define SCARD_W_SECURITY_VIOLATION ((LONG)0x8010006A)
165 #define SCARD_W_WRONG_CHV ((LONG)0x8010006B)
166 #define SCARD_W_CHV_BLOCKED ((LONG)0x8010006C)
167 #define SCARD_W_EOF ((LONG)0x8010006D)
168 #define SCARD_W_CANCELLED_BY_USER ((LONG)0x8010006E)
169 #define SCARD_W_CARD_NOT_AUTHENTICATED ((LONG)0x8010006F)
171 #define SCARD_AUTOALLOCATE (DWORD)(-1)
172 #define SCARD_SCOPE_USER 0x0000
173 #define SCARD_SCOPE_TERMINAL 0x0001
174 #define SCARD_SCOPE_SYSTEM 0x0002
176 #define SCARD_PROTOCOL_UNDEFINED 0x0000
177 #define SCARD_PROTOCOL_UNSET SCARD_PROTOCOL_UNDEFINED /* backward compat */
178 #define SCARD_PROTOCOL_T0 0x0001
179 #define SCARD_PROTOCOL_T1 0x0002
180 #define SCARD_PROTOCOL_RAW 0x0004
181 #define SCARD_PROTOCOL_T15 0x0008
183 #define SCARD_PROTOCOL_ANY (SCARD_PROTOCOL_T0|SCARD_PROTOCOL_T1)
185 #define SCARD_SHARE_EXCLUSIVE 0x0001
186 #define SCARD_SHARE_SHARED 0x0002
187 #define SCARD_SHARE_DIRECT 0x0003
189 #define SCARD_LEAVE_CARD 0x0000
190 #define SCARD_RESET_CARD 0x0001
191 #define SCARD_UNPOWER_CARD 0x0002
192 #define SCARD_EJECT_CARD 0x0003
194 #define SCARD_UNKNOWN 0x0001
195 #define SCARD_ABSENT 0x0002
196 #define SCARD_PRESENT 0x0004
197 #define SCARD_SWALLOWED 0x0008
198 #define SCARD_POWERED 0x0010
199 #define SCARD_NEGOTIABLE 0x0020
200 #define SCARD_SPECIFIC 0x0040
202 #define SCARD_STATE_UNAWARE 0x0000
203 #define SCARD_STATE_IGNORE 0x0001
204 #define SCARD_STATE_CHANGED 0x0002
205 #define SCARD_STATE_UNKNOWN 0x0004
206 #define SCARD_STATE_UNAVAILABLE 0x0008
207 #define SCARD_STATE_EMPTY 0x0010
208 #define SCARD_STATE_PRESENT 0x0020
209 #define SCARD_STATE_ATRMATCH 0x0040
210 #define SCARD_STATE_EXCLUSIVE 0x0080
211 #define SCARD_STATE_INUSE 0x0100
212 #define SCARD_STATE_MUTE 0x0200
213 #define SCARD_STATE_UNPOWERED 0x0400
215 #ifndef INFINITE
216 #define INFINITE 0xFFFFFFFF
217 #endif
218 
219 #define PCSCLITE_VERSION_NUMBER "1.8.11"
221 #define PCSCLITE_MAX_READERS_CONTEXTS 16
222 
223 #define MAX_READERNAME 128
224 
225 #ifndef SCARD_ATR_LENGTH
226 #define SCARD_ATR_LENGTH MAX_ATR_SIZE
227 #endif
228 
229 /*
230  * The message and buffer sizes must be multiples of 16.
231  * The max message size must be at least large enough
232  * to accomodate the transmit_struct
233  */
234 #define MAX_BUFFER_SIZE 264
235 #define MAX_BUFFER_SIZE_EXTENDED (4 + 3 + (1<<16) + 3 + 2)
237 /*
238  * Gets a stringified error response
239  */
240 char *pcsc_stringify_error(const LONG);
241 
242 #ifdef __cplusplus
243 }
244 #endif
245 
246 #endif
char * pcsc_stringify_error(const LONG)
Returns a human readable text for the given PC/SC error code.
Definition: error.c:82
unsigned long cbPciLength
Protocol Control Inf Length.
Definition: pcsclite.h:87
const SCARD_IO_REQUEST g_rgSCardRawPci
Protocol Control Information for raw access.
Definition: libpcscspy.c:726
LONG SCARDCONTEXT
hContext returned by SCardEstablishContext()
Definition: pcsclite.h:57
unsigned long dwProtocol
Protocol identifier.
Definition: pcsclite.h:86
LONG SCARDHANDLE
hCard returned by SCardConnect()
Definition: pcsclite.h:60
This keeps a list of Windows(R) types.
Protocol Control Information (PCI)
Definition: pcsclite.h:84
#define MAX_ATR_SIZE
Maximum ATR size.
Definition: pcsclite.h:64
const SCARD_IO_REQUEST g_rgSCardT1Pci
Protocol Control Information for T=1.
Definition: libpcscspy.c:725
const SCARD_IO_REQUEST g_rgSCardT0Pci
Protocol Control Information for T=0.
Definition: libpcscspy.c:724