⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 winsmcrd.pas

📁 同方PC读卡器驱动
💻 PAS
📖 第 1 页 / 共 2 页
字号:
   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 + -