winscard: Add headers for winscard dll API (try 2)

Mounir IDRASSI mounir.idrassi at idrix.fr
Thu May 10 18:25:12 CDT 2007


Hi,
This is the second attempt to submit a patch for adding winscard
headers. I have removed the comments from the header files and corrected
the indentation. I hope this will help the patch be committed.

Mounir IDRASSI
IDRIX - Cryptography and IT Security Experts
http://www.idrix.fr

-------------- next part --------------
>From 4d34a74a498ee3e49f8db044d1d3a012637c5a4a Mon Sep 17 00:00:00 2001
From: Mounir IDRASSI <mounir.idrassi at idrix.fr>
Date: Fri, 11 May 2007 01:10:33 +0200
Subject: winscard: Add headers for winscard dll API

---
 include/Makefile.in |    3 +
 include/scarderr.h  |   69 +++++++++
 include/winscard.h  |  413 +++++++++++++++++++++++++++++++++++++++++++++++++++
 include/winsmcrd.h  |  182 ++++++++++++++++++++++
 4 files changed, 667 insertions(+), 0 deletions(-)

diff --git a/include/Makefile.in b/include/Makefile.in
index 2577872..7dc0cc3 100644
--- a/include/Makefile.in
+++ b/include/Makefile.in
@@ -293,6 +293,7 @@ SRCDIR_INCLUDES = \
 	rpcndr.h \
 	rpcnterr.h \
 	rpcproxy.h \
+	scarderr.h \
 	schannel.h \
 	schemadef.h \
 	schnlsp.h \
@@ -351,6 +352,8 @@ SRCDIR_INCLUDES = \
 	winreg.h \
 	winres.h \
 	winresrc.h \
+	winscard.h \
+	winsmcrd.h \
 	winsock.h \
 	winsock2.h \
 	winspool.h \
diff --git a/include/scarderr.h b/include/scarderr.h
new file mode 100755
index 0000000..3d4af55
--- /dev/null
+++ b/include/scarderr.h
@@ -0,0 +1,69 @@
+/*
+ * Copyright 2007 Mounir IDRASSI  (mounir.idrassi at idrix.fr, for IDRIX)
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+
+#ifndef _WINE_SCARDERR_H
+#define _WINE_SCARDERR_H
+
+
+#define SCARD_S_SUCCESS             0x00000000
+#define SCARD_F_INTERNAL_ERROR      0x80100001
+#define SCARD_E_CANCELLED           0x80100002
+#define SCARD_E_INVALID_HANDLE      0x80100003
+#define SCARD_E_INVALID_PARAMETER   0x80100004
+#define SCARD_E_INVALID_TARGET      0x80100005
+#define SCARD_E_NO_MEMORY           0x80100006
+#define SCARD_F_WAITED_TOO_LONG     0x80100007
+#define SCARD_E_INSUFFICIENT_BUFFER 0x80100008
+#define SCARD_E_UNKNOWN_READER      0x80100009
+#define SCARD_E_TIMEOUT             0x8010000A
+#define SCARD_E_SHARING_VIOLATION   0x8010000B
+
+#ifndef SCARD_E_NO_SMARTCARD
+#define SCARD_E_NO_SMARTCARD        0x8010000C
+#endif
+
+#define SCARD_E_UNKNOWN_CARD        0x8010000D
+#define SCARD_E_CANT_DISPOSE        0x8010000E
+#define SCARD_E_PROTO_MISMATCH      0x8010000F
+#define SCARD_E_NOT_READY           0x80100010
+#define SCARD_E_INVALID_VALUE       0x80100011
+#define SCARD_E_SYSTEM_CANCELLED    0x80100012
+#define SCARD_F_COMM_ERROR          0x80100013
+#define SCARD_F_UNKNOWN_ERROR       0x80100014
+#define SCARD_E_INVALID_ATR         0x80100015
+#define SCARD_E_NOT_TRANSACTED      0x80100016
+#define SCARD_E_READER_UNAVAILABLE  0x80100017
+
+#define SCARD_E_PCI_TOO_SMALL       0x80100019
+#define SCARD_E_READER_UNSUPPORTED  0x8010001A
+#define SCARD_E_DUPLICATE_READER    0x8010001B
+#define SCARD_E_CARD_UNSUPPORTED    0x8010001C
+#define SCARD_E_NO_SERVICE          0x8010001D
+#define SCARD_E_SERVICE_STOPPED     0x8010001E
+
+#define SCARD_E_NO_READERS_AVAILABLE    0x8010002E
+
+#define SCARD_W_UNSUPPORTED_CARD    0x80100065
+#define SCARD_W_UNRESPONSIVE_CARD   0x80100066
+#define SCARD_W_UNPOWERED_CARD      0x80100067
+#define SCARD_W_RESET_CARD          0x80100068
+#define SCARD_W_REMOVED_CARD        0x80100069
+
+#endif
+
diff --git a/include/winscard.h b/include/winscard.h
new file mode 100755
index 0000000..9d2d2b2
--- /dev/null
+++ b/include/winscard.h
@@ -0,0 +1,413 @@
+/*
+ * Copyright 2007 Mounir IDRASSI  (mounir.idrassi at idrix.fr, for IDRIX)
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+
+
+#ifndef _WINE_WINSCARD_H
+#define _WINE_WINSCARD_H
+
+#include "winsmcrd.h"
+#include "scarderr.h"
+
+/*
+ * these variables store pre-filled protocol requests
+ */
+extern SCARD_IO_REQUEST g_rgSCardT0Pci;
+extern SCARD_IO_REQUEST g_rgSCardT1Pci;
+extern SCARD_IO_REQUEST g_rgSCardRawPci;
+
+/*
+ * These are handy shotcuts to be used in SCardTransmit
+ * They are implemented here as pointer variables
+ */
+ extern SCARD_IO_REQUEST* SCARD_PCI_T0;     /* equal to (&g_rgSCardT0Pci) */
+ extern SCARD_IO_REQUEST* SCARD_PCI_T1;     /* equal to (&g_rgSCardT1Pci) */
+ extern SCARD_IO_REQUEST* SCARD_PCI_RAW;    /* equal to (&g_rgSCardRawPci) */
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+	
+	
+/*
+ * Smart Card service manager function
+ */	
+	
+LONG WINAPI SCardEstablishContext(
+        DWORD dwScope,
+        LPCVOID pvReserved1, 
+        LPCVOID pvReserved2, 
+        LPSCARDCONTEXT phContext);
+
+LONG WINAPI SCardReleaseContext(
+        SCARDCONTEXT hContext);	
+
+LONG WINAPI SCardFreeMemory(
+        SCARDCONTEXT hContext,
+        LPCVOID pvMem);
+
+HANDLE WINAPI SCardAccessStartedEvent(void);
+
+void WINAPI SCardReleaseStartedEvent(
+        HANDLE hStartedEventHandle);
+
+LONG WINAPI SCardIsValidContext(
+        SCARDCONTEXT hContext);
+
+	
+/*
+ * Smart Card database functions
+ */	
+
+LONG WINAPI SCardListReaderGroupsA(
+        SCARDCONTEXT hContext,
+        LPSTR mszGroups, 
+        LPDWORD pcchGroups);		
+LONG WINAPI SCardListReaderGroupsW(
+        SCARDCONTEXT hContext,
+        LPWSTR mszGroups, 
+        LPDWORD pcchGroups);		
+	
+#define SCardListReaderGroups    WINELIB_NAME_AW(SCardListReaderGroups)
+	
+
+LONG WINAPI SCardListReadersA(
+        SCARDCONTEXT hContext,
+        LPCSTR mszGroups,
+        LPSTR mszReaders, 
+        LPDWORD pcchReaders);
+LONG WINAPI SCardListReadersW(
+        SCARDCONTEXT hContext,
+        LPCWSTR mszGroups,
+        LPWSTR mszReaders, 
+        LPDWORD pcchReaders);
+		
+#define SCardListReaders    WINELIB_NAME_AW(SCardListReaders)
+
+LONG WINAPI SCardListCardsA(
+        SCARDCONTEXT hContext,
+        const BYTE* pbAtr,
+        LPCGUID rgquidInterfaces,
+        DWORD cguidInterfaceCount,
+        LPSTR mszCards,
+        LPDWORD pcchCards);
+LONG WINAPI SCardListCardsW(
+        SCARDCONTEXT hContext,
+        const BYTE* pbAtr,
+        LPCGUID rgquidInterfaces,
+        DWORD cguidInterfaceCount,
+        LPWSTR mszCards,
+        LPDWORD pcchCards);
+		  
+#define SCardListCards    WINELIB_NAME_AW(SCardListCards) 
+	
+LONG WINAPI SCardListInterfacesA(
+        SCARDCONTEXT hContext,
+        LPCSTR szCard,
+        LPGUID pguidInterfaces,
+        LPDWORD pcguidInterfaces);
+LONG WINAPI SCardListInterfacesW(
+        SCARDCONTEXT hContext,
+	LPCWSTR szCard,
+	LPGUID pguidInterfaces,
+        LPDWORD pcguidInterfaces);
+
+#define SCardListInterfaces    WINELIB_NAME_AW(SCardListInterfaces)		
+  
+LONG WINAPI SCardGetProviderIdA(
+        SCARDCONTEXT hContext,
+        LPCSTR szCard,
+        LPGUID pguidProviderId);
+LONG WINAPI SCardGetProviderIdW(
+        SCARDCONTEXT hContext,
+        LPCWSTR szCard,	
+        LPGUID pguidProviderId);  
+    
+#define SCardGetProviderId    WINELIB_NAME_AW(SCardGetProviderId)		    
+	
+LONG WINAPI SCardGetCardTypeProviderNameA(
+        SCARDCONTEXT hContext,
+        LPCSTR szCardName,
+        DWORD dwProviderId,
+        LPSTR szProvider,
+        LPDWORD pcchProvider);
+LONG WINAPI SCardGetCardTypeProviderNameW(
+        SCARDCONTEXT hContext,
+        LPCWSTR szCardName, 
+        DWORD dwProviderId,
+        LPWSTR szProvider,
+        LPDWORD pcchProvider);	
+    
+#define SCardGetCardTypeProviderName    WINELIB_NAME_AW(SCardGetCardTypeProviderName)		        
+
+LONG WINAPI SCardIntroduceReaderGroupA(
+        SCARDCONTEXT hContext,
+        LPCSTR szGroupName);	
+LONG WINAPI SCardIntroduceReaderGroupW(
+        SCARDCONTEXT hContext,
+	LPCWSTR szGroupName);
+    
+#define SCardIntroduceReaderGroup    WINELIB_NAME_AW(SCardIntroduceReaderGroup)		            
+
+LONG WINAPI SCardForgetReaderGroupA(
+        SCARDCONTEXT hContext,
+        LPCSTR szGroupName);	
+LONG WINAPI SCardForgetReaderGroupW(
+        SCARDCONTEXT hContext,
+	LPCWSTR szGroupName);
+    
+#define SCardForgetReaderGroup    WINELIB_NAME_AW(SCardForgetReaderGroup)
+
+LONG WINAPI SCardIntroduceReaderA(
+        SCARDCONTEXT hContext,
+        LPCSTR szReaderName,
+        LPCSTR szDeviceName);
+LONG WINAPI SCardIntroduceReaderW(
+        SCARDCONTEXT hContext,
+        LPCWSTR szReaderName,
+	LPCWSTR szDeviceName);
+    
+#define SCardIntroduceReader    WINELIB_NAME_AW(SCardIntroduceReader)		                    
+
+LONG WINAPI SCardForgetReaderA(
+        SCARDCONTEXT hContext,
+	LPCSTR szReaderName);
+LONG WINAPI SCardForgetReaderW(
+        SCARDCONTEXT hContext,
+        LPCWSTR szReaderName);
+    
+#define SCardForgetReader    WINELIB_NAME_AW(SCardForgetReader)		                        
+
+LONG WINAPI SCardAddReaderToGroupA(
+        SCARDCONTEXT hContext,
+        LPCSTR szReaderName,
+        LPCSTR szGroupName);	
+LONG WINAPI SCardAddReaderToGroupW(
+        SCARDCONTEXT hContext,
+        LPCWSTR szReaderName,
+        LPCWSTR szGroupName);
+    
+#define SCardAddReaderToGroup    WINELIB_NAME_AW(SCardAddReaderToGroup)		                            
+
+LONG WINAPI SCardRemoveReaderFromGroupA(
+        SCARDCONTEXT hContext,
+        LPCSTR szReaderName,
+        LPCSTR szGroupName);	
+LONG WINAPI SCardRemoveReaderFromGroupW(
+        SCARDCONTEXT hContext,
+        LPCWSTR szReaderName,
+	LPCWSTR szGroupName);
+
+#define SCardRemoveReaderFromGroup    WINELIB_NAME_AW(SCardRemoveReaderFromGroup)		                            
+
+LONG WINAPI SCardIntroduceCardTypeA(
+        SCARDCONTEXT hContext,
+	LPCSTR szCardName,
+        LPCGUID pguidPrimaryProvider,
+        LPCGUID rgguidInterfaces,
+        DWORD dwInterfaceCount,
+        const BYTE* pbAtr,
+        const BYTE* pbAtrMask,
+        DWORD cbAtrLen);	
+LONG WINAPI SCardIntroduceCardTypeW(
+        SCARDCONTEXT hContext,
+        LPCWSTR szCardName,
+	LPCGUID pguidPrimaryProvider,
+        LPCGUID rgguidInterfaces,
+        DWORD dwInterfaceCount,
+        const BYTE* pbAtr,
+        const BYTE* pbAtrMask,
+        DWORD cbAtrLen);	
+	
+#define SCardIntroduceCardType    WINELIB_NAME_AW(SCardIntroduceCardType)		                            	
+
+LONG WINAPI SCardSetCardTypeProviderNameA(
+        SCARDCONTEXT hContext,
+        LPCSTR szCardName,
+        DWORD dwProviderId,
+        LPCSTR szProvider);	
+LONG WINAPI SCardSetCardTypeProviderNameW(
+        SCARDCONTEXT hContext,
+	LPCWSTR szCardName,
+        DWORD dwProviderId,
+        LPCWSTR szProvider);
+
+#define SCardSetCardTypeProviderName    WINELIB_NAME_AW(SCardSetCardTypeProviderName)		                            	
+
+LONG WINAPI SCardForgetCardTypeA(
+        SCARDCONTEXT hContext,
+        LPCSTR szCardName);	
+LONG WINAPI SCardForgetCardTypeW(
+        SCARDCONTEXT hContext,
+        LPCWSTR szCardName);
+	
+#define SCardForgetCardType    WINELIB_NAME_AW(SCardForgetCardType)		                            	
+
+LONG WINAPI SCardLocateCardsA(
+        SCARDCONTEXT hContext,
+        LPCSTR mszCards,
+        LPSCARD_READERSTATEA rgReaderStates,
+        DWORD cReaders);	
+LONG WINAPI SCardLocateCardsW(
+	SCARDCONTEXT hContext,
+        LPCWSTR mszCards,
+        LPSCARD_READERSTATEW rgReaderStates,
+        DWORD cReaders);
+
+#define SCardLocateCards    WINELIB_NAME_AW(SCardLocateCards)		                            	
+
+LONG WINAPI SCardLocateCardsByATRA(
+	SCARDCONTEXT hContext,
+        LPSCARD_ATRMASK rgAtrMasks,
+        DWORD cAtrs,
+        LPSCARD_READERSTATEA rgReaderStates,
+        DWORD cReaders);	
+LONG WINAPI SCardLocateCardsByATRW(
+        SCARDCONTEXT hContext,
+        LPSCARD_ATRMASK rgAtrMasks,
+        DWORD cAtrs,
+        LPSCARD_READERSTATEW rgReaderStates,
+        DWORD cReaders);	
+	
+#define SCardLocateCardsByATR    WINELIB_NAME_AW(SCardLocateCardsByATR)		                            		
+	
+/*
+  * Smart card communication functions
+  */
+	
+LONG WINAPI SCardConnectA(
+        SCARDCONTEXT hContext,
+        LPCSTR szReader,
+	DWORD dwShareMode,
+	DWORD dwPreferredProtocols,
+        LPSCARDHANDLE phCard, 
+	LPDWORD pdwActiveProtocol);						
+LONG WINAPI SCardConnectW(
+        SCARDCONTEXT hContext,
+	LPCWSTR szReader,
+	DWORD dwShareMode,
+        DWORD dwPreferredProtocols,
+        LPSCARDHANDLE phCard, 
+        LPDWORD pdwActiveProtocol);						
+
+#define SCardConnect    WINELIB_NAME_AW(SCardConnect)		                            		
+
+LONG WINAPI SCardReconnect(
+        SCARDHANDLE hCard,
+        DWORD dwShareMode,
+        DWORD dwPreferredProtocols,
+        DWORD dwInitialization, 
+        LPDWORD pdwActiveProtocol);
+
+LONG WINAPI SCardDisconnect(
+        SCARDHANDLE hCard, 
+        DWORD dwDisposition);
+
+LONG WINAPI SCardBeginTransaction(
+        SCARDHANDLE hCard);
+
+LONG WINAPI SCardEndTransaction(
+        SCARDHANDLE hCard, 
+        DWORD dwDisposition);
+
+LONG WINAPI SCardCancelTransaction(
+	SCARDHANDLE hCard);
+
+LONG WINAPI SCardControl(
+        SCARDHANDLE hCard, 
+	DWORD dwControlCode,
+        LPCVOID pbSendBuffer, 
+        DWORD cbSendLength,
+        LPVOID pbRecvBuffer, 
+	DWORD cbRecvLength, 
+        LPDWORD lpBytesReturned);
+
+LONG WINAPI SCardTransmit(
+        SCARDHANDLE hCard,
+	LPCSCARD_IO_REQUEST pioSendPci,
+        const BYTE* pbSendBuffer, 
+        DWORD cbSendLength,
+        LPSCARD_IO_REQUEST pioRecvPci,
+	LPBYTE pbRecvBuffer, 
+        LPDWORD pcbRecvLength);
+		
+LONG WINAPI SCardCancel(
+        SCARDCONTEXT hContext);
+
+/*
+ * Smart card tracking functions
+ */
+
+LONG WINAPI SCardState(
+        SCARDHANDLE hCard,
+        LPDWORD pdwState,
+        LPDWORD pdwProtocol,
+	LPBYTE pbAtr,
+        LPDWORD pcbAtrLen);
+
+LONG WINAPI SCardStatusA(
+        SCARDHANDLE hCard,
+        LPSTR mszReaderNames, 
+	LPDWORD pcchReaderLen,
+        LPDWORD pdwState,
+	LPDWORD pdwProtocol,
+        LPBYTE pbAtr, 
+        LPDWORD pcbAtrLen);		
+LONG WINAPI SCardStatusW(
+        SCARDHANDLE hCard,
+        LPWSTR mszReaderNames, 
+	LPDWORD pcchReaderLen,
+        LPDWORD pdwState,
+        LPDWORD pdwProtocol,
+	LPBYTE pbAtr, 
+	LPDWORD pcbAtrLen);	
+
+#define SCardStatus    WINELIB_NAME_AW(SCardStatus)		                            		
+
+LONG WINAPI SCardGetStatusChangeA(
+        SCARDCONTEXT hContext,
+        DWORD dwTimeout,
+        LPSCARD_READERSTATEA rgReaderStates, 
+        DWORD cReaders);		
+LONG WINAPI SCardGetStatusChangeW(
+        SCARDCONTEXT hContext,
+        DWORD dwTimeout,
+        LPSCARD_READERSTATEW rgReaderStates, 
+        DWORD cReaders);		
+
+#define SCardGetStatusChange    WINELIB_NAME_AW(SCardGetStatusChange)		
+
+LONG WINAPI SCardGetAttrib(
+        SCARDHANDLE hCard, 
+        DWORD dwAttrId,
+        LPBYTE pbAttr, 
+        LPDWORD pcbAttrLen);
+
+LONG WINAPI SCardSetAttrib(
+        SCARDHANDLE hCard, 
+        DWORD dwAttrId,
+        const BYTE* pbAttr, 
+	DWORD cbAttrLen);
+	
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
diff --git a/include/winsmcrd.h b/include/winsmcrd.h
new file mode 100755
index 0000000..ca5f961
--- /dev/null
+++ b/include/winsmcrd.h
@@ -0,0 +1,182 @@
+/*
+ * Copyright 2007 Mounir IDRASSI  (mounir.idrassi at idrix.fr, for IDRIX)
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+
+#ifndef _WINE_WINSCMCRD_H
+#define _WINE_WINSCMCRD_H
+
+#define MAX_ATR_SIZE    36/* Maximum ATR size */
+
+#ifndef SCARD_ATR_LENGTH
+#define SCARD_ATR_LENGTH    MAX_ATR_SIZE
+#endif
+
+
+#define SCARD_PROTOCOL_UNDEFINED    0x00000000
+#define SCARD_PROTOCOL_T0           0x00000001
+#define SCARD_PROTOCOL_T1           0x00000002
+#define SCARD_PROTOCOL_RAW          0x00010000
+#define SCARD_PROTOCOL_Tx           (SCARD_PROTOCOL_T0 | SCARD_PROTOCOL_T1)
+
+/*
+ * The following value is used as a length value
+ * in functions where we want the winscard dll
+ * to allocate memory for us
+ */
+#define SCARD_AUTOALLOCATE    (DWORD)(-1)
+
+/*
+ * Values used by SCardEstablishContext
+ */
+#define SCARD_SCOPE_USER        0x0000
+#define SCARD_SCOPE_TERMINAL    0x0001
+#define SCARD_SCOPE_SYSTEM      0x0002
+
+/*
+ * Flags used by SCardGetStatusChange to indicate
+ * the reader status.
+ */
+#define SCARD_STATE_UNAWARE         0x0000
+#define SCARD_STATE_IGNORE          0x0001
+#define SCARD_STATE_CHANGED         0x0002
+#define SCARD_STATE_UNKNOWN         0x0004
+#define SCARD_STATE_UNAVAILABLE     0x0008
+#define SCARD_STATE_EMPTY           0x0010
+#define SCARD_STATE_PRESENT         0x0020
+#define SCARD_STATE_ATRMATCH        0x0040
+#define SCARD_STATE_EXCLUSIVE       0x0080
+#define SCARD_STATE_INUSE           0x0100
+#define SCARD_STATE_MUTE            0x0200
+#define SCARD_STATE_UNPOWERED       0x0400
+
+/*
+ * These values define how SCardConnect should
+ * connect to the card
+ */
+#define SCARD_SHARE_EXCLUSIVE   0x0001
+#define SCARD_SHARE_SHARED      0x0002
+#define SCARD_SHARE_DIRECT      0x0003
+
+/*
+ * Values used by SCardDisconnect to specify
+ * how the card should be treated on closing
+ * the connection
+ */
+#define SCARD_LEAVE_CARD    0x0000
+#define SCARD_RESET_CARD    0x0001
+#define SCARD_UNPOWER_CARD  0x0002
+#define SCARD_EJECT_CARD    0x0003
+
+/*
+ * Values returned by SCardStatus indicating
+ * the reader's state
+ */
+#define SCARD_UNKNOWN       0x0001
+#define SCARD_ABSENT        0x0002
+#define SCARD_PRESENT       0x0004
+#define SCARD_SWALLOWED     0x0008
+#define SCARD_POWERED       0x0010
+#define SCARD_NEGOTIABLE    0x0020
+#define SCARD_SPECIFIC      0x0040
+
+/*
+ * definitions used by SCardGetAttrib and SCardSetAttrib for
+ * requesting and setting readers attributes
+ * Other values maybe supported
+ */
+#define SCARD_ATTR_ICC_PRESENCE             0x00090300
+#define SCARD_ATTR_CURRENT_PROTOCOL_TYPE    0x00080201
+#define SCARD_ATTR_ATR_STRING               0x00090303
+#define SCARD_ATTR_DEVICE_FRIENDLY_NAME_A   0x7FFF0003
+#define SCARD_ATTR_DEVICE_FRIENDLY_NAME_W   0x7FFF0005
+#define SCARD_ATTR_DEVICE_SYSTEM_NAME_A     0x7FFF0004
+#define SCARD_ATTR_DEVICE_SYSTEM_NAME_W     0x7FFF0006
+
+#define SCARD_ATTR_DEVICE_FRIENDLY_NAME     WINELIB_NAME_AW(SCARD_ATTR_DEVICE_FRIENDLY_NAME_)
+#define SCARD_ATTR_DEVICE_SYSTEM_NAME       WINELIB_NAME_AW(SCARD_ATTR_DEVICE_SYSTEM_NAME_)
+
+/*
+ * Type definitions used by all the functions
+ */
+typedef ULONG_PTR SCARDCONTEXT;
+typedef SCARDCONTEXT *PSCARDCONTEXT;
+typedef SCARDCONTEXT *LPSCARDCONTEXT;
+
+typedef ULONG_PTR SCARDHANDLE;
+typedef SCARDHANDLE *PSCARDHANDLE;
+typedef SCARDHANDLE *LPSCARDHANDLE;
+
+
+/*
+ * SCARD_READERSTATE is used by SCardGetStatusChange as an
+ * input/output for any change of readers states
+ */
+typedef struct
+{
+    LPCSTR szReader;
+    void *pvUserData;
+    unsigned long dwCurrentState;
+    unsigned long dwEventState;
+    unsigned long cbAtr;
+    unsigned char rgbAtr[MAX_ATR_SIZE];
+}
+SCARD_READERSTATEA;
+
+typedef struct
+{
+    LPCWSTR szReader;
+    void *pvUserData;
+    unsigned long dwCurrentState;
+    unsigned long dwEventState;
+    unsigned long cbAtr;
+    unsigned char rgbAtr[MAX_ATR_SIZE];
+}
+SCARD_READERSTATEW;
+
+typedef SCARD_READERSTATEA    *PSCARD_READERSTATEA, *LPSCARD_READERSTATEA;
+
+typedef SCARD_READERSTATEW    *PSCARD_READERSTATEW, *LPSCARD_READERSTATEW;
+
+DECL_WINELIB_TYPE_AW(SCARD_READERSTATE)
+DECL_WINELIB_TYPE_AW(PSCARD_READERSTATE)
+DECL_WINELIB_TYPE_AW(LPSCARD_READERSTATE)
+	
+/*
+ * This structure is used by SCardTransmit to communicate
+ * with the card
+ */
+typedef struct _SCARD_IO_REQUEST
+{
+    unsigned long dwProtocol;
+    unsigned long cbPciLength;
+}
+SCARD_IO_REQUEST, *PSCARD_IO_REQUEST, *LPSCARD_IO_REQUEST;
+
+typedef const SCARD_IO_REQUEST *LPCSCARD_IO_REQUEST;
+
+
+typedef struct _SCARD_ATRMASK {
+    unsigned long    cbAtr;
+    unsigned char    rgbAtr[MAX_ATR_SIZE];
+    unsigned char    rgbMask[MAX_ATR_SIZE];
+} SCARD_ATRMASK;
+
+typedef SCARD_ATRMASK  *PSCARD_ATRMASK, *LPSCARD_ATRMASK;
+
+#endif
+
-- 
1.4.4.2



More information about the wine-patches mailing list