|
|
/*++
Copyright (C) Microsoft Corporation, 1999 - 1999
Module Name:
Conversion
Abstract:
This header file describes the format conversion services.
Author:
Doug Barlow (dbarlow) 6/21/1999
Remarks:
Notes:
--*/
#ifndef _CONVERSION_H_
#define _CONVERSION_H_
#include <winscard.h>
#include <scardlib.h>
#define APDU_EXTENDED_LENGTH 0x01 // Force an extended value for Lc and/or Le
#define APDU_MAXIMUM_LE 0x02 // Request the maximum Le value
#define APDU_REQNAD_VALID 0x04 // The Request NaD is valid.
#define APDU_RSPNAD_VALID 0x08 // The Response NaD is valid.
#define APDU_NO_GET_RESPONSE 0x10 // Don't do automatic Get Responses
#define APDU_ALTCLA_VALID 0x20 // The Alternate CLA is valid.
extern void ConstructRequest( IN BYTE bCla, IN BYTE bIns, IN BYTE bP1, IN BYTE bP2, IN CBuffer &bfData, IN WORD wLe, IN DWORD dwFlags, OUT CBuffer &bfApdu);
extern void ParseRequest( IN LPCBYTE pbApdu, IN DWORD cbApdu, OUT LPBYTE pbCla, OUT LPBYTE pbIns, OUT LPBYTE pbP1, OUT LPBYTE pbP2, OUT LPCBYTE *pbfData, OUT LPWORD pwLc, OUT LPWORD pwLe, OUT LPDWORD pdwFlags);
extern void ParseReply( IN CBuffer &bfApdu, OUT LPBYTE pbSW1, OUT LPBYTE pbSW2);
extern void MultiStringToSafeArray( IN LPCTSTR msz, IN OUT SAFEARRAY **pprgsz);
extern void GuidArrayToSafeArray( IN LPCGUID pGuids, IN DWORD cguids, IN OUT SAFEARRAY **pprgguids);
extern void SafeArrayToGuidArray( IN LPSAFEARRAY prgGuids, OUT CBuffer &bfGuids, OUT LPDWORD pcGuids);
extern void SafeArrayToGuidArray( IN LPSAFEARRAY prgGuids, OUT CBuffer &bfGuids, OUT LPDWORD pcGuids);
extern void SafeArrayToMultiString( IN LPSAFEARRAY prgsz, IN OUT CTextMultistring &msz);
extern void ApduToTpdu_T0( IN SCARDHANDLE hCard, IN const SCARD_IO_REQUEST *pPciRqst, IN LPCBYTE pbApdu, IN DWORD cbApdu, IN DWORD dwFlags, OUT CBuffer bfPciRsp, OUT CBuffer &bfReply, IN LPCBYTE pbAltCla);
extern void ApduToTpdu_T1( IN SCARDHANDLE hCard, IN const SCARD_IO_REQUEST *pPciRqst, IN LPCBYTE pbApdu, IN DWORD cbApdu, IN DWORD dwFlags, OUT CBuffer bfPciRsp, OUT CBuffer &bfReply);
extern LONG ByteBufferToBuffer( IN LPBYTEBUFFER pby, OUT CBuffer &bf);
extern LONG BufferToByteBuffer( IN CBuffer &bf, OUT LPBYTEBUFFER *ppby);
//
// NOTE
//
// The following inline routines assume a little endian architecture,
// and must be changed for other platforms.
//
inline WORD NetToLocal( IN LPCBYTE pb) { return (pb[0] << 8) + pb[1]; }
inline void LocalToNet( OUT LPBYTE pb, IN WORD w) { pb[0] = (BYTE)((w >> 8) & 0xff); pb[1] = (BYTE)(w & 0xff); }
inline BYTE LeastSignificantByte( IN WORD w) { return (BYTE)(w & 0xff); }
#endif // _CONVERSION_H_
|