Adding header files for the implementation of Winscard dll (Smart
Cards support)
Mounir IDRASSI
mounir.idrassi at idrix.fr
Tue May 1 11:39:28 CDT 2007
Hi all,
The following patch adds header files necessary for the implementation
of winscard dll (Smart Cards API). Other patches giving the actual
implementation will follow.
Mounir IDRASSI
IDRIX - Cryptography and IT Security Experts
http://www.idrix.fr
-------------- next part --------------
>From 90fb2bc92327fc839d6a0ef68c3157035cd50c65 Mon Sep 17 00:00:00 2001
From: Mounir IDRASSI <mounir.idrassi at idrix.fr>
Date: Tue, 1 May 2007 18:03:01 +0200
Subject: Header files for the support of smart cards using Winscard dll
---
include/Makefile.in | 3 +
include/scarderr.h | 70 +++++++++
include/winscard.h | 416 +++++++++++++++++++++++++++++++++++++++++++++++++++
include/winsmcrd.h | 190 +++++++++++++++++++++++
4 files changed, 679 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..c07833e
--- /dev/null
+++ b/include/scarderr.h
@@ -0,0 +1,70 @@
+/*
+ * 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 /* An internal error occured while executing the operation */
+#define SCARD_E_CANCELLED 0x80100002 /* SCardCancel was called to cancel the operation */
+#define SCARD_E_INVALID_HANDLE 0x80100003 /* The given handle is not valid */
+#define SCARD_E_INVALID_PARAMETER 0x80100004 /* An invalid parameter was given in input*/
+#define SCARD_E_INVALID_TARGET 0x80100005 /* Smart card service encountered inconsistent installation information */
+#define SCARD_E_NO_MEMORY 0x80100006 /* No enough memory available to complete the operation */
+#define SCARD_F_WAITED_TOO_LONG 0x80100007 /* A timeout occured in an internal operation */
+#define SCARD_E_INSUFFICIENT_BUFFER 0x80100008 /* The output buffer is too small to receive data */
+#define SCARD_E_UNKNOWN_READER 0x80100009 /* The given reader name is unknwon to the system */
+#define SCARD_E_TIMEOUT 0x8010000A /* The operation timed out */
+#define SCARD_E_SHARING_VIOLATION 0x8010000B /* can't access the card because of other connections*/
+
+#ifndef SCARD_E_NO_SMARTCARD
+#define SCARD_E_NO_SMARTCARD 0x8010000C /* no smart card found on the reader*/
+#endif
+
+#define SCARD_E_UNKNOWN_CARD 0x8010000D /* The given card name is unknwon to the ssytem */
+#define SCARD_E_CANT_DISPOSE 0x8010000E /* The system can't handle the disposition request in SCardDisconnect or SCardEndTransaction*/
+#define SCARD_E_PROTO_MISMATCH 0x8010000F /* The given protocol is not compatible with the currenr card context */
+#define SCARD_E_NOT_READY 0x80100010 /* The reader or the card are not ready for use */
+#define SCARD_E_INVALID_VALUE 0x80100011 /* An invalid value was detected while */
+#define SCARD_E_SYSTEM_CANCELLED 0x80100012 /* The system canceld the current operation with the reader */
+#define SCARD_F_COMM_ERROR 0x80100013 /* A communication error occured with the reader */
+#define SCARD_F_UNKNOWN_ERROR 0x80100014 /* An unknown error occured */
+#define SCARD_E_INVALID_ATR 0x80100015 /* The ATR value is invalid */
+#define SCARD_E_NOT_TRANSACTED 0x80100016 /* no transaction exists */
+#define SCARD_E_READER_UNAVAILABLE 0x80100017 /* The reader is unavailable for use by the system, e.g. removed */
+
+#define SCARD_E_PCI_TOO_SMALL 0x80100019 /* The PCI request receive buffer is too small*/
+#define SCARD_E_READER_UNSUPPORTED 0x8010001A /* The reader is unsupported due to the lack of capabilities*/
+#define SCARD_E_DUPLICATE_READER 0x8010001B /* more than one reader with the same name exist*/
+#define SCARD_E_CARD_UNSUPPORTED 0x8010001C /* The card inserted is not supported by the system */
+#define SCARD_E_NO_SERVICE 0x8010001D /* The Smart card resource manager is not running */
+#define SCARD_E_SERVICE_STOPPED 0x8010001E /* The Smart card resource manager has been stopped */
+
+#define SCARD_E_NO_READERS_AVAILABLE 0x8010002E /* no reader found on the system */
+
+#define SCARD_W_UNSUPPORTED_CARD 0x80100065 /* the card is unsupported and the reader can't communicate with it*/
+#define SCARD_W_UNRESPONSIVE_CARD 0x80100066 /* the card didn't send answer to the reset*/
+#define SCARD_W_UNPOWERED_CARD 0x80100067 /* the card is unpowered and the reader can't communicate with it*/
+#define SCARD_W_RESET_CARD 0x80100068 /* the card has been reset and any held information are invalid*/
+#define SCARD_W_REMOVED_CARD 0x80100069 /* the card has been removed from the reader*/
+
+
+
+#endif
diff --git a/include/winscard.h b/include/winscard.h
new file mode 100755
index 0000000..f302a9f
--- /dev/null
+++ b/include/winscard.h
@@ -0,0 +1,416 @@
+/*
+ * 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..cc03a35
--- /dev/null
+++ b/include/winsmcrd.h
@@ -0,0 +1,190 @@
+/*
+ * 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
+
+/*
+ * These values define the protocol used to
+ * communicate with the card
+ */
+#define SCARD_PROTOCOL_UNDEFINED 0x00000000 /* No protocol defined */
+#define SCARD_PROTOCOL_T0 0x00000001 /* T=0 protocol. */
+#define SCARD_PROTOCOL_T1 0x00000002 /* T=1 protocol */
+#define SCARD_PROTOCOL_RAW 0x00010000 /* Raw protocol, for memory card for example */
+#define SCARD_PROTOCOL_Tx (SCARD_PROTOCOL_T0 | SCARD_PROTOCOL_T1) /* Can be used in SCardConnect */
+
+/*
+ * 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 /* context in user scope */
+#define SCARD_SCOPE_TERMINAL 0x0001 /* context in terminal scope */
+#define SCARD_SCOPE_SYSTEM 0x0002 /* context in system scope */
+
+/*
+ * Flags used by SCardGetStatusChange to indicate
+ * the reader status.
+ */
+#define SCARD_STATE_UNAWARE 0x0000 /* called want to know the current state */
+#define SCARD_STATE_IGNORE 0x0001 /* don't update the state for the given reader */
+#define SCARD_STATE_CHANGED 0x0002 /* reader state has not changed */
+#define SCARD_STATE_UNKNOWN 0x0004 /* reader state unknown */
+#define SCARD_STATE_UNAVAILABLE 0x0008 /* reader state unavailable */
+#define SCARD_STATE_EMPTY 0x0010 /* no card on the reader*/
+#define SCARD_STATE_PRESENT 0x0020 /* card present on the reader */
+#define SCARD_STATE_ATRMATCH 0x0040 /* card's ATR matches the given ATR */
+#define SCARD_STATE_EXCLUSIVE 0x0080 /* an exclusive connection on the card exists*/
+#define SCARD_STATE_INUSE 0x0100 /* card in use but the connection can be shared */
+#define SCARD_STATE_MUTE 0x0200 /* card is mute, doesn't answer to reset */
+#define SCARD_STATE_UNPOWERED 0x0400 /* card present but not powered */
+
+
+/*
+ * These values define how SCardConnect should
+ * connect to the card
+ */
+#define SCARD_SHARE_EXCLUSIVE 0x0001 /* connect to the card in exclusive mode (no other connection allowed) */
+#define SCARD_SHARE_SHARED 0x0002 /* connection can be shared with others */
+#define SCARD_SHARE_DIRECT 0x0003 /* access directly the reader, no other connection allowed */
+
+/*
+ * Values used by SCardDisconnect to specify
+ * how the card should be treated on closing
+ * the connection
+ */
+#define SCARD_LEAVE_CARD 0x0000 /* do nothing */
+#define SCARD_RESET_CARD 0x0001 /* reset the card */
+#define SCARD_UNPOWER_CARD 0x0002 /* unpower the card */
+#define SCARD_EJECT_CARD 0x0003 /* eject the card from the reader if supported */
+
+/*
+ * Values returned by SCardStatus indicating
+ * the reader's state
+ */
+#define SCARD_UNKNOWN 0x0001 /* state unknown */
+#define SCARD_ABSENT 0x0002 /* no card on the reader */
+#define SCARD_PRESENT 0x0004 /* card is present on the reader */
+#define SCARD_SWALLOWED 0x0008 /* card inside the reader but not powered */
+#define SCARD_POWERED 0x0010 /* card present and powered */
+#define SCARD_NEGOTIABLE 0x0020 /* card present and ready to negotiate protocol */
+#define SCARD_SPECIFIC 0x0040 /* card has ended protocol negotiation */
+
+/*
+ * 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; /* protocol used for this request */
+ unsigned long cbPciLength; /* total length of the request data, usually sizeof(SCARD_IO_REQUEST) */
+}
+SCARD_IO_REQUEST, *PSCARD_IO_REQUEST, *LPSCARD_IO_REQUEST;
+
+typedef const SCARD_IO_REQUEST *LPCSCARD_IO_REQUEST;
+
+/*
+ * This structure is used by the new functions
+ * SCardLocateCardsByATRA and SCardLocateCardsByATRW
+ */
+typedef struct _SCARD_ATRMASK {
+ unsigned long cbAtr; /* number of used bytes in rgbAtr and rgbMask*/
+ unsigned char rgbAtr[MAX_ATR_SIZE]; /* ATR bytes of the card */
+ unsigned char rgbMask[MAX_ATR_SIZE]; /* Mask used for accepted ATR values */
+} SCARD_ATRMASK;
+
+typedef SCARD_ATRMASK *PSCARD_ATRMASK, *LPSCARD_ATRMASK;
+
+#endif
+
--
1.4.4.2
More information about the wine-patches
mailing list