📄 winscard.pas
字号:
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 + -