AusweisApp2
PcscUtils.h
gehe zur Dokumentation dieser Datei
1 
8 #pragma once
9 
10 #include <QMetaEnum>
11 #include <QString>
12 #include <QtGlobal>
13 
14 #include <winscard.h>
15 
16 #ifndef Q_OS_WIN
17  #include <wintypes.h>
18 #endif
19 
20 /*
21  * Because the three PC/SC implementations on Windows,
22  * MacOS and Linux have slightly different types, we typedef
23  * an abstraction layer for those data types.
24  */
25 #ifdef Q_OS_WIN
26 using PCSC_CHAR = TCHAR;
27 using PCSC_CHAR_PTR = TCHAR*;
28 using PCSC_CUCHAR_PTR = LPCBYTE;
29 using PCSC_INT = DWORD;
30 using PCSC_RETURNCODE = LONG;
31 using PCSC_UCHAR_PTR = LPBYTE;
32 #elif defined Q_OS_MACOS
33 using PCSC_CHAR = char;
34 using PCSC_CHAR_PTR = char*;
35 using PCSC_CUCHAR_PTR = const uchar*;
36 using PCSC_INT = uint32_t;
37 using PCSC_RETURNCODE = int32_t;
38 using PCSC_UCHAR_PTR = uchar*;
39 #elif defined Q_OS_UNIX
40 using PCSC_CHAR = char;
41 using PCSC_CHAR_PTR = char*;
42 using PCSC_CUCHAR_PTR = const uchar*;
43 using PCSC_INT = DWORD;
44 using PCSC_RETURNCODE = LONG;
45 using PCSC_UCHAR_PTR = uchar*;
46 #endif
47 
48 #ifdef Q_OS_MACOS
49  #define returnCode(x) static_cast<PCSC_RETURNCODE>(x)
50 #else
51  #define returnCode(x) x
52 #endif
53 
54 
55 namespace governikus
56 {
57 
58 class PcscUtils
59 {
60  Q_GADGET
61 
62  private:
63  PcscUtils() = delete;
64  ~PcscUtils() = delete;
65 
66  public:
70  enum PcscReturnCode : PCSC_RETURNCODE
71  {
72  Scard_S_Success = returnCode(SCARD_S_SUCCESS),
73  Scard_F_Internal_Error = returnCode(SCARD_F_INTERNAL_ERROR),
74  Scard_E_Cancelled = returnCode(SCARD_E_CANCELLED),
75  Scard_E_Invalid_Handle = returnCode(SCARD_E_INVALID_HANDLE),
76  Scard_E_Invalid_Parameter = returnCode(SCARD_E_INVALID_PARAMETER),
77  Scard_E_Invalid_Target = returnCode(SCARD_E_INVALID_TARGET),
78  Scard_E_No_Memory = returnCode(SCARD_E_NO_MEMORY),
79  Scard_F_Waited_Too_Long = returnCode(SCARD_F_WAITED_TOO_LONG),
80  Scard_E_Insufficient_Buffer = returnCode(SCARD_E_INSUFFICIENT_BUFFER),
81  Scard_E_Unknown_Reader = returnCode(SCARD_E_UNKNOWN_READER),
82  Scard_E_Timeout = returnCode(SCARD_E_TIMEOUT),
83  Scard_E_Sharing_Violation = returnCode(SCARD_E_SHARING_VIOLATION),
84  Scard_E_No_Smartcard = returnCode(SCARD_E_NO_SMARTCARD),
85  Scard_E_Unknown_Card = returnCode(SCARD_E_UNKNOWN_CARD),
86  Scard_E_Cant_Dispose = returnCode(SCARD_E_CANT_DISPOSE),
87  Scard_E_Proto_Mismatch = returnCode(SCARD_E_PROTO_MISMATCH),
88  Scard_E_Not_Ready = returnCode(SCARD_E_NOT_READY),
89  Scard_E_Invalid_Value = returnCode(SCARD_E_INVALID_VALUE),
90  Scard_E_System_Cancelled = returnCode(SCARD_E_SYSTEM_CANCELLED),
91  Scard_F_Comm_Error = returnCode(SCARD_F_COMM_ERROR),
92  Scard_F_Unknown_Error = returnCode(SCARD_F_UNKNOWN_ERROR),
93  Scard_E_Invalid_Atr = returnCode(SCARD_E_INVALID_ATR),
94  Scard_E_Not_Transacted = returnCode(SCARD_E_NOT_TRANSACTED),
95  Scard_E_Reader_Unavailable = returnCode(SCARD_E_READER_UNAVAILABLE),
96  Scard_P_Shutdown = returnCode(SCARD_P_SHUTDOWN),
97  Scard_E_Pci_Too_Small = returnCode(SCARD_E_PCI_TOO_SMALL),
98  Scard_E_Reader_Unsupported = returnCode(SCARD_E_READER_UNSUPPORTED),
99  Scard_E_Duplicate_Reader = returnCode(SCARD_E_DUPLICATE_READER),
100  Scard_E_Card_Unsupported = returnCode(SCARD_E_CARD_UNSUPPORTED),
101  Scard_E_No_Service = returnCode(SCARD_E_NO_SERVICE),
102  Scard_E_Service_Stopped = returnCode(SCARD_E_SERVICE_STOPPED),
103  Scard_E_Unsupported_Feature = returnCode(SCARD_E_UNSUPPORTED_FEATURE),
104  Scard_E_Unexpected = returnCode(SCARD_E_UNEXPECTED),
105  Scard_E_Icc_Installation = returnCode(SCARD_E_ICC_INSTALLATION),
106  Scard_E_Icc_Createorder = returnCode(SCARD_E_ICC_CREATEORDER),
108  Scard_E_Dir_Not_Found = returnCode(SCARD_E_DIR_NOT_FOUND),
109  Scard_E_File_Not_Found = returnCode(SCARD_E_FILE_NOT_FOUND),
110  Scard_E_No_Dir = returnCode(SCARD_E_NO_DIR),
111  Scard_E_No_File = returnCode(SCARD_E_NO_FILE),
112  Scard_E_No_Access = returnCode(SCARD_E_NO_ACCESS),
113  Scard_E_Write_Too_Many = returnCode(SCARD_E_WRITE_TOO_MANY),
114  Scard_E_Bad_Seek = returnCode(SCARD_E_BAD_SEEK),
115  Scard_E_Invalid_Chv = returnCode(SCARD_E_INVALID_CHV),
116  Scard_E_Unknown_Res_Mng = returnCode(SCARD_E_UNKNOWN_RES_MNG),
117  Scard_E_No_Such_Certificate = returnCode(SCARD_E_NO_SUCH_CERTIFICATE),
118  Scard_E_Certificate_Unavailable = returnCode(SCARD_E_CERTIFICATE_UNAVAILABLE),
119  Scard_E_No_Readers_Available = returnCode(SCARD_E_NO_READERS_AVAILABLE),
120  Scard_E_Comm_Data_Lost = returnCode(SCARD_E_COMM_DATA_LOST),
121  Scard_E_No_Key_Container = returnCode(SCARD_E_NO_KEY_CONTAINER),
122  Scard_E_Server_Too_Busy = returnCode(SCARD_E_SERVER_TOO_BUSY),
124  Scard_W_Unsupported_Card = returnCode(SCARD_W_UNSUPPORTED_CARD),
125  Scard_W_Unresponsive_Card = returnCode(SCARD_W_UNRESPONSIVE_CARD),
126  Scard_W_Unpowered_Card = returnCode(SCARD_W_UNPOWERED_CARD),
127  Scard_W_Reset_Card = returnCode(SCARD_W_RESET_CARD),
128  Scard_W_Removed_Card = returnCode(SCARD_W_REMOVED_CARD),
130  Scard_W_Security_Violation = returnCode(SCARD_W_SECURITY_VIOLATION),
131  Scard_W_Wrong_Chv = returnCode(SCARD_W_WRONG_CHV),
132  Scard_W_Chv_Blocked = returnCode(SCARD_W_CHV_BLOCKED),
133  Scard_W_Eof = returnCode(SCARD_W_EOF),
134  Scard_W_Cancelled_By_User = returnCode(SCARD_W_CANCELLED_BY_USER),
135  Scard_W_Card_Not_Authenticated = returnCode(SCARD_W_CARD_NOT_AUTHENTICATED)
136  };
137  Q_ENUM(PcscReturnCode)
138 
139  static QString toString(PCSC_RETURNCODE pCode);
140 };
141 
142 
146 #undef returnCode
147 
148 #ifdef QT_NO_DEBUG
149  #undef SCARD_S_SUCCESS
150  #undef SCARD_F_INTERNAL_ERROR
151  #undef SCARD_E_CANCELLED
152  #undef SCARD_E_INVALID_HANDLE
153  #undef SCARD_E_INVALID_PARAMETER
154  #undef SCARD_E_INVALID_TARGET
155  #undef SCARD_E_NO_MEMORY
156  #undef SCARD_F_WAITED_TOO_LONG
157  #undef SCARD_E_INSUFFICIENT_BUFFER
158  #undef SCARD_E_UNKNOWN_READER
159  #undef SCARD_E_TIMEOUT
160  #undef SCARD_E_SHARING_VIOLATION
161  #undef SCARD_E_NO_SMARTCARD
162  #undef SCARD_E_UNKNOWN_CARD
163  #undef SCARD_E_CANT_DISPOSE
164  #undef SCARD_E_PROTO_MISMATCH
165  #undef SCARD_E_NOT_READY
166  #undef SCARD_E_INVALID_VALUE
167  #undef SCARD_E_SYSTEM_CANCELLED
168  #undef SCARD_F_COMM_ERROR
169  #undef SCARD_F_UNKNOWN_ERROR
170  #undef SCARD_E_INVALID_ATR
171  #undef SCARD_E_NOT_TRANSACTED
172  #undef SCARD_E_READER_UNAVAILABLE
173  #undef SCARD_P_SHUTDOWN
174  #undef SCARD_E_PCI_TOO_SMALL
175  #undef SCARD_E_READER_UNSUPPORTED
176  #undef SCARD_E_DUPLICATE_READER
177  #undef SCARD_E_CARD_UNSUPPORTED
178  #undef SCARD_E_NO_SERVICE
179  #undef SCARD_E_SERVICE_STOPPED
180  #undef SCARD_E_UNEXPECTED
181  #undef SCARD_E_UNSUPPORTED_FEATURE
182  #undef SCARD_E_ICC_INSTALLATION
183  #undef SCARD_E_ICC_CREATEORDER
184 
185  #undef SCARD_E_DIR_NOT_FOUND
186  #undef SCARD_E_FILE_NOT_FOUND
187  #undef SCARD_E_NO_DIR
188  #undef SCARD_E_NO_FILE
189  #undef SCARD_E_NO_ACCESS
190  #undef SCARD_E_WRITE_TOO_MANY
191  #undef SCARD_E_BAD_SEEK
192  #undef SCARD_E_INVALID_CHV
193  #undef SCARD_E_UNKNOWN_RES_MNG
194  #undef SCARD_E_NO_SUCH_CERTIFICATE
195  #undef SCARD_E_CERTIFICATE_UNAVAILABLE
196  #undef SCARD_E_NO_READERS_AVAILABLE
197  #undef SCARD_E_COMM_DATA_LOST
198  #undef SCARD_E_NO_KEY_CONTAINER
199  #undef SCARD_E_SERVER_TOO_BUSY
200 
201  #undef SCARD_W_UNSUPPORTED_CARD
202  #undef SCARD_W_UNRESPONSIVE_CARD
203  #undef SCARD_W_UNPOWERED_CARD
204  #undef SCARD_W_RESET_CARD
205  #undef SCARD_W_REMOVED_CARD
206 
207  #undef SCARD_W_SECURITY_VIOLATION
208  #undef SCARD_W_WRONG_CHV
209  #undef SCARD_W_CHV_BLOCKED
210  #undef SCARD_W_EOF
211  #undef SCARD_W_CANCELLED_BY_USER
212  #undef SCARD_W_CARD_NOT_AUTHENTICATED
213 #endif
214 
215 } // namespace governikus
#define returnCode(x)
toString method for PCSC_RETURNCODE and platform dependent typedefs for PCSC types.
Definition: PcscUtils.h:51
Definition: PcscUtils.h:59
PcscReturnCode
Definition: PcscUtils.h:71
@ Scard_F_Comm_Error
Definition: PcscUtils.h:91
@ Scard_E_Cancelled
Definition: PcscUtils.h:74
@ Scard_W_Eof
Definition: PcscUtils.h:133
@ Scard_E_Invalid_Chv
Definition: PcscUtils.h:115
@ Scard_E_Icc_Createorder
Definition: PcscUtils.h:106
@ Scard_F_Waited_Too_Long
Definition: PcscUtils.h:79
@ Scard_E_Comm_Data_Lost
Definition: PcscUtils.h:120
@ Scard_E_No_Memory
Definition: PcscUtils.h:78
@ Scard_E_Write_Too_Many
Definition: PcscUtils.h:113
@ Scard_E_No_Smartcard
Definition: PcscUtils.h:84
@ Scard_E_No_Readers_Available
Definition: PcscUtils.h:119
@ Scard_E_No_Such_Certificate
Definition: PcscUtils.h:117
@ Scard_E_Invalid_Atr
Definition: PcscUtils.h:93
@ Scard_E_No_Key_Container
Definition: PcscUtils.h:121
@ Scard_E_Certificate_Unavailable
Definition: PcscUtils.h:118
@ Scard_E_Unexpected
Definition: PcscUtils.h:104
@ Scard_E_Service_Stopped
Definition: PcscUtils.h:102
@ Scard_E_Not_Transacted
Definition: PcscUtils.h:94
@ Scard_E_Invalid_Handle
Definition: PcscUtils.h:75
@ Scard_E_Reader_Unavailable
Definition: PcscUtils.h:95
@ Scard_E_Duplicate_Reader
Definition: PcscUtils.h:99
@ Scard_E_Proto_Mismatch
Definition: PcscUtils.h:87
@ Scard_W_Removed_Card
Definition: PcscUtils.h:128
@ Scard_E_Reader_Unsupported
Definition: PcscUtils.h:98
@ Scard_E_Pci_Too_Small
Definition: PcscUtils.h:97
@ Scard_F_Internal_Error
Definition: PcscUtils.h:73
@ Scard_E_No_File
Definition: PcscUtils.h:111
@ Scard_P_Shutdown
Definition: PcscUtils.h:96
@ Scard_W_Unsupported_Card
Definition: PcscUtils.h:124
@ Scard_E_Invalid_Value
Definition: PcscUtils.h:89
@ Scard_E_No_Dir
Definition: PcscUtils.h:110
@ Scard_E_Unsupported_Feature
Definition: PcscUtils.h:103
@ Scard_E_Server_Too_Busy
Definition: PcscUtils.h:122
@ Scard_E_Insufficient_Buffer
Definition: PcscUtils.h:80
@ Scard_E_Cant_Dispose
Definition: PcscUtils.h:86
@ Scard_E_Unknown_Res_Mng
Definition: PcscUtils.h:116
@ Scard_E_Dir_Not_Found
Definition: PcscUtils.h:108
@ Scard_E_Unknown_Reader
Definition: PcscUtils.h:81
@ Scard_E_Bad_Seek
Definition: PcscUtils.h:114
@ Scard_E_Icc_Installation
Definition: PcscUtils.h:105
@ Scard_E_Unknown_Card
Definition: PcscUtils.h:85
@ Scard_E_No_Service
Definition: PcscUtils.h:101
@ Scard_W_Unpowered_Card
Definition: PcscUtils.h:126
@ Scard_E_Sharing_Violation
Definition: PcscUtils.h:83
@ Scard_W_Reset_Card
Definition: PcscUtils.h:127
@ Scard_E_Timeout
Definition: PcscUtils.h:82
@ Scard_W_Security_Violation
Definition: PcscUtils.h:130
@ Scard_E_Not_Ready
Definition: PcscUtils.h:88
@ Scard_W_Wrong_Chv
Definition: PcscUtils.h:131
@ Scard_F_Unknown_Error
Definition: PcscUtils.h:92
@ Scard_E_No_Access
Definition: PcscUtils.h:112
@ Scard_W_Card_Not_Authenticated
Definition: PcscUtils.h:135
@ Scard_S_Success
Definition: PcscUtils.h:72
@ Scard_W_Unresponsive_Card
Definition: PcscUtils.h:125
@ Scard_E_File_Not_Found
Definition: PcscUtils.h:109
@ Scard_E_Card_Unsupported
Definition: PcscUtils.h:100
@ Scard_E_System_Cancelled
Definition: PcscUtils.h:90
@ Scard_E_Invalid_Parameter
Definition: PcscUtils.h:76
@ Scard_W_Cancelled_By_User
Definition: PcscUtils.h:134
@ Scard_W_Chv_Blocked
Definition: PcscUtils.h:132
@ Scard_E_Invalid_Target
Definition: PcscUtils.h:77
static QString toString(PCSC_RETURNCODE pCode)
Definition: PcscUtils.cpp:10
A simple template renderer.
Definition: ActivationContext.h:15
char
Definition: SmartCardDefinitions.h:17