pcsc-lite 2.5.0
winscard_msg.h
Go to the documentation of this file.
1/*
2 * MUSCLE SmartCard Development ( https://pcsclite.apdu.fr/ )
3 *
4 * Copyright (C) 2001-2004
5 * David Corcoran <corcoran@musclecard.com>
6 * Copyright (C) 2003-2004
7 * Damien Sauveron <damien.sauveron@labri.fr>
8 * Copyright (C) 2002-2025
9 * Ludovic Rousseau <ludovic.rousseau@free.fr>
10 *
11Redistribution and use in source and binary forms, with or without
12modification, are permitted provided that the following conditions
13are met:
14
151. Redistributions of source code must retain the above copyright
16 notice, this list of conditions and the following disclaimer.
172. 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.
203. 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
23THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
24IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
25OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
26IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
27INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
28NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
29DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
30THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
31(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
32THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
33 */
34
40
41#ifndef __winscard_msg_h__
42#define __winscard_msg_h__
43
44#include <stdint.h>
45
46#include "pcsclite.h"
47#include "wintypes.h"
48
50#define PROTOCOL_VERSION_MAJOR 4
52#define PROTOCOL_VERSION_MINOR 6
54#define PROTOCOL_VERSION_MINOR_CLIENT_BACKWARD 4
56#define PROTOCOL_VERSION_MINOR_SERVER_BACKWARD 4
57
62 {
63 int32_t major;
64 int32_t minor;
65 uint32_t rv;
66 };
67
71 struct rxHeader
72 {
73 uint32_t size;
74 uint32_t command;
75 };
76
108
110 {
111 uint32_t hContext;
112 };
113
118 {
119 uint32_t timeOut;
120 uint32_t rv;
121 };
122
129 {
130 uint32_t dwScope;
131 uint32_t hContext;
132 uint32_t rv;
133 };
134
141 {
142 uint32_t hContext;
143 uint32_t rv;
144 };
145
152 {
153 uint32_t hContext;
154 char szReader[MAX_READERNAME];
155 uint32_t dwShareMode;
156 uint32_t dwPreferredProtocols;
157 int32_t hCard;
158 uint32_t dwActiveProtocol;
159 uint32_t rv;
160 };
161
168 {
169 int32_t hCard;
170 uint32_t dwShareMode;
171 uint32_t dwPreferredProtocols;
172 uint32_t dwInitialization;
173 uint32_t dwActiveProtocol;
174 uint32_t rv;
175 };
176
183 {
184 int32_t hCard;
185 uint32_t dwDisposition;
186 uint32_t rv;
187 };
188
195 {
196 int32_t hCard;
197 uint32_t rv;
198 };
199
206 {
207 int32_t hCard;
208 uint32_t dwDisposition;
209 uint32_t rv;
210 };
211
218 {
219 int32_t hContext;
220 uint32_t rv;
221 };
222
229 {
230 int32_t hCard;
231 uint32_t rv;
232 };
233
240 {
241 int32_t hCard;
242 uint32_t ioSendPciProtocol;
243 uint32_t ioSendPciLength;
244 uint32_t cbSendLength;
245 uint32_t ioRecvPciProtocol;
246 uint32_t ioRecvPciLength;
247 uint32_t pcbRecvLength;
248 uint32_t rv;
249 };
250
257 {
258 int32_t hCard;
259 uint32_t dwControlCode;
260 uint32_t cbSendLength;
261 uint32_t cbRecvLength;
262 uint32_t dwBytesReturned;
263 uint32_t rv;
264 };
265
272 {
273 int32_t hCard;
274 uint32_t dwAttrId;
275 uint8_t pbAttr[MAX_BUFFER_SIZE];
276 uint32_t cbAttrLen;
277 uint32_t rv;
278 };
279
281 {
282 uint32_t readerEvents;
283 uint32_t rv;
284 };
285
286 /*
287 * Now some function definitions
288 */
289
290#ifdef PCSCD
291 int32_t InitializeSocket(void);
292 int32_t ListenExistingSocket(int fd);
293 int32_t ProcessEventsServer(/*@out@*/ uint32_t *);
294#else
295 char *getSocketName(void);
296 int32_t ClientSetupSession(uint32_t *);
297 void ClientCloseSession(uint32_t);
298 LONG MessageReceiveTimeout(uint32_t command, /*@out@*/ void *buffer,
299 uint64_t buffer_size, int32_t filedes, long timeOut);
300 LONG MessageSendWithHeader(uint32_t command, uint32_t dwClientID,
301 uint64_t size, void *data);
302#endif
303 LONG MessageSend(void *buffer, uint64_t buffer_size, int32_t filedes);
304 LONG MessageReceive(/*@out@*/ void *buffer, uint64_t buffer_size,
305 int32_t filedes);
306
307#endif
This keeps a list of defines for pcsc-lite.
#define MAX_BUFFER_SIZE
Maximum Tx/Rx Buffer for short APDU.
Definition pcsclite.h:298
contained in SCARD_BEGIN_TRANSACTION Messages.
contained in SCARD_CANCEL Messages.
contained in SCARD_CONNECT Messages.
contained in SCARD_CONTROL Messages.
contained in SCARD_DISCONNECT Messages.
contained in SCARD_END_TRANSACTION Messages.
Information contained in SCARD_ESTABLISH_CONTEXT Messages.
contained in SCARD_GET_ATTRIB and Messages.
contained in SCARD_RECONNECT Messages.
Information contained in SCARD_RELEASE_CONTEXT Messages.
header structure for client/server message data exchange.
uint32_t size
size of the message excluding this header
uint32_t command
one of the pcsc_msg_commands
contained in SCARD_STATUS Messages.
contained in SCARD_TRANSMIT Messages.
Information transmitted in CMD_VERSION Messages.
int32_t major
IPC major PROTOCOL_VERSION_MAJOR.
int32_t minor
IPC minor PROTOCOL_VERSION_MINOR.
Information contained in CMD_WAIT_READER_STATE_CHANGE Messages.
uint32_t timeOut
timeout in ms
LONG MessageSend(void *buffer, uint64_t buffer_size, int32_t filedes)
Sends a menssage from client to server or vice-versa.
LONG MessageReceive(void *buffer, uint64_t buffer_size, int32_t filedes)
Called by the Client to get the response from the server or vice-versa.
LONG MessageReceiveTimeout(uint32_t command, void *buffer, uint64_t buffer_size, int32_t filedes, long timeOut)
Called by the Client to get the response from the server or vice-versa.
LONG MessageSendWithHeader(uint32_t command, uint32_t dwClientID, uint64_t size, void *data)
Wrapper for the MessageSend() function.
void ClientCloseSession(uint32_t)
Closes the socket used by the client to communicate with the server.
int32_t ClientSetupSession(uint32_t *)
Prepares a communication channel for the client to talk to the server.
pcsc_msg_commands
Commands available to use in the field sharedSegmentMsg.command.
@ SCARD_DISCONNECT
used by SCardDisconnect()
@ SCARD_SET_ATTRIB
used by SCardSetAttrib()
@ SCARD_RELEASE_CONTEXT
used by SCardReleaseContext()
@ CMD_STOP_WAITING_READER_STATE_CHANGE
stop waiting for a reader state change
@ CMD_GET_READERS_STATE
get the readers state
@ SCARD_GET_STATUS_CHANGE
not used
@ SCARD_CONTROL
used by SCardControl()
@ CMD_GET_READERS_STATE_ARRAY
get the readers state array
@ CMD_VERSION
get the client/server protocol version
@ CMD_WAIT_READER_STATE_CHANGE
wait for a reader state change
@ SCARD_RECONNECT
used by SCardReconnect()
@ SCARD_STATUS
used by SCardStatus()
@ SCARD_GET_ATTRIB
used by SCardGetAttrib()
@ CMD_GET_READER_EVENTS
get the number of reader events
@ SCARD_BEGIN_TRANSACTION
used by SCardBeginTransaction()
@ SCARD_TRANSMIT
used by SCardTransmit()
@ SCARD_LIST_READERS
used by SCardListReaders()
@ SCARD_END_TRANSACTION
used by SCardEndTransaction()
@ SCARD_CANCEL
used by SCardCancel()
@ SCARD_CANCEL_TRANSACTION
not used
@ SCARD_CONNECT
used by SCardConnect()
@ SCARD_ESTABLISH_CONTEXT
used by SCardEstablishContext()
INTERNAL int32_t InitializeSocket(void)
Prepares the communication channel used by the server to talk to the clients.
INTERNAL int32_t ProcessEventsServer(uint32_t *pdwClientID)
Looks for messages sent by clients.
This keeps a list of Windows(R) types.