📄 winsmcrd.pas
字号:
PSCARD_T0_REQUEST = ^SCARD_T0_REQUEST;
{$EXTERNALSYM PSCARD_T0_REQUEST}
SCARD_T0_REQUEST = record
ioRequest: SCARD_IO_REQUEST;
bSw1: Byte;
bSw2: Byte; // Return codes from the instruction
case Integer of
0: (CmdBytes: SCARD_T0_COMMAND);
1: (rgbHeader: array[0..4] of Byte);
end;
{$EXTERNALSYM SCARD_T0_REQUEST}
//
// T=1 Protocol Services
//
type
PSCARD_T1_REQUEST = ^SCARD_T1_REQUEST;
{$EXTERNALSYM PSCARD_T1_REQUEST}
SCARD_T1_REQUEST = record
ioRequest: SCARD_IO_REQUEST;
end;
{$EXTERNALSYM SCARD_T1_REQUEST}
//
////////////////////////////////////////////////////////////////////////////////
//
// Driver attribute flags
//
const
SCARD_READER_SWALLOWS = $00000001; // Reader has a card swallowing
{$EXTERNALSYM SCARD_READER_SWALLOWS} // mechanism.
SCARD_READER_EJECTS = $00000002; // Reader has a card ejection
{$EXTERNALSYM SCARD_READER_EJECTS} // mechanism.
SCARD_READER_CONFISCATES = $00000004; // Reader has a card capture
{$EXTERNALSYM SCARD_READER_CONFISCATES} // mechanism.
//
///////////////////////////////////////////////////////////////////////////////
//
// Type of reader
//
const
SCARD_READER_TYPE_SERIAL = $01;
{$EXTERNALSYM SCARD_READER_TYPE_SERIAL}
SCARD_READER_TYPE_PARALELL = $02;
{$EXTERNALSYM SCARD_READER_TYPE_PARALELL}
SCARD_READER_TYPE_KEYBOARD = $04;
{$EXTERNALSYM SCARD_READER_TYPE_KEYBOARD}
SCARD_READER_TYPE_SCSI = $08;
{$EXTERNALSYM SCARD_READER_TYPE_SCSI}
SCARD_READER_TYPE_IDE = $10;
{$EXTERNALSYM SCARD_READER_TYPE_IDE}
SCARD_READER_TYPE_USB = $20;
{$EXTERNALSYM SCARD_READER_TYPE_USB}
SCARD_READER_TYPE_PCMCIA = $40;
{$EXTERNALSYM SCARD_READER_TYPE_PCMCIA}
SCARD_READER_TYPE_VENDOR = $F0;
{$EXTERNALSYM SCARD_READER_TYPE_VENDOR}
implementation
function CTL_CODE(DeviceType, Func, Method, Access: WORD): DWORD;
begin
Result := (DeviceType shl 16) or (Access shl 14) or (Func shl 2) or Method;
end;
function SCARD_CTL_CODE(code: Integer): DWORD;
begin
Result := CTL_CODE(FILE_DEVICE_SMARTCARD, code, 0{METHOD_BUFFERED}, 0{FILE_ANY_ACCESS});
end;
function IOCTL_SMARTCARD_POWER: DWORD;
begin
Result := SCARD_CTL_CODE(1);
end;
function IOCTL_SMARTCARD_GET_ATTRIBUTE: DWORD;
begin
Result := SCARD_CTL_CODE(2);
end;
function IOCTL_SMARTCARD_SET_ATTRIBUTE: DWORD;
begin
Result := SCARD_CTL_CODE(3);
end;
function IOCTL_SMARTCARD_CONFISCATE: DWORD;
begin
Result := SCARD_CTL_CODE(4);
end;
function IOCTL_SMARTCARD_TRANSMIT: DWORD;
begin
Result := SCARD_CTL_CODE(5);
end;
function IOCTL_SMARTCARD_EJECT: DWORD;
begin
Result := SCARD_CTL_CODE(6);
end;
function IOCTL_SMARTCARD_SWALLOW: DWORD;
begin
Result := SCARD_CTL_CODE(7);
end;
function IOCTL_SMARTCARD_IS_PRESENT: DWORD;
begin
Result := SCARD_CTL_CODE(10);
end;
function IOCTL_SMARTCARD_IS_ABSENT: DWORD;
begin
Result := SCARD_CTL_CODE(11);
end;
function IOCTL_SMARTCARD_SET_PROTOCOL: DWORD;
begin
Result := SCARD_CTL_CODE(12);
end;
function IOCTL_SMARTCARD_GET_STATE: DWORD;
begin
Result := SCARD_CTL_CODE(14);
end;
function IOCTL_SMARTCARD_GET_LAST_ERROR: DWORD;
begin
Result := SCARD_CTL_CODE(15);
end;
function IOCTL_SMARTCARD_GET_PERF_CNTR: DWORD;
begin
Result := SCARD_CTL_CODE(16);
end;
function SCARD_ATTR_VALUE(ulClass, ulTag: ULONG): ULONG;
begin
Result := (ulClass shl 16) or ulTag;
end;
function SCARD_ATTR_VENDOR_NAME: ULONG;
begin
Result := SCARD_ATTR_VALUE(SCARD_CLASS_VENDOR_INFO, $0100);
end;
function SCARD_ATTR_VENDOR_IFD_TYPE: ULONG;
begin
Result := SCARD_ATTR_VALUE(SCARD_CLASS_VENDOR_INFO, $0101);
end;
function SCARD_ATTR_VENDOR_IFD_VERSION: ULONG;
begin
Result := SCARD_ATTR_VALUE(SCARD_CLASS_VENDOR_INFO, $0102);
end;
function SCARD_ATTR_VENDOR_IFD_SERIAL_NO: ULONG;
begin
Result := SCARD_ATTR_VALUE(SCARD_CLASS_VENDOR_INFO, $0103);
end;
function SCARD_ATTR_CHANNEL_ID: ULONG;
begin
Result := SCARD_ATTR_VALUE(SCARD_CLASS_COMMUNICATIONS, $0110);
end;
function SCARD_ATTR_PROTOCOL_TYPES: ULONG;
begin
Result := SCARD_ATTR_VALUE(SCARD_CLASS_PROTOCOL, $0120);
end;
function SCARD_ATTR_DEFAULT_CLK: ULONG;
begin
Result := SCARD_ATTR_VALUE(SCARD_CLASS_PROTOCOL, $0121);
end;
function SCARD_ATTR_MAX_CLK: ULONG;
begin
Result := SCARD_ATTR_VALUE(SCARD_CLASS_PROTOCOL, $0122);
end;
function SCARD_ATTR_DEFAULT_DATA_RATE: ULONG;
begin
Result := SCARD_ATTR_VALUE(SCARD_CLASS_PROTOCOL, $0123);
end;
function SCARD_ATTR_MAX_DATA_RATE: ULONG;
begin
Result := SCARD_ATTR_VALUE(SCARD_CLASS_PROTOCOL, $0124);
end;
function SCARD_ATTR_MAX_IFSD: ULONG;
begin
Result := SCARD_ATTR_VALUE(SCARD_CLASS_PROTOCOL, $0125);
end;
function SCARD_ATTR_POWER_MGMT_SUPPORT: ULONG;
begin
Result := SCARD_ATTR_VALUE(SCARD_CLASS_POWER_MGMT, $0131);
end;
function SCARD_ATTR_USER_TO_CARD_AUTH_DEVICE: ULONG;
begin
Result := SCARD_ATTR_VALUE(SCARD_CLASS_SECURITY, $0140);
end;
function SCARD_ATTR_USER_AUTH_INPUT_DEVICE: ULONG;
begin
Result := SCARD_ATTR_VALUE(SCARD_CLASS_SECURITY, $0142);
end;
function SCARD_ATTR_CHARACTERISTICS: ULONG;
begin
Result := SCARD_ATTR_VALUE(SCARD_CLASS_MECHANICAL, $0150);
end;
function SCARD_ATTR_CURRENT_PROTOCOL_TYPE: ULONG;
begin
Result := SCARD_ATTR_VALUE(SCARD_CLASS_IFD_PROTOCOL, $0201);
end;
function SCARD_ATTR_CURRENT_CLK: ULONG;
begin
Result := SCARD_ATTR_VALUE(SCARD_CLASS_IFD_PROTOCOL, $0202);
end;
function SCARD_ATTR_CURRENT_F: ULONG;
begin
Result := SCARD_ATTR_VALUE(SCARD_CLASS_IFD_PROTOCOL, $0203);
end;
function SCARD_ATTR_CURRENT_D: ULONG;
begin
Result := SCARD_ATTR_VALUE(SCARD_CLASS_IFD_PROTOCOL, $0204);
end;
function SCARD_ATTR_CURRENT_N: ULONG;
begin
Result := SCARD_ATTR_VALUE(SCARD_CLASS_IFD_PROTOCOL, $0205);
end;
function SCARD_ATTR_CURRENT_W: ULONG;
begin
Result := SCARD_ATTR_VALUE(SCARD_CLASS_IFD_PROTOCOL, $0206);
end;
function SCARD_ATTR_CURRENT_IFSC: ULONG;
begin
Result := SCARD_ATTR_VALUE(SCARD_CLASS_IFD_PROTOCOL, $0207);
end;
function SCARD_ATTR_CURRENT_IFSD: ULONG;
begin
Result := SCARD_ATTR_VALUE(SCARD_CLASS_IFD_PROTOCOL, $0208);
end;
function SCARD_ATTR_CURRENT_BWT: ULONG;
begin
Result := SCARD_ATTR_VALUE(SCARD_CLASS_IFD_PROTOCOL, $0209);
end;
function SCARD_ATTR_CURRENT_CWT: ULONG;
begin
Result := SCARD_ATTR_VALUE(SCARD_CLASS_IFD_PROTOCOL, $020a);
end;
function SCARD_ATTR_CURRENT_EBC_ENCODING: ULONG;
begin
Result := SCARD_ATTR_VALUE(SCARD_CLASS_IFD_PROTOCOL, $020b);
end;
function SCARD_ATTR_EXTENDED_BWT: ULONG;
begin
Result := SCARD_ATTR_VALUE(SCARD_CLASS_IFD_PROTOCOL, $020c);
end;
function SCARD_ATTR_ICC_PRESENCE: ULONG;
begin
Result := SCARD_ATTR_VALUE(SCARD_CLASS_ICC_STATE, $0300);
end;
function SCARD_ATTR_ICC_INTERFACE_STATUS: ULONG;
begin
Result := SCARD_ATTR_VALUE(SCARD_CLASS_ICC_STATE, $0301);
end;
function SCARD_ATTR_CURRENT_IO_STATE: ULONG;
begin
Result := SCARD_ATTR_VALUE(SCARD_CLASS_ICC_STATE, $0302) ;
end;
function SCARD_ATTR_ATR_STRING: ULONG;
begin
Result := SCARD_ATTR_VALUE(SCARD_CLASS_ICC_STATE, $0303);
end;
function SCARD_ATTR_ICC_TYPE_PER_ATR: ULONG;
begin
Result := SCARD_ATTR_VALUE(SCARD_CLASS_ICC_STATE, $0304);
end;
function SCARD_ATTR_ESC_RESET: ULONG;
begin
Result := SCARD_ATTR_VALUE(SCARD_CLASS_VENDOR_DEFINED, $A000);
end;
function SCARD_ATTR_ESC_CANCEL: ULONG;
begin
Result := SCARD_ATTR_VALUE(SCARD_CLASS_VENDOR_DEFINED, $A003);
end;
function SCARD_ATTR_ESC_AUTHREQUEST: ULONG;
begin
Result := SCARD_ATTR_VALUE(SCARD_CLASS_VENDOR_DEFINED, $A005);
end;
function SCARD_ATTR_MAXINPUT: ULONG;
begin
Result := SCARD_ATTR_VALUE(SCARD_CLASS_VENDOR_DEFINED, $A007);
end;
function SCARD_ATTR_DEVICE_UNIT: ULONG;
begin
Result := SCARD_ATTR_VALUE(SCARD_CLASS_SYSTEM, $0001);
end;
function SCARD_ATTR_DEVICE_IN_USE: ULONG;
begin
Result := SCARD_ATTR_VALUE(SCARD_CLASS_SYSTEM, $0002);
end;
function SCARD_ATTR_DEVICE_FRIENDLY_NAME_A: ULONG;
begin
Result := SCARD_ATTR_VALUE(SCARD_CLASS_SYSTEM, $0003);
end;
function SCARD_ATTR_DEVICE_SYSTEM_NAME_A: ULONG;
begin
Result := SCARD_ATTR_VALUE(SCARD_CLASS_SYSTEM, $0004);
end;
function SCARD_ATTR_DEVICE_FRIENDLY_NAME_W: ULONG;
begin
Result := SCARD_ATTR_VALUE(SCARD_CLASS_SYSTEM, $0005);
end;
function SCARD_ATTR_DEVICE_SYSTEM_NAME_W: ULONG;
begin
Result := SCARD_ATTR_VALUE(SCARD_CLASS_SYSTEM, $0006);
end;
function SCARD_ATTR_SUPRESS_T1_IFS_REQUEST: ULONG;
begin
Result := SCARD_ATTR_VALUE(SCARD_CLASS_SYSTEM, $0007);
end;
function SCARD_PERF_NUM_TRANSMISSIONS: ULONG;
begin
Result := SCARD_ATTR_VALUE(SCARD_CLASS_PERF, $0001);
end;
function SCARD_PERF_BYTES_TRANSMITTED: ULONG;
begin
Result := SCARD_ATTR_VALUE(SCARD_CLASS_PERF, $0002);
end;
function SCARD_PERF_TRANSMISSION_TIME: ULONG;
begin
Result := SCARD_ATTR_VALUE(SCARD_CLASS_PERF, $0003);
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -