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

📄 winscard.pas

📁 Delphi 用的PSCS控件即例子程序,本人稍作修改了例子程序
💻 PAS
📖 第 1 页 / 共 5 页
字号:
                             var pvOutBuffer: PByte; cbOutBufferSize: LongInt;
                             var pcbBytesReturned: LongInt): LongInt; stdcall;

   TSCardGetAttrib = function (hCard: LongInt; dwAttrId: LongInt; var pbAttr: PByte; var pcbAttrLen: LongInt): LongInt; stdcall;
{$ELSE}
   function SCardControl(hCard: LongInt; dwControlCode: LongInt; var pvInBuffer: PByte; cbInBufferSize: LongInt;
                         var pvOutBuffer: PByte; cbOutBufferSize: LongInt;
                         var pcbBytesReturned: LongInt): LongInt; stdcall;
   {$EXTERNALSYM SCardControl}

// CHANGED CHANGED CHANGED CHANGED CHANGED CHANGED CHANGED CHANGED CHANGED CHANGED CHANGED
// CHANGED CHANGED CHANGED CHANGED CHANGED CHANGED CHANGED CHANGED CHANGED CHANGED CHANGED

   function SCardGetAttrib(hCard: LongInt; dwAttrId: LongInt; pbAttr: PByte; pcbAttrLen: PDWord): LongInt; stdcall;
   {$EXTERNALSYM SCardGetAttrib}

// CHANGED CHANGED CHANGED CHANGED CHANGED CHANGED CHANGED CHANGED CHANGED CHANGED CHANGED
// CHANGED CHANGED CHANGED CHANGED CHANGED CHANGED CHANGED CHANGED CHANGED CHANGED CHANGED

{$ENDIF}

//
// NOTE:    The routine SCardGetAttrib's name differs from the PC/SC definition.
//          It should be:
//
//              extern WINSCARDAPI LONG WINAPI
//              SCardGetReaderCapabilities(
//                  IN SCARDHANDLE hCard,
//                  IN DWORD dwTag,
//                  OUT LPBYTE pbAttr,
//                  IN OUT LPDWORD pcbAttrLen);
//
//          Here's a work-around MACRO:
{$IFDEF WinSCard_DYNLINK}
type
   TSCardGetReaderCapabilities = TSCardGetAttrib;

   TSCardSetAttrib = function (hCard: LongInt; dwAttrId: LongInt; var pbAttr: PByte; cbAttrLen: LongInt): LongInt; stdcall;
{$ELSE}
   function SCardSetAttrib(hCard: LongInt; dwAttrId: LongInt; var pbAttr: PByte; cbAttrLen: LongInt): LongInt; stdcall;
   {$EXTERNALSYM SCardSetAttrib}
{$ENDIF}

//
// NOTE:    The routine SCardSetAttrib's name differs from the PC/SC definition.
//          It should be:
//
//              extern WINSCARDAPI LONG WINAPI
//              SCardSetReaderCapabilities(
//                  IN SCARDHANDLE hCard,
//                  IN DWORD dwTag,
//                  OUT LPBYTE pbAttr,
//                  IN OUT LPDWORD pcbAttrLen);
//
//          Here's a work-around MACRO:
{$IFDEF WinSCard_DYNLINK}
type
   TSCardSetReaderCapabilities = TSCardSetAttrib;
{$ENDIF}

//
////////////////////////////////////////////////////////////////////////////////
//
//  Smart Card Dialog definitions
//
//      The following section contains structures and  exported function
//      declarations for the Smart Card Common Dialog dialog.
//

// Defined constants
// Flags
const
   SC_DLG_MINIMAL_UI = $01;
   {$EXTERNALSYM SC_DLG_MINIMAL_UI}
   SC_DLG_NO_UI = $02;
   {$EXTERNALSYM SC_DLG_NO_UI}
   SC_DLG_FORCE_UI = $04;
   {$EXTERNALSYM SC_DLG_FORCE_UI}

   SCERR_NOCARDNAME = $4000;
   {$EXTERNALSYM SCERR_NOCARDNAME}
   SCERR_NOGUIDS = $8000;
   {$EXTERNALSYM SCERR_NOGUIDS}

type
   LPOCNCONNPROCA = function(hSCardContext: LongInt; hCard: LPStr; pvUserData: Pointer): DWORD; cdecl;
   {$EXTERNALSYM LPOCNCONNPROCA}
   LPOCNCONNPROCW = function(hSCardContext: LongInt; hCard: LPWStr; pvUserData: Pointer): DWORD; cdecl;
   {$EXTERNALSYM LPOCNCONNPROCW}
   {$IFDEF UNICODE}
      LPOCNCONNPROC = LPOCNCONNPROCW;
   {$ELSE}
      LPOCNCONNPROC = LPOCNCONNPROCA;
   {$ENDIF}
   {$EXTERNALSYM LPOCNCONNPROC}

   LPOCNCHKPROC = function(hContext: LongInt; hCard: LPStr; pvUserData: Pointer): Bool; cdecl;
   {$EXTERNALSYM LPOCNCHKPROC}
   LPOCNDSCPROC = procedure(hContext: LongInt; hCard: LPStr; pvUserData: Pointer); cdecl;
   {$EXTERNALSYM LPOCNDSCPROC}

//
// OPENCARD_SEARCH_CRITERIA: In order to specify a user-extended search,
// lpfnCheck must not be NULL.  Moreover, the connection to be made to the
// card before performing the callback must be indicated by either providing
// lpfnConnect and lpfnDisconnect OR by setting dwShareMode.
// If both the connection callbacks and dwShareMode are non-NULL, the callbacks
// will be used.
//

   POPENCARD_SEARCH_CRITERIAA = ^OPENCARD_SEARCH_CRITERIAA;
   {$EXTERNALSYM POPENCARD_SEARCH_CRITERIAA}
   LPOPENCARD_SEARCH_CRITERIAA = ^OPENCARD_SEARCH_CRITERIAA;
   {$EXTERNALSYM LPOPENCARD_SEARCH_CRITERIAA}
   OPENCARD_SEARCH_CRITERIAA = record
      dwStructSize: DWORD;
      lpstrGroupNames: LPSTR;        // OPTIONAL reader groups to include in
      nMaxGroupNames: DWORD;         //          search.  NULL defaults to
                                     //          SCard$DefaultReaders
      rgguidInterfaces: LPCGUID;     // OPTIONAL requested interfaces
      cguidInterfaces: DWORD;        //          supported by card's SSP
      lpstrCardNames: LPSTR;         // OPTIONAL requested card names; all cards w/
      nMaxCardNames: DWORD;          //          matching ATRs will be accepted
      lpfnCheck: LPOCNCHKPROC;       // OPTIONAL if NULL no user check will be performed.
      lpfnConnect: LPOCNCONNPROCA;   // OPTIONAL if lpfnConnect is provided,
      lpfnDisconnect: LPOCNDSCPROC;  //          lpfnDisconnect must also be set.
      pvUserData: Pointer;           // OPTIONAL parameter to callbacks
      dwShareMode: DWORD;            // OPTIONAL must be set if lpfnCheck is not null
      dwPreferredProtocols: DWORD;   // OPTIONAL
   end;
   {$EXTERNALSYM OPENCARD_SEARCH_CRITERIAA}

   POPENCARD_SEARCH_CRITERIAW = ^OPENCARD_SEARCH_CRITERIAW;
   {$EXTERNALSYM POPENCARD_SEARCH_CRITERIAW}
   LPOPENCARD_SEARCH_CRITERIAW = ^OPENCARD_SEARCH_CRITERIAW;
   {$EXTERNALSYM LPOPENCARD_SEARCH_CRITERIAW}
   OPENCARD_SEARCH_CRITERIAW = record
      dwStructSize: DWORD;
      lpstrGroupNames: LPWSTR;       // OPTIONAL reader groups to include in
      nMaxGroupNames: DWORD;         //          search.  NULL defaults to
                                     //          SCard$DefaultReaders
      rgguidInterfaces: LPCGUID;     // OPTIONAL requested interfaces
      cguidInterfaces: DWORD;        //          supported by card's SSP
      lpstrCardNames: LPWSTR;        // OPTIONAL requested card names; all cards w/
      nMaxCardNames: DWORD;          //          matching ATRs will be accepted
      lpfnCheck: LPOCNCHKPROC;       // OPTIONAL if NULL no user check will be performed.
      lpfnConnect: LPOCNCONNPROCA;   // OPTIONAL if lpfnConnect is provided,
      lpfnDisconnect: LPOCNDSCPROC;  //          lpfnDisconnect must also be set.
      pvUserData: Pointer;           // OPTIONAL parameter to callbacks
      dwShareMode: DWORD;            // OPTIONAL must be set if lpfnCheck is not null
      dwPreferredProtocols: DWORD;   // OPTIONAL
   end;
   {$EXTERNALSYM OPENCARD_SEARCH_CRITERIAW}

   {$IFDEF UNICODE}
      OPENCARD_SEARCH_CRITERIA = OPENCARD_SEARCH_CRITERIAW;
      POPENCARD_SEARCH_CRITERIA = POPENCARD_SEARCH_CRITERIAW;
      LPOPENCARD_SEARCH_CRITERIA = LPOPENCARD_SEARCH_CRITERIAW;
   {$ELSE}
      OPENCARD_SEARCH_CRITERIA = OPENCARD_SEARCH_CRITERIAA;
      POPENCARD_SEARCH_CRITERIA = POPENCARD_SEARCH_CRITERIAA;
      LPOPENCARD_SEARCH_CRITERIA = LPOPENCARD_SEARCH_CRITERIAA;
   {$ENDIF}
   {$EXTERNALSYM OPENCARD_SEARCH_CRITERIA}
   {$EXTERNALSYM POPENCARD_SEARCH_CRITERIA}
   {$EXTERNALSYM LPOPENCARD_SEARCH_CRITERIA}

//
// OPENCARDNAME_EX: used by SCardUIDlgSelectCard; replaces obsolete OPENCARDNAME
//
   POPENCARDNAME_EXA = ^OPENCARDNAME_EXA;
   {$EXTERNALSYM POPENCARDNAME_EXA}
   LPOPENCARDNAME_EXA = ^OPENCARDNAME_EXA;
   {$EXTERNALSYM LPOPENCARDNAME_EXA}
   OPENCARDNAME_EXA = record
      dwStructSize: DWORD;           // REQUIRED
      hSCardContext: SCARDCONTEXT;   // REQUIRED
      hwndOwner: HWND;               // OPTIONAL
      dwFlags: DWORD;                // OPTIONAL -- default is SC_DLG_MINIMAL_UI
      lpstrTitle: LPCSTR;            // OPTIONAL
      lpstrSearchDesc: LPCSTR;       // OPTIONAL (eg. "Please insert your <brandname> smart card.")
      hIcon: HICON;                  // OPTIONAL 32x32 icon for your brand insignia
      pOpenCardSearchCriteria: POPENCARD_SEARCH_CRITERIAA ; // OPTIONAL
      lpfnConnect: LPOCNCONNPROCA;   // OPTIONAL - performed on successful selection
      pvUserData: Pointer;           // OPTIONAL parameter to lpfnConnect
      dwShareMode: DWORD;            // OPTIONAL - if lpfnConnect is NULL, dwShareMode and
      dwPreferredProtocols: DWORD;   // OPTIONAL dwPreferredProtocols will be used to
                                     //          connect to the selected card
      lpstrRdr: LPSTR;               // REQUIRED [IN|OUT] Name of selected reader
      nMaxRdr: DWORD;                // REQUIRED [IN|OUT]
      lpstrCard: LPSTR;              // REQUIRED [IN|OUT] Name of selected card
      nMaxCard: DWORD;               // REQUIRED [IN|OUT]
      dwActiveProtocol: DWORD;       // [OUT] set only if dwShareMode not NULL
      hCardHandle: SCARDHANDLE;      // [OUT] set if a card connection was indicated
   end;
   {$EXTERNALSYM OPENCARDNAME_EXA}

   POPENCARDNAME_EXW = ^OPENCARDNAME_EXW;
   {$EXTERNALSYM POPENCARDNAME_EXW}
   LPOPENCARDNAME_EXW = ^OPENCARDNAME_EXW;
   {$EXTERNALSYM LPOPENCARDNAME_EXW}
   OPENCARDNAME_EXW = record
      dwStructSize: DWORD;           // REQUIRED
      hSCardContext: SCARDCONTEXT;   // REQUIRED
      hwndOwner: HWND;               // OPTIONAL
      dwFlags: DWORD;                // OPTIONAL -- default is SC_DLG_MINIMAL_UI
      lpstrTitle: LPCWSTR;           // OPTIONAL
      lpstrSearchDesc: LPCWSTR;      // OPTIONAL (eg. "Please insert your <brandname> smart card.")
      hIcon: HICON;                  // OPTIONAL 32x32 icon for your brand insignia
      pOpenCardSearchCriteria: POPENCARD_SEARCH_CRITERIAW ; // OPTIONAL
      lpfnConnect: LPOCNCONNPROCW;   // OPTIONAL - performed on successful selection
      pvUserData: Pointer;           // OPTIONAL parameter to lpfnConnect
      dwShareMode: DWORD;            // OPTIONAL - if lpfnConnect is NULL, dwShareMode and
      dwPreferredProtocols: DWORD;   // OPTIONAL dwPreferredProtocols will be used to
                                     //          connect to the selected card
      lpstrRdr: LPWSTR;              // REQUIRED [IN|OUT] Name of selected reader
      nMaxRdr: DWORD;                // REQUIRED [IN|OUT]
      lpstrCard: LPWSTR;             // REQUIRED [IN|OUT] Name of selected card
      nMaxCard: DWORD;               // REQUIRED [IN|OUT]
      dwActiveProtocol: DWORD;       // [OUT] set only if dwShareMode not NULL
      hCardHandle: SCARDHANDLE;      // [OUT] set if a card connection was indicated
   end;
   {$EXTERNALSYM OPENCARDNAME_EXW}

   {$IFDEF UNICODE}
      OPENCARDNAME_EX = OPENCARDNAME_EXW;
      POPENCARDNAME_EX = POPENCARDNAME_EXW;
      LPOPENCARDNAME_EX = LPOPENCARDNAME_EXW;
   {$ELSE}
      OPENCARDNAME_EX = OPENCARDNAME_EXA;
      POPENCARDNAME_EX = POPENCARDNAME_EXA;
      LPOPENCARDNAME_EX = LPOPENCARDNAME_EXA;
   {$ENDIF}
   {$EXTERNALSYM OPENCARDNAME_EX}
   {$EXTERNALSYM POPENCARDNAME_EX}
   {$EXTERNALSYM LPOPENCARDNAME_EX}

//
// SCardUIDlgSelectCard replaces GetOpenCardName
//
{$IFDEF WinSCard_DYNLINK}
type
   TSCardUIDlgSelectCardA = function(pDlgStruc: LPOPENCARDNAME_EXA): LongInt; stdcall;
   TSCardUIDlgSelectCardW = function(pDlgStruc: LPOPENCARDNAME_EXW): LongInt; stdcall;
   {$IFDEF UNICODE}
      TSCardUIDlgSelectCard = TSCardUIDlgSelectCardW;
   {$ELSE}
      TSCardUIDlgSelectCard = TSCardUIDlgSelectCardA;
   {$ENDIF}
{$ELSE}
   // These are not exported by the DLL no point defining them and causing errors
   // function SCardUIDlgSelectCardA(pDlgStruc: LPOPENCARDNAME_EXA): LongInt; stdcall;
   // function SCardUIDlgSelectCardW(pDlgStruc: LPOPENCARDNAME_EXW): LongInt; stdcall;
{$ENDIF}

//
// "Smart Card Common Dialog" definitions for backwards compatibility
//  with the Smart Card Base Services SDK version 1.0
//

type
   POPENCARDNAMEA = ^OPENCARDNAMEA;
   {$EXTERNALSYM POPENCARDNAMEA}
   LPOPENCARDNAMEA = ^OPENCARDNAMEA;
   {$EXTERNALSYM LPOPENCARDNAMEA}
   OPENCARDNAMEA = record
      dwStructSize: DWORD;
      hwndOwner: HWND;
      hSCardContext: SCARDCONTEXT;
      lpstrGroupNames: LPSTR;
      nMaxGroupNames: DWORD;
      lpstrCardNames: LPSTR;
      nMaxCardNames: DWORD;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -