/*++ Copyright (c) 1998 Gemplus Development Name: gprcmd.h Description: This module holds the prototypes of the functions from gprcmd.c Environment: Kernel Mode Revision History: 06/04/99: (Y. Nadeau + M. Veillette) - Code Review 06/05/98: V1.00.003 (P. Plouidy) - Power management for NT5 10/02/98: V1.00.002 (P. Plouidy) - Plug and Play for NT5 03/07/97: V1.00.001 (P. Plouidy) - Start of development. --*/ // Include // - smclib.h: smart card library definitions. #include #ifndef _GPRCMD_ #define _GPRCMD_ // // To give possibility for recognition of driver // #define ATTR_MANUFACTURER_NAME "Gemplus" #define ATTR_ORIGINAL_FILENAME "Gpr400.sys" #define ATTR_LENGTH 32 // // - SCARD_ATTR_SPEC_BAUD_RATE is the Tag for the speed in use between the // system and the reader. // - SCARD_ATTR_SPEC_CMD_TIMEOUT is the Tag for the value of the Cmd Timeout. // - SCARD_ATTR_SPEC_POWER_TIMEOUT is the Tag for the value of the Power // Timeout. // - SCARD_ATTR_SPEC_APDU_TIMEOUT is the Tag to access at the value of the APDU // Timeout. // #define SCARD_ATTR_SPEC_BAUD_RATE SCARD_ATTR_VALUE(SCARD_CLASS_VENDOR_DEFINED,0x0180) #define SCARD_ATTR_SPEC_CMD_TIMEOUT SCARD_ATTR_VALUE(SCARD_CLASS_VENDOR_DEFINED,0x0181) #define SCARD_ATTR_SPEC_POWER_TIMEOUT SCARD_ATTR_VALUE(SCARD_CLASS_VENDOR_DEFINED,0x0182) #define SCARD_ATTR_SPEC_APDU_TIMEOUT SCARD_ATTR_VALUE(SCARD_CLASS_VENDOR_DEFINED,0x0183) #define SCARD_ATTR_MANUFACTURER_NAME SCARD_ATTR_VALUE(SCARD_CLASS_VENDOR_DEFINED,0x0190) #define SCARD_ATTR_ORIGINAL_FILENAME SCARD_ATTR_VALUE(SCARD_CLASS_VENDOR_DEFINED,0x0191) // // - IOCTL_SMARTCARD_VENDOR_IFD_EXCHANGE defines a specific IOCTL for the Gemplus // Reader to exchange data with the reader without control of the driver. // - IOCTL_SMARTCARD_VENDOR_GET_ATTRIBUTE defines a specific IOCTL for the Gemplus // Reader to gets vendor attributes. // - IOCTL_SMARTCARD_VENDOR_SET_ATTRIBUTE defines a specific IOCTL for the Gemplus // Reader to sets vendor attributes. // #define IOCTL_SMARTCARD_VENDOR_IFD_EXCHANGE CTL_CODE(FILE_DEVICE_SMARTCARD,2048,0,0) #define IOCTL_SMARTCARD_VENDOR_GET_ATTRIBUTE CTL_CODE(FILE_DEVICE_SMARTCARD,2049,0,0) #define IOCTL_SMARTCARD_VENDOR_SET_ATTRIBUTE CTL_CODE(FILE_DEVICE_SMARTCARD,2050,0,0) // 2051 is reserved for Gcr420 keyboard reader. #define IOCTL_SMARTCARD_VENDOR_SWITCH_SPEED CTL_CODE(FILE_DEVICE_SMARTCARD,2052,0,0) #define LOWORD(l) ((USHORT)(l)) #define HIWORD(l) ((USHORT)(((UINT)(l)) >> 16)) #define LOBYTE(w) ((UCHAR)(w)) #define HIBYTE(w) ((UCHAR)(((USHORT)(w)) >> 8)) USHORT ATRLen ( UCHAR *ATR, USHORT MaxChar ); BOOLEAN NeedToSwitchWithoutPTS ( BYTE *ATR, DWORD LengthATR ); NTSTATUS ValidateDriver ( PSMARTCARD_EXTENSION pSmartcardExtension ); NTSTATUS Update ( PSMARTCARD_EXTENSION pSmartcardExtension, UCHAR Addr, UCHAR Value ); NTSTATUS UpdateORL ( PSMARTCARD_EXTENSION pSmartcardExtension, UCHAR Addr, UCHAR Value ); NTSTATUS T0toT1 ( PSMARTCARD_EXTENSION pSmartcardExtension ); NTSTATUS T1toT0 ( PSMARTCARD_EXTENSION pSmartcardExtension ); // // Icc Functions // // - IccColdReset // - IccWarmReset // - IccPowerDown // - IccIsoOutput // - IccIsoInput // - IccIsoT1 // NTSTATUS IccColdReset ( PSMARTCARD_EXTENSION SmartcardExtension ); NTSTATUS IccPowerDown ( PSMARTCARD_EXTENSION SmartcardExtension ); NTSTATUS IccIsoOutput ( PSMARTCARD_EXTENSION SmartcardExtension, const UCHAR Command[5], USHORT *RespLen, UCHAR RespBuff[] ); NTSTATUS IccIsoInput ( PSMARTCARD_EXTENSION SmartcardExtension, const UCHAR Command[5], const UCHAR Data[], USHORT *RespLen, UCHAR RespBuff[] ); NTSTATUS IccIsoT1 ( PSMARTCARD_EXTENSION SmartcardExtension, const USHORT CmdLen, const UCHAR Cmd[], USHORT *RspLen, UCHAR Rsp[] ); // // Ifd Functions // // - IfdReset // - IfdCheck // - IfdPowerDown // NTSTATUS IfdReset ( PSMARTCARD_EXTENSION SmartcardExtension ); NTSTATUS IfdCheck ( PSMARTCARD_EXTENSION SmartcardExtension ); NTSTATUS IfdPowerDown ( PSMARTCARD_EXTENSION SmartcardExtension ); NTSTATUS IfdConfig ( PSMARTCARD_EXTENSION pSmartcardExtension, UCHAR TA1 ); // // Driver callback Functions // // - GprCbReaderPower // - GprCbTransmit // - GprCbSetProtocol // - GprCbSetupCardTracking // - GprCbVendorIoctl // NTSTATUS GprCbReaderPower ( PSMARTCARD_EXTENSION SmartcardExtension ); NTSTATUS GprCbTransmit ( PSMARTCARD_EXTENSION SmartcardExtension ); NTSTATUS GprCbSetProtocol ( PSMARTCARD_EXTENSION SmartcardExtension ); NTSTATUS GprCbSetupCardTracking ( PSMARTCARD_EXTENSION SmartcardExtension ); NTSTATUS GprCbVendorIoctl ( PSMARTCARD_EXTENSION SmartcardExtension ); // Icc detection utilities // // - AskForCardPresence // NTSTATUS AskForCardPresence ( PSMARTCARD_EXTENSION SmartcardExtension ); // // Specific // // - SpecificTag // - SwitchSpeed // NTSTATUS SpecificTag ( PSMARTCARD_EXTENSION SmartcardExtension, DWORD IoControlCode, DWORD BufferInLen, BYTE *BufferIn, DWORD BufferOutLen, BYTE *BufferOut, DWORD *LengthOut ); NTSTATUS SwitchSpeed ( PSMARTCARD_EXTENSION SmartcardExtension, ULONG BufferInLen, PUCHAR BufferIn, ULONG BufferOutLen, PUCHAR BufferOut, PULONG LengthOut ); #endif