📄 winsmcrd.pas
字号:
{******************************************************************}
{ }
{ Borland Delphi Runtime Library }
{ PCSC interface unit }
{ }
{ Portions created by Microsoft are }
{ Copyright (C) 1996 Microsoft Corporation. }
{ All Rights Reserved. }
{ }
{ The original file is: WinSmCrd.h }
{ The original Pascal code is: WinSmCrd.pas }
{ The initial developer of the Pascal code is Chris Dickerson }
{ (chrisd@tsc.com). }
{ }
{ Obtained through: }
{ }
{ Joint Endeavour of Delphi Innovators (Project JEDI) }
{ }
{ You may retrieve the latest version of this file at the Project }
{ JEDI home page, located at http://delphi-jedi.org }
{ }
{ The contents of this file are used with permission, subject to }
{ the Mozilla Public License Version 1.1 (the "License"); you may }
{ not use this file except in compliance with the License. You may }
{ obtain a copy of the License at }
{ http://www.mozilla.org/MPL/MPL-1.1.html }
{ }
{ Software distributed under the License is distributed on an }
{ "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or }
{ implied. See the License for the specific language governing }
{ rights and limitations under the License. }
{ }
{******************************************************************}
unit WinSmCrd;
interface
uses
Windows;
(*
Copyright (c) 1996 - 1999 Microsoft Corporation
Module Name:
winsmcrd.h
Abstract:
Smart Card class/port IOCTL codes. This file is required for all code
user mode and kernel mode, using Smart Card IOCTL's, defines,
data structures
Revision History:
*)
(*
#ifdef _WINSCARD_H_
typedef DWORD ULONG;
typedef WORD UWORD;
typedef BYTE UCHAR;
#else
typedef ULONG DWORD;
// typedef UWORD WORD;
typedef UCHAR BYTE;
#endif *)
const
FILE_DEVICE_SMARTCARD = $00000031;
{$EXTERNALSYM FILE_DEVICE_SMARTCARD}
//
// Various constants
//
SCARD_ATR_LENGTH = 33; { ISO 7816-3 spec. }
{$EXTERNALSYM SCARD_ATR_LENGTH}
//
///////////////////////////////////////////////////////////////////////////////
//
// Protocol Flag definitions
//
SCARD_PROTOCOL_UNDEFINED = $00000000; // There is no active protocol.
{$EXTERNALSYM SCARD_PROTOCOL_UNDEFINED}
SCARD_PROTOCOL_T0 = $00000001; // T=0 is the active protocol.
{$EXTERNALSYM SCARD_PROTOCOL_T0}
SCARD_PROTOCOL_T1 = $00000002; // T=1 is the active protocol.
{$EXTERNALSYM SCARD_PROTOCOL_T1}
SCARD_PROTOCOL_RAW = $00010000; // Raw is the active protocol.
{$EXTERNALSYM SCARD_PROTOCOL_RAW}
//
// This is the mask of ISO defined transmission protocols
//
SCARD_PROTOCOL_Tx: LongInt = SCARD_PROTOCOL_T0 or SCARD_PROTOCOL_T1;
{$EXTERNALSYM SCARD_PROTOCOL_Tx}
//
// Use the default transmission parameters / card clock freq.
//
SCARD_PROTOCOL_DEFAULT = $80000000;
{$EXTERNALSYM SCARD_PROTOCOL_DEFAULT}
//
// Use optimal transmission parameters / card clock freq.
// Since using the optimal parameters is the default case no bit is defined to be 1
//
SCARD_PROTOCOL_OPTIMAL = $00000000;
{$EXTERNALSYM SCARD_PROTOCOL_OPTIMAL}
//
// Ioctl parameters 1 for IOCTL_SMARTCARD_POWER
//
SCARD_POWER_DOWN = 0; // Power down the card.
{$EXTERNALSYM SCARD_POWER_DOWN}
SCARD_COLD_RESET = 1; // Cycle power and reset the card.
{$EXTERNALSYM SCARD_COLD_RESET}
SCARD_WARM_RESET = 2; // Force a reset on the card.
{$EXTERNALSYM SCARD_WARM_RESET}
//
///////////////////////////////////////////////////////////////////////////////
//
// Reader Action IOCTLs
//
function SCARD_CTL_CODE(code: Integer): DWORD;
{$EXTERNALSYM SCARD_CTL_CODE}
function IOCTL_SMARTCARD_POWER: DWORD;
{$EXTERNALSYM IOCTL_SMARTCARD_POWER}
function IOCTL_SMARTCARD_GET_ATTRIBUTE: DWORD;
{$EXTERNALSYM IOCTL_SMARTCARD_GET_ATTRIBUTE}
function IOCTL_SMARTCARD_SET_ATTRIBUTE: DWORD;
{$EXTERNALSYM IOCTL_SMARTCARD_SET_ATTRIBUTE}
function IOCTL_SMARTCARD_CONFISCATE: DWORD;
{$EXTERNALSYM IOCTL_SMARTCARD_CONFISCATE}
function IOCTL_SMARTCARD_TRANSMIT: DWORD;
{$EXTERNALSYM IOCTL_SMARTCARD_TRANSMIT}
function IOCTL_SMARTCARD_EJECT: DWORD;
{$EXTERNALSYM IOCTL_SMARTCARD_EJECT}
function IOCTL_SMARTCARD_SWALLOW: DWORD;
{$EXTERNALSYM IOCTL_SMARTCARD_SWALLOW}
function IOCTL_SMARTCARD_IS_PRESENT: DWORD;
{$EXTERNALSYM IOCTL_SMARTCARD_IS_PRESENT}
function IOCTL_SMARTCARD_IS_ABSENT: DWORD;
{$EXTERNALSYM IOCTL_SMARTCARD_IS_ABSENT}
function IOCTL_SMARTCARD_SET_PROTOCOL: DWORD;
{$EXTERNALSYM IOCTL_SMARTCARD_SET_PROTOCOL}
function IOCTL_SMARTCARD_GET_STATE: DWORD;
{$EXTERNALSYM IOCTL_SMARTCARD_GET_STATE}
function IOCTL_SMARTCARD_GET_LAST_ERROR: DWORD;
{$EXTERNALSYM IOCTL_SMARTCARD_GET_LAST_ERROR}
function IOCTL_SMARTCARD_GET_PERF_CNTR: DWORD;
{$EXTERNALSYM IOCTL_SMARTCARD_GET_PERF_CNTR}
//
///////////////////////////////////////////////////////////////////////////////
//
// Tags for requesting card and reader attributes
//
const
MAXIMUM_ATTR_STRING_LENGTH = 32; // Nothing bigger than this from getAttr
{$EXTERNALSYM MAXIMUM_ATTR_STRING_LENGTH}
MAXIMUM_SMARTCARD_READERS = 10; // Limit the readers on the system
{$EXTERNALSYM MAXIMUM_SMARTCARD_READERS}
function SCARD_ATTR_VALUE(ulClass, ulTag: ULONG): ULONG;
{$EXTERNALSYM SCARD_ATTR_VALUE}
const
SCARD_CLASS_VENDOR_INFO = 1; // Vendor information definitions
{$EXTERNALSYM SCARD_CLASS_VENDOR_INFO}
SCARD_CLASS_COMMUNICATIONS = 2; // Communication definitions
{$EXTERNALSYM SCARD_CLASS_COMMUNICATIONS}
SCARD_CLASS_PROTOCOL = 3; // Protocol definitions
{$EXTERNALSYM SCARD_CLASS_PROTOCOL}
SCARD_CLASS_POWER_MGMT = 4; // Power Management definitions
{$EXTERNALSYM SCARD_CLASS_POWER_MGMT}
SCARD_CLASS_SECURITY = 5; // Security Assurance definitions
{$EXTERNALSYM SCARD_CLASS_SECURITY}
SCARD_CLASS_MECHANICAL = 6; // Mechanical characteristic definitions
{$EXTERNALSYM SCARD_CLASS_MECHANICAL}
SCARD_CLASS_VENDOR_DEFINED = 7; // Vendor specific definitions
{$EXTERNALSYM SCARD_CLASS_VENDOR_DEFINED}
SCARD_CLASS_IFD_PROTOCOL = 8; // Interface Device Protocol options
{$EXTERNALSYM SCARD_CLASS_IFD_PROTOCOL}
SCARD_CLASS_ICC_STATE = 9; // ICC State specific definitions
{$EXTERNALSYM SCARD_CLASS_ICC_STATE}
SCARD_CLASS_PERF = $7ffe; // performace counters
{$EXTERNALSYM SCARD_CLASS_PERF}
SCARD_CLASS_SYSTEM = $7fff; // System-specific definitions
{$EXTERNALSYM SCARD_CLASS_SYSTEM}
function SCARD_ATTR_VENDOR_NAME: ULONG;
{$EXTERNALSYM SCARD_ATTR_VENDOR_NAME}
function SCARD_ATTR_VENDOR_IFD_TYPE: ULONG;
{$EXTERNALSYM SCARD_ATTR_VENDOR_IFD_TYPE}
function SCARD_ATTR_VENDOR_IFD_VERSION: ULONG;
{$EXTERNALSYM SCARD_ATTR_VENDOR_IFD_VERSION}
function SCARD_ATTR_VENDOR_IFD_SERIAL_NO: ULONG;
{$EXTERNALSYM SCARD_ATTR_VENDOR_IFD_SERIAL_NO}
function SCARD_ATTR_CHANNEL_ID: ULONG;
{$EXTERNALSYM SCARD_ATTR_CHANNEL_ID}
function SCARD_ATTR_PROTOCOL_TYPES: ULONG;
{$EXTERNALSYM SCARD_ATTR_PROTOCOL_TYPES}
function SCARD_ATTR_DEFAULT_CLK: ULONG;
{$EXTERNALSYM SCARD_ATTR_DEFAULT_CLK}
function SCARD_ATTR_MAX_CLK: ULONG;
{$EXTERNALSYM SCARD_ATTR_MAX_CLK}
function SCARD_ATTR_DEFAULT_DATA_RATE: ULONG;
{$EXTERNALSYM SCARD_ATTR_DEFAULT_DATA_RATE}
function SCARD_ATTR_MAX_DATA_RATE: ULONG;
{$EXTERNALSYM SCARD_ATTR_MAX_DATA_RATE}
function SCARD_ATTR_MAX_IFSD: ULONG;
{$EXTERNALSYM SCARD_ATTR_MAX_IFSD}
function SCARD_ATTR_POWER_MGMT_SUPPORT: ULONG;
{$EXTERNALSYM SCARD_ATTR_POWER_MGMT_SUPPORT}
function SCARD_ATTR_USER_TO_CARD_AUTH_DEVICE: ULONG;
{$EXTERNALSYM SCARD_ATTR_USER_TO_CARD_AUTH_DEVICE}
function SCARD_ATTR_USER_AUTH_INPUT_DEVICE: ULONG;
{$EXTERNALSYM SCARD_ATTR_USER_AUTH_INPUT_DEVICE}
function SCARD_ATTR_CHARACTERISTICS: ULONG;
{$EXTERNALSYM SCARD_ATTR_CHARACTERISTICS}
function SCARD_ATTR_CURRENT_PROTOCOL_TYPE: ULONG;
{$EXTERNALSYM SCARD_ATTR_CURRENT_PROTOCOL_TYPE}
function SCARD_ATTR_CURRENT_CLK: ULONG;
{$EXTERNALSYM SCARD_ATTR_CURRENT_CLK}
function SCARD_ATTR_CURRENT_F: ULONG;
{$EXTERNALSYM SCARD_ATTR_CURRENT_F}
function SCARD_ATTR_CURRENT_D: ULONG;
{$EXTERNALSYM SCARD_ATTR_CURRENT_D}
function SCARD_ATTR_CURRENT_N: ULONG;
{$EXTERNALSYM SCARD_ATTR_CURRENT_N}
function SCARD_ATTR_CURRENT_W: ULONG;
{$EXTERNALSYM SCARD_ATTR_CURRENT_W}
function SCARD_ATTR_CURRENT_IFSC: ULONG;
{$EXTERNALSYM SCARD_ATTR_CURRENT_IFSC}
function SCARD_ATTR_CURRENT_IFSD: ULONG;
{$EXTERNALSYM SCARD_ATTR_CURRENT_IFSD}
function SCARD_ATTR_CURRENT_BWT: ULONG;
{$EXTERNALSYM SCARD_ATTR_CURRENT_BWT}
function SCARD_ATTR_CURRENT_CWT: ULONG;
{$EXTERNALSYM SCARD_ATTR_CURRENT_CWT}
function SCARD_ATTR_CURRENT_EBC_ENCODING: ULONG;
{$EXTERNALSYM SCARD_ATTR_CURRENT_EBC_ENCODING}
function SCARD_ATTR_EXTENDED_BWT: ULONG;
{$EXTERNALSYM SCARD_ATTR_EXTENDED_BWT}
function SCARD_ATTR_ICC_PRESENCE: ULONG;
{$EXTERNALSYM SCARD_ATTR_ICC_PRESENCE}
function SCARD_ATTR_ICC_INTERFACE_STATUS: ULONG;
{$EXTERNALSYM SCARD_ATTR_ICC_INTERFACE_STATUS}
function SCARD_ATTR_CURRENT_IO_STATE: ULONG;
{$EXTERNALSYM SCARD_ATTR_CURRENT_IO_STATE}
function SCARD_ATTR_ATR_STRING: ULONG;
{$EXTERNALSYM SCARD_ATTR_ATR_STRING}
function SCARD_ATTR_ICC_TYPE_PER_ATR: ULONG;
{$EXTERNALSYM SCARD_ATTR_ICC_TYPE_PER_ATR}
function SCARD_ATTR_ESC_RESET: ULONG;
{$EXTERNALSYM SCARD_ATTR_ESC_RESET}
function SCARD_ATTR_ESC_CANCEL: ULONG;
{$EXTERNALSYM SCARD_ATTR_ESC_CANCEL}
function SCARD_ATTR_ESC_AUTHREQUEST: ULONG;
{$EXTERNALSYM SCARD_ATTR_ESC_AUTHREQUEST}
function SCARD_ATTR_MAXINPUT: ULONG;
{$EXTERNALSYM SCARD_ATTR_MAXINPUT}
function SCARD_ATTR_DEVICE_UNIT: ULONG;
{$EXTERNALSYM SCARD_ATTR_DEVICE_UNIT}
function SCARD_ATTR_DEVICE_IN_USE: ULONG;
{$EXTERNALSYM SCARD_ATTR_DEVICE_IN_USE}
function SCARD_ATTR_DEVICE_FRIENDLY_NAME_W: ULONG;
{$EXTERNALSYM SCARD_ATTR_DEVICE_FRIENDLY_NAME_W}
function SCARD_ATTR_DEVICE_SYSTEM_NAME_W: ULONG;
{$EXTERNALSYM SCARD_ATTR_DEVICE_SYSTEM_NAME_W}
function SCARD_ATTR_DEVICE_FRIENDLY_NAME_A: ULONG;
{$EXTERNALSYM SCARD_ATTR_DEVICE_FRIENDLY_NAME_A}
function SCARD_ATTR_DEVICE_SYSTEM_NAME_A: ULONG;
{$EXTERNALSYM SCARD_ATTR_DEVICE_SYSTEM_NAME_A}
function SCARD_ATTR_SUPRESS_T1_IFS_REQUEST: ULONG;
{$EXTERNALSYM SCARD_ATTR_SUPRESS_T1_IFS_REQUEST}
function SCARD_PERF_NUM_TRANSMISSIONS: ULONG;
{$EXTERNALSYM SCARD_PERF_NUM_TRANSMISSIONS}
function SCARD_PERF_BYTES_TRANSMITTED: ULONG;
{$EXTERNALSYM SCARD_PERF_BYTES_TRANSMITTED}
function SCARD_PERF_TRANSMISSION_TIME: ULONG;
{$EXTERNALSYM SCARD_PERF_TRANSMISSION_TIME}
//
// T=0 Protocol Defines
//
const
SCARD_T0_HEADER_LENGTH = 7;
{$EXTERNALSYM SCARD_T0_HEADER_LENGTH}
SCARD_T0_CMD_LENGTH = 5;
{$EXTERNALSYM SCARD_T0_CMD_LENGTH}
//
// T=1 Protocol Defines
//
SCARD_T1_PROLOGUE_LENGTH = 3;
{$EXTERNALSYM SCARD_T1_PROLOGUE_LENGTH}
SCARD_T1_EPILOGUE_LENGTH = 2;
{$EXTERNALSYM SCARD_T1_EPILOGUE_LENGTH}
SCARD_T1_MAX_IFS = 254;
{$EXTERNALSYM SCARD_T1_MAX_IFS}
//
///////////////////////////////////////////////////////////////////////////////
//
// Reader states
//
SCARD_UNKNOWN = 0; // This value implies the driver is unaware
{$EXTERNALSYM SCARD_UNKNOWN} // of the current state of the reader.
SCARD_ABSENT = 1; // This value implies there is no card in
{$EXTERNALSYM SCARD_ABSENT} // the reader.
SCARD_PRESENT = 2; // This value implies there is a card is
{$EXTERNALSYM SCARD_PRESENT} // present in the reader, but that it has
// not been moved into position for use.
SCARD_SWALLOWED = 3; // This value implies there is a card in the
{$EXTERNALSYM SCARD_SWALLOWED} // reader in position for use. The card is
// not powered.
SCARD_POWERED = 4; // This value implies there is power is
{$EXTERNALSYM SCARD_POWERED} // being provided to the card, but the
// Reader Driver is unaware of the mode of
// the card.
SCARD_NEGOTIABLE = 5; // This value implies the card has been
{$EXTERNALSYM SCARD_NEGOTIABLE} // reset and is awaiting PTS negotiation.
SCARD_SPECIFIC = 6; // This value implies the card has been
{$EXTERNALSYM SCARD_SPECIFIC} // reset and specific communication
// protocols have been established.
////////////////////////////////////////////////////////////////////////////////
//
// I/O Services
//
// The following services provide access to the I/O capabilities of the
// reader drivers. Services of the Smart Card are requested by placing the
// following structure into the protocol buffer:
//
type
PSCARD_IO_REQUEST = ^SCARD_IO_REQUEST;
{$EXTERNALSYM PSCARD_IO_REQUEST}
SCARD_IO_REQUEST = record
dwProtocol: DWORD; { Protocol identifier }
dbPciLength: DWORD; { Protocol Control Information Length }
end;
{$EXTERNALSYM SCARD_IO_REQUEST}
//
// T=0 protocol services.
//
type
PSCARD_T0_COMMAND = ^SCARD_T0_COMMAND;
{$EXTERNALSYM PSCARD_T0_COMMAND}
SCARD_T0_COMMAND = record
bCla: Byte; // The instruction class
bIns: Byte; // The instruction code within the instruction class
bP1: Byte;
bP2: Byte; // Parameters to the instruction
bP3: Byte; // Size of I/O Transfer
end;
{$EXTERNALSYM SCARD_T0_COMMAND}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -