pcsc-lite
1.7.4
|
00001 /* 00002 * MUSCLE SmartCard Development ( http://www.linuxnet.com ) 00003 * 00004 * Copyright (C) 1999-2004 00005 * David Corcoran <corcoran@linuxnet.com> 00006 * Copyright (C) 2002-2011 00007 * Ludovic Rousseau <ludovic.rousseau@free.fr> 00008 * Copyright (C) 2005 00009 * Martin Paljak <martin@paljak.pri.ee> 00010 * 00011 * $Id: pcsclite.h.in 5736 2011-05-12 08:43:33Z rousseau $ 00012 */ 00013 00021 #ifndef __pcsclite_h__ 00022 #define __pcsclite_h__ 00023 00024 #include <wintypes.h> 00025 00026 #ifdef __cplusplus 00027 extern "C" 00028 { 00029 #endif 00030 00031 typedef LONG SCARDCONTEXT; 00032 typedef SCARDCONTEXT *PSCARDCONTEXT; 00033 typedef SCARDCONTEXT *LPSCARDCONTEXT; 00034 typedef LONG SCARDHANDLE; 00035 typedef SCARDHANDLE *PSCARDHANDLE; 00036 typedef SCARDHANDLE *LPSCARDHANDLE; 00037 00038 #define MAX_ATR_SIZE 33 00040 /* Set structure elements aligment on bytes 00041 * http://gcc.gnu.org/onlinedocs/gcc/Structure_002dPacking-Pragmas.html */ 00042 #ifdef __APPLE__ 00043 #pragma pack(1) 00044 #endif 00045 00046 typedef struct 00047 { 00048 const char *szReader; 00049 void *pvUserData; 00050 DWORD dwCurrentState; 00051 DWORD dwEventState; 00052 DWORD cbAtr; 00053 unsigned char rgbAtr[MAX_ATR_SIZE]; 00054 } 00055 SCARD_READERSTATE, *LPSCARD_READERSTATE; 00056 00058 typedef struct 00059 { 00060 unsigned long dwProtocol; 00061 unsigned long cbPciLength; 00062 } 00063 SCARD_IO_REQUEST, *PSCARD_IO_REQUEST, *LPSCARD_IO_REQUEST; 00064 00065 typedef const SCARD_IO_REQUEST *LPCSCARD_IO_REQUEST; 00066 00067 extern const SCARD_IO_REQUEST g_rgSCardT0Pci, g_rgSCardT1Pci, g_rgSCardRawPci; 00068 00069 /* restore default structure elements alignment */ 00070 #ifdef __APPLE__ 00071 #pragma pack() 00072 #endif 00073 00074 #define SCARD_PCI_T0 (&g_rgSCardT0Pci) 00075 #define SCARD_PCI_T1 (&g_rgSCardT1Pci) 00076 #define SCARD_PCI_RAW (&g_rgSCardRawPci) 00080 #define SCARD_S_SUCCESS ((LONG)0x00000000) 00081 #define SCARD_F_INTERNAL_ERROR ((LONG)0x80100001) 00082 #define SCARD_E_CANCELLED ((LONG)0x80100002) 00083 #define SCARD_E_INVALID_HANDLE ((LONG)0x80100003) 00084 #define SCARD_E_INVALID_PARAMETER ((LONG)0x80100004) 00085 #define SCARD_E_INVALID_TARGET ((LONG)0x80100005) 00086 #define SCARD_E_NO_MEMORY ((LONG)0x80100006) 00087 #define SCARD_F_WAITED_TOO_LONG ((LONG)0x80100007) 00088 #define SCARD_E_INSUFFICIENT_BUFFER ((LONG)0x80100008) 00089 #define SCARD_E_UNKNOWN_READER ((LONG)0x80100009) 00090 #define SCARD_E_TIMEOUT ((LONG)0x8010000A) 00091 #define SCARD_E_SHARING_VIOLATION ((LONG)0x8010000B) 00092 #define SCARD_E_NO_SMARTCARD ((LONG)0x8010000C) 00093 #define SCARD_E_UNKNOWN_CARD ((LONG)0x8010000D) 00094 #define SCARD_E_CANT_DISPOSE ((LONG)0x8010000E) 00095 #define SCARD_E_PROTO_MISMATCH ((LONG)0x8010000F) 00096 #define SCARD_E_NOT_READY ((LONG)0x80100010) 00097 #define SCARD_E_INVALID_VALUE ((LONG)0x80100011) 00098 #define SCARD_E_SYSTEM_CANCELLED ((LONG)0x80100012) 00099 #define SCARD_F_COMM_ERROR ((LONG)0x80100013) 00100 #define SCARD_F_UNKNOWN_ERROR ((LONG)0x80100014) 00101 #define SCARD_E_INVALID_ATR ((LONG)0x80100015) 00102 #define SCARD_E_NOT_TRANSACTED ((LONG)0x80100016) 00103 #define SCARD_E_READER_UNAVAILABLE ((LONG)0x80100017) 00104 #define SCARD_P_SHUTDOWN ((LONG)0x80100018) 00105 #define SCARD_E_PCI_TOO_SMALL ((LONG)0x80100019) 00106 #define SCARD_E_READER_UNSUPPORTED ((LONG)0x8010001A) 00107 #define SCARD_E_DUPLICATE_READER ((LONG)0x8010001B) 00108 #define SCARD_E_CARD_UNSUPPORTED ((LONG)0x8010001C) 00109 #define SCARD_E_NO_SERVICE ((LONG)0x8010001D) 00110 #define SCARD_E_SERVICE_STOPPED ((LONG)0x8010001E) 00111 #define SCARD_E_UNEXPECTED ((LONG)0x8010001F) 00112 #define SCARD_E_UNSUPPORTED_FEATURE ((LONG)0x8010001F) 00113 #define SCARD_E_ICC_INSTALLATION ((LONG)0x80100020) 00114 #define SCARD_E_ICC_CREATEORDER ((LONG)0x80100021) 00115 /* #define SCARD_E_UNSUPPORTED_FEATURE ((LONG)0x80100022) / **< This smart card does not support the requested feature. */ 00116 #define SCARD_E_DIR_NOT_FOUND ((LONG)0x80100023) 00117 #define SCARD_E_FILE_NOT_FOUND ((LONG)0x80100024) 00118 #define SCARD_E_NO_DIR ((LONG)0x80100025) 00119 #define SCARD_E_NO_FILE ((LONG)0x80100026) 00120 #define SCARD_E_NO_ACCESS ((LONG)0x80100027) 00121 #define SCARD_E_WRITE_TOO_MANY ((LONG)0x80100028) 00122 #define SCARD_E_BAD_SEEK ((LONG)0x80100029) 00123 #define SCARD_E_INVALID_CHV ((LONG)0x8010002A) 00124 #define SCARD_E_UNKNOWN_RES_MNG ((LONG)0x8010002B) 00125 #define SCARD_E_NO_SUCH_CERTIFICATE ((LONG)0x8010002C) 00126 #define SCARD_E_CERTIFICATE_UNAVAILABLE ((LONG)0x8010002D) 00127 #define SCARD_E_NO_READERS_AVAILABLE ((LONG)0x8010002E) 00128 #define SCARD_E_COMM_DATA_LOST ((LONG)0x8010002F) 00129 #define SCARD_E_NO_KEY_CONTAINER ((LONG)0x80100030) 00130 #define SCARD_E_SERVER_TOO_BUSY ((LONG)0x80100031) 00132 #define SCARD_W_UNSUPPORTED_CARD ((LONG)0x80100065) 00133 #define SCARD_W_UNRESPONSIVE_CARD ((LONG)0x80100066) 00134 #define SCARD_W_UNPOWERED_CARD ((LONG)0x80100067) 00135 #define SCARD_W_RESET_CARD ((LONG)0x80100068) 00136 #define SCARD_W_REMOVED_CARD ((LONG)0x80100069) 00138 #define SCARD_W_SECURITY_VIOLATION ((LONG)0x8010006A) 00139 #define SCARD_W_WRONG_CHV ((LONG)0x8010006B) 00140 #define SCARD_W_CHV_BLOCKED ((LONG)0x8010006C) 00141 #define SCARD_W_EOF ((LONG)0x8010006D) 00142 #define SCARD_W_CANCELLED_BY_USER ((LONG)0x8010006E) 00143 #define SCARD_W_CARD_NOT_AUTHENTICATED ((LONG)0x8010006F) 00145 #define SCARD_AUTOALLOCATE (DWORD)(-1) 00146 #define SCARD_SCOPE_USER 0x0000 00147 #define SCARD_SCOPE_TERMINAL 0x0001 00148 #define SCARD_SCOPE_SYSTEM 0x0002 00150 #define SCARD_PROTOCOL_UNDEFINED 0x0000 00151 #define SCARD_PROTOCOL_UNSET SCARD_PROTOCOL_UNDEFINED /* backward compat */ 00152 #define SCARD_PROTOCOL_T0 0x0001 00153 #define SCARD_PROTOCOL_T1 0x0002 00154 #define SCARD_PROTOCOL_RAW 0x0004 00155 #define SCARD_PROTOCOL_T15 0x0008 00157 #define SCARD_PROTOCOL_ANY (SCARD_PROTOCOL_T0|SCARD_PROTOCOL_T1) 00159 #define SCARD_SHARE_EXCLUSIVE 0x0001 00160 #define SCARD_SHARE_SHARED 0x0002 00161 #define SCARD_SHARE_DIRECT 0x0003 00163 #define SCARD_LEAVE_CARD 0x0000 00164 #define SCARD_RESET_CARD 0x0001 00165 #define SCARD_UNPOWER_CARD 0x0002 00166 #define SCARD_EJECT_CARD 0x0003 00168 #define SCARD_UNKNOWN 0x0001 00169 #define SCARD_ABSENT 0x0002 00170 #define SCARD_PRESENT 0x0004 00171 #define SCARD_SWALLOWED 0x0008 00172 #define SCARD_POWERED 0x0010 00173 #define SCARD_NEGOTIABLE 0x0020 00174 #define SCARD_SPECIFIC 0x0040 00176 #define SCARD_STATE_UNAWARE 0x0000 00177 #define SCARD_STATE_IGNORE 0x0001 00178 #define SCARD_STATE_CHANGED 0x0002 00179 #define SCARD_STATE_UNKNOWN 0x0004 00180 #define SCARD_STATE_UNAVAILABLE 0x0008 00181 #define SCARD_STATE_EMPTY 0x0010 00182 #define SCARD_STATE_PRESENT 0x0020 00183 #define SCARD_STATE_ATRMATCH 0x0040 00184 #define SCARD_STATE_EXCLUSIVE 0x0080 00185 #define SCARD_STATE_INUSE 0x0100 00186 #define SCARD_STATE_MUTE 0x0200 00187 #define SCARD_STATE_UNPOWERED 0x0400 00189 #ifndef INFINITE 00190 #define INFINITE 0xFFFFFFFF 00191 #endif 00192 00193 #define PCSCLITE_VERSION_NUMBER "1.7.4" 00195 #define PCSCLITE_MAX_READERS_CONTEXTS 16 00196 00197 #define MAX_READERNAME 100 00198 00199 #ifndef SCARD_ATR_LENGTH 00200 #define SCARD_ATR_LENGTH MAX_ATR_SIZE 00201 #endif 00202 00203 /* 00204 * The message and buffer sizes must be multiples of 16. 00205 * The max message size must be at least large enough 00206 * to accomodate the transmit_struct 00207 */ 00208 #define MAX_BUFFER_SIZE 264 00209 #define MAX_BUFFER_SIZE_EXTENDED (4 + 3 + (1<<16) + 3) 00211 /* 00212 * Gets a stringified error response 00213 */ 00214 char *pcsc_stringify_error(const LONG); 00215 00216 #ifdef __cplusplus 00217 } 00218 #endif 00219 00220 #endif