Export (0) Print
Expand All

6 Appendix A: Full IDL

For ease of implementation, the full Interface Definition Language (IDL) is provided below where ms-dtyp.idl is the IDL as specified in [MS-DTYP]Appendix A and ms-dcom.idl is the IDL as specified in [MS-DCOM]Appendix A.

import "ms-dtyp.idl";
import "ms-dcom.idl";

[
    uuid(A35AF600-9CF4-11CD-A076-08002B2BD711),
    version(1.0),
    pointer_default(unique)
]
interface type_scard_pack
{

//
// Packing for calls that use the same params
//
typedef struct _REDIR_SCARDCONTEXT
{
    [range(0, 16)]                  unsigned long       cbContext;      
    [unique] [size_is(cbContext)]   byte               *pbContext;
} REDIR_SCARDCONTEXT;

typedef struct _REDIR_SCARDHANDLE
{
                         REDIR_SCARDCONTEXT              Context;
    [range(0, 16)]       unsigned long                   cbHandle;
    [size_is(cbHandle)]  byte                           *pbHandle;
} REDIR_SCARDHANDLE;

typedef struct _long_Return
{
    long                 ReturnCode;
} long_Return;

typedef struct _longAndMultiString_Return
{
                                         long            ReturnCode;
    [range(0, 65536)]                    unsigned long   cBytes;     
    [unique] [size_is(cBytes)]           byte           *msz;
} ListReaderGroups_Return, ListReaders_Return;

typedef struct _Context_Call
{
    REDIR_SCARDCONTEXT                          Context;
} Context_Call;

typedef struct _ContextAndStringA_Call
{
             REDIR_SCARDCONTEXT                          Context;
    [string] const char *                                sz;
} ContextAndStringA_Call;

typedef struct _ContextAndStringW_Call
{
             REDIR_SCARDCONTEXT                          Context;
    [string] const wchar_t *                             sz;
} ContextAndStringW_Call;


typedef struct _ContextAndTwoStringA_Call
{
             REDIR_SCARDCONTEXT                          Context;
    [string] const char *                                sz1;
    [string] const char *                                sz2;
} ContextAndTwoStringA_Call;

typedef struct _ContextAndTwoStringW_Call
{
             REDIR_SCARDCONTEXT                          Context;
    [string] const wchar_t *                             sz1;
    [string] const wchar_t *                             sz2;
} ContextAndTwoStringW_Call;

//
// Call specific packing
//
typedef struct _EstablishContext_Call
{
    unsigned long                               dwScope;
} EstablishContext_Call;

typedef struct _EstablishContext_Return
{
    long                                        ReturnCode;
    REDIR_SCARDCONTEXT                          Context;
} EstablishContext_Return;


typedef struct _ListReaderGroups_Call
{
    REDIR_SCARDCONTEXT                          Context;
    long                                        fmszGroupsIsNULL;
    unsigned long                               cchGroups;
} ListReaderGroups_Call;


typedef struct _ListReaders_Call
{
                               REDIR_SCARDCONTEXT   Context;
    [range(0, 65536)]          unsigned long        cBytes;
    [unique] [size_is(cBytes)] const byte          *mszGroups;
                            long                 fmszReadersIsNULL;
                               unsigned long        cchReaders;
} ListReaders_Call;

typedef struct _ReaderState_Common_Call
{
                      unsigned long             dwCurrentState;
                      unsigned long             dwEventState;
    [range(0, 36)]    unsigned long             cbAtr;
                      byte                      rgbAtr[36];
} ReaderState_Common_Call;

typedef struct _ReaderStateA
{
    [string] const char *                                szReader;
             ReaderState_Common_Call                     Common;
} ReaderStateA;

typedef struct _ReaderStateW
{
    [string] const wchar_t *                             szReader;
             ReaderState_Common_Call                     Common;
} ReaderStateW;

typedef struct _ReaderState_Return
{
                   unsigned long                dwCurrentState;
                   unsigned long                dwEventState;
    [range(0, 36)] unsigned long                cbAtr;
                   byte                         rgbAtr[36];
} ReaderState_Return;

typedef struct _GetStatusChangeA_Call
{
                        REDIR_SCARDCONTEXT       Context;
    [range(0, 65536)]   unsigned long            cBytes;
    [size_is(cBytes)]   const byte              *mszCards;
    [range(0, 10)]      unsigned long            cReaders;
    [size_is(cReaders)] ReaderStateA            *rgReaderStates;
} GetStatusChangeA_Call;

typedef struct _LocateCardsA_Call {
    REDIR_SCARDCONTEXT                 Context;
    [range(0, 65536)] unsigned long    cBytes;
    [size_is(cBytes)] const byte *     mszCards;
    [range(0, 10)] unsigned long       cReaders;
    [size_is(cReaders)] ReaderStateA * rgReaderStates;
} LocateCardsA_Call;


typedef struct _LocateCardsW_Call
{
                        REDIR_SCARDCONTEXT       Context;
    [range(0, 65536)]   unsigned long            cBytes;
    [size_is(cBytes)]   const byte              *mszCards;
    [range(0, 10)]      unsigned long            cReaders;
    [size_is(cReaders)] ReaderStateW            *rgReaderStates;
} LocateCardsW_Call;

typedef struct _LocateCards_ATRMask
{
    [range(0, 36)]      unsigned long            cbAtr;
                        byte                     rgbAtr[36];
                        byte                     rgbMask[36];
} LocateCards_ATRMask;

typedef struct _LocateCardsByATRA_Call
{
                        REDIR_SCARDCONTEXT      Context;
    [range(0, 1000)]    unsigned long           cAtrs;
    [size_is(cAtrs)]    LocateCards_ATRMask    *rgAtrMasks;
    [range(0, 10)]      unsigned long           cReaders;
    [size_is(cReaders)] ReaderStateA           *rgReaderStates;
} LocateCardsByATRA_Call;

typedef struct _LocateCardsByATRW_Call
{
                        REDIR_SCARDCONTEXT      Context;
    [range(0, 1000)]    unsigned long           cAtrs;
    [size_is(cAtrs)]    LocateCards_ATRMask    *rgAtrMasks;
    [range(0, 10)]      unsigned long           cReaders;
    [size_is(cReaders)] ReaderStateW           *rgReaderStates;
} LocateCardsByATRW_Call;

typedef struct _GetStatusChange_Return
{
                        long                     ReturnCode;
    [range(0, 10)]      unsigned long            cReaders;
    [size_is(cReaders)] ReaderState_Return      *rgReaderStates;
} LocateCards_Return, GetStatusChange_Return;

typedef struct _GetStatusChangeW_Call
{
                        REDIR_SCARDCONTEXT      Context;
                        unsigned long           dwTimeOut;
    [range(0, 11)]      unsigned long           cReaders;
    [size_is(cReaders)] ReaderStateW           *rgReaderStates;
} GetStatusChangeW_Call;

typedef struct _Connect_Common
{
    REDIR_SCARDCONTEXT                       Context;
    unsigned long                            dwShareMode;
    unsigned long                            dwPreferredProtocols;
} Connect_Common;

typedef struct _ConnectA_Call
{
    [string] const char *                                szReader;
             Connect_Common                              Common;
} ConnectA_Call;

typedef struct _ConnectW_Call
{
    [string] const wchar_t *                             szReader;
             Connect_Common                              Common;
} ConnectW_Call;

typedef struct _Connect_Return
{
    long                                        ReturnCode;
    REDIR_SCARDHANDLE                           hCard;
    unsigned long                               dwActiveProtocol;
} Connect_Return;

typedef struct _Reconnect_Call
{
    REDIR_SCARDHANDLE                         hCard;
    unsigned long                             dwShareMode;
    unsigned long                             dwPreferredProtocols;
    unsigned long                             dwInitialization;
} Reconnect_Call;

typedef struct Reconnect_Return
{
    long                                        ReturnCode;
    unsigned long                               dwActiveProtocol;
} Reconnect_Return;


typedef struct _HCardAndDisposition_Call
{
    REDIR_SCARDHANDLE                           hCard;
    unsigned long                               dwDisposition;
} HCardAndDisposition_Call;


typedef struct _State_Call
{
    REDIR_SCARDHANDLE                           hCard;
    long                                        fpbAtrIsNULL;
    unsigned long                               cbAtrLen;
    // EDITOR'S NOTE: Can be 0xFFFFFFFF
} State_Call;

typedef struct _State_Return
{
                                    long                ReturnCode;
                                    unsigned long       dwState;
                                    unsigned long       dwProtocol;
    [range(0, 36)]                  unsigned long       cbAtrLen;   
    [unique] [size_is(cbAtrLen)]    byte               *rgAtr;
} State_Return;


typedef struct _Status_Call
{
    REDIR_SCARDHANDLE                       hCard;
    long                                    fmszReaderNamesIsNULL;
    unsigned long                           cchReaderLen;
    unsigned long                           cbAtrLen;
} Status_Call;
typedef struct _Status_Return
{
                                long            ReturnCode;
    [range(0, 65536)]           unsigned long   cBytes;
    [unique] [size_is(cBytes)]  byte           *mszReaderNames;
                                unsigned long   dwState;
                                unsigned long   dwProtocol;
                                byte            pbAtr[32];
    [range(0, 32)]        unsigned long   cbAtrLen;
} Status_Return;


typedef struct _SCardIO_Request
{
                                      unsigned long   dwProtocol;
    [range(0, 1024)]                  unsigned long   cbExtraBytes;   
    [unique] [size_is(cbExtraBytes)]  byte           *pbExtraBytes;
} SCardIO_Request;
typedef struct _Transmit_Call
{
                            REDIR_SCARDHANDLE   hCard;
                            SCardIO_Request     ioSendPci;
    [range(0, 66560)]       unsigned long       cbSendLength;
    [size_is(cbSendLength)] const byte         *pbSendBuffer;
    [unique]                SCardIO_Request    *pioRecvPci;
                            long                fpbRecvBufferIsNULL;
                            unsigned long       cbRecvLength;
} Transmit_Call;
typedef struct _Transmit_Return
{
                                     long             ReturnCode;
    [unique]                         SCardIO_Request *pioRecvPci;
    [range(0, 66560)]                unsigned long    cbRecvLength;
    [unique] [size_is(cbRecvLength)] byte            *pbRecvBuffer;
} Transmit_Return;

typedef struct _GetTransmitCount_Call
{
    REDIR_SCARDHANDLE   hCard;
} GetTransmitCount_Call;

typedef struct _GetTransmitCount_Return
{
    long                ReturnCode;
    unsigned long       cTransmitCount;
} GetTransmitCount_Return;

typedef struct _Control_Call
{
                                 REDIR_SCARDHANDLE  hCard;
                                 unsigned long      dwControlCode;
    [range(0, 66560)]            unsigned long      cbInBufferSize;
    [unique] [size_is(cbInBufferSize)]  const byte  *pvInBuffer;
                                 long     fpvOutBufferIsNULL;
                                 unsigned long      cbOutBufferSize;
} Control_Call;

typedef struct _Control_Return
{
                                  long           ReturnCode;
    [range(0, 66560)]             unsigned long  cbOutBufferSize;
    [unique] [size_is(cbOutBufferSize)] byte     *pvOutBuffer;
} Control_Return;

typedef struct _GetAttrib_Call
{
    REDIR_SCARDHANDLE                  hCard;
    unsigned long                      dwAttrId;
    long                               fpbAttrIsNULL;
    unsigned long                      cbAttrLen;
} GetAttrib_Call;

typedef struct _GetAttrib_Return
{
                                    long                ReturnCode;
    [range(0, 65536)]               unsigned long       cbAttrLen;
    [unique] [size_is(cbAttrLen)]   byte               *pbAttr;
} GetAttrib_Return;

typedef struct _SetAttrib_Call
{
                            REDIR_SCARDHANDLE     hCard;
                            unsigned long         dwAttrId;
    [range(0, 65536)]       unsigned long         cbAttrLen;
    [size_is(cbAttrLen)]    const byte           *pbAttr;
} SetAttrib_Call;

typedef struct _ReadCache_Common
{
    REDIR_SCARDCONTEXT              Context;
    UUID                           *CardIdentifier;
    unsigned long                   FreshnessCounter;
    long                            fPbDataIsNULL;
    unsigned long                   cbDataLen;
} ReadCache_Common;

typedef struct _ReadCacheA_Call
{
    [string] char *                          szLookupName;
             ReadCache_Common                Common;
} ReadCacheA_Call;

typedef struct _ReadCacheW_Call
{
    [string] wchar_t *                       szLookupName;
             ReadCache_Common                Common;
} ReadCacheW_Call;

typedef struct _ReadCache_Return
{
                                    long           ReturnCode;
    [range(0, 65536)]               unsigned long  cbDataLen;
    [unique] [size_is(cbDataLen)]   byte          *pbData;
} ReadCache_Return;

typedef struct _WriteCache_Common
{
                           REDIR_SCARDCONTEXT  Context;
                           UUID               *CardIdentifier;
                           unsigned long       FreshnessCounter;
    [range(0, 65536)]      unsigned long       cbDataLen;
    [unique] [size_is(cbDataLen)]   byte      *pbData;
} WriteCache_Common;

typedef struct _WriteCacheA_Call
{
    [string] char *                szLookupName;
             WriteCache_Common     Common;
} WriteCacheA_Call;

typedef struct _WriteCacheW_Call
{
    [string] wchar_t *             szLookupName;
             WriteCache_Common     Common;
} WriteCacheW_Call;
}
 
Show:
© 2014 Microsoft