📄 winscard.pas
字号:
rgguidInterfaces: LPCGUID;
cguidInterfaces: DWORD;
lpstrRdr: LPSTR;
nMaxRdr: DWORD;
lpstrCard: LPSTR;
nMaxCard: DWORD;
lpstrTitle: LPCSTR;
dwFlags: DWORD;
pvUserData: Pointer;
dwShareMode: DWORD;
dwPreferredProtocols: DWORD;
dwActiveProtocol: DWORD;
lpfnConnect: LPOCNCONNPROCA;
lpfnCheck: LPOCNCHKPROC;
lpfnDisconnect: LPOCNDSCPROC;
hCardHandle: SCARDHANDLE;
end;
{$EXTERNALSYM OPENCARDNAMEA}
POPENCARDNAMEW = ^OPENCARDNAMEW;
{$EXTERNALSYM POPENCARDNAMEW}
LPOPENCARDNAMEW = ^OPENCARDNAMEW;
{$EXTERNALSYM LPOPENCARDNAMEW}
OPENCARDNAMEW = record
dwStructSize: DWORD;
hwndOwner: HWND;
hSCardContext: SCARDCONTEXT;
lpstrGroupNames: LPWSTR;
nMaxGroupNames: DWORD;
lpstrCardNames: LPWSTR;
nMaxCardNames: DWORD;
rgguidInterfaces: LPCGUID;
cguidInterfaces: DWORD;
lpstrRdr: LPWSTR;
nMaxRdr: DWORD;
lpstrCard: LPWSTR;
nMaxCard: DWORD;
lpstrTitle: LPCWSTR;
dwFlags: DWORD;
pvUserData: Pointer;
dwShareMode: DWORD;
dwPreferredProtocols: DWORD;
dwActiveProtocol: DWORD;
lpfnConnect: LPOCNCONNPROCW;
lpfnCheck: LPOCNCHKPROC;
lpfnDisconnect: LPOCNDSCPROC;
hCardHandle: SCARDHANDLE;
end;
{$EXTERNALSYM OPENCARDNAMEW}
{$IFDEF UNICODE}
OPENCARDNAME = OPENCARDNAMEW;
POPENCARDNAME = POPENCARDNAMEW;
LPOPENCARDNAME = LPOPENCARDNAMEW;
{$ELSE}
OPENCARDNAME = OPENCARDNAMEA;
POPENCARDNAME = POPENCARDNAMEA;
LPOPENCARDNAME = LPOPENCARDNAMEA;
{$ENDIF}
{$EXTERNALSYM OPENCARDNAME}
{$EXTERNALSYM POPENCARDNAME}
{$EXTERNALSYM LPOPENCARDNAME}
{$IFDEF WinSCard_DYNLINK}
var
SCardEstablishContext: TSCardEstablishContext = nil;
SCardReleaseContext: TSCardReleaseContext = nil;
SCardListReaderGroups: TSCardListReaderGroups = nil;
SCardListReaders: TSCardListReaders = nil;
SCardListCards: TSCardListCards = nil;
SCardListInterfaces: TSCardListInterfaces = nil;
SCardGetProviderId: TSCardGetProviderId = nil;
SCardGetCardTypeProviderName: TSCardGetCardTypeProviderName = nil;
SCardIntroduceReaderGroup: TSCardIntroduceReaderGroup = nil;
SCardForgetReaderGroup: TSCardForgetReaderGroup = nil;
SCardIntroduceReader: TSCardIntroduceReader = nil;
SCardForgetReader: TSCardForgetReader = nil;
SCardAddReaderToGroup: TSCardAddReaderToGroup = nil;
SCardRemoveReaderFromGroup: TSCardRemoveReaderFromGroup = nil;
SCardIntroduceCardType: TSCardIntroduceCardType = nil;
SCardSetCardTypeProviderName: TSCardSetCardTypeProviderName = nil;
SCardForgetCardType: TSCardForgetCardType = nil;
SCardFreeMemory: TSCardFreeMemory = nil;
SCardLocateCards: TSCardLocateCards = nil;
SCardGetStatusChange: TSCardGetStatusChange = nil;
SCardCancel: TSCardCancel = nil;
SCardConnect: TSCardConnect = nil;
SCardReconnect: TSCardReconnect = nil;
SCardDisconnect: TSCardDisconnect = nil;
SCardBeginTransaction: TSCardBeginTransaction = nil;
SCardEndTransaction: TSCardEndTransaction = nil;
SCardStatus: TSCardStatus = nil;
SCardTransmit: TSCardTransmit = nil;
SCardControl: TSCardControl = nil;
SCardGetAttrib: TSCardGetAttrib = nil;
SCardSetAttrib: TSCardSetAttrib = nil;
SCardIsValidContext: TSCardIsValidContext = nil;
SCardLocateCardsByATR: TSCardLocateCardsByATR = nil;
SCardAccessStartedEvent: TSCardAccessStartedEvent = nil;
SCardReleaseStartedEvent: TSCardReleaseStartedEvent = nil;
bPCSCLoaded: Boolean;
hWinscardDLL: THandle;
{ load PC/SC DLL, pass variable for handle to unload DLL later }
function PCSCLoadDLL: Boolean;
{$EXTERNALSYM PCSCLoadDLL}
procedure PCSCUnloadDLL;
{$EXTERNALSYM PCSCUnloadDLL}
{$ENDIF}
implementation
{$IFDEF WinSCard_DYNLINK}
procedure PCSCUnloadDLL;
begin
if hWinscardDLL <> 0 then
FreeLibrary(hWinscardDLL);
end;
function PCSCLoadDLL: Boolean;
begin
if hWinscardDLL = 0 then
hWinscardDLL := LoadLibrary('winscard.dll');
if hWinscardDLL = 0 then
begin
Result := False;
Exit;
end;
(* WindowsXP winscard.dll
8/23/2001 0:00 93,184 winscard.dll
Exports from WinSCard.dll
63 exported name(s), 63 export addresse(s). Ordinal base is 1.
Ord. Hint Name
---- ---- ----
1 0000 ClassInstall32
2 0001 SCardAccessNewReaderEvent *New
5 0002 SCardAccessStartedEvent
6 0003 SCardAddReaderToGroupA
7 0004 SCardAddReaderToGroupW
8 0005 SCardBeginTransaction
9 0006 SCardCancel
10 0007 SCardConnectA
11 0008 SCardConnectW
12 0009 SCardControl
13 000A SCardDisconnect
14 000B SCardEndTransaction
15 000C SCardEstablishContext
16 000D SCardForgetCardTypeA
17 000E SCardForgetCardTypeW
18 000F SCardForgetReaderA
19 0010 SCardForgetReaderGroupA
20 0011 SCardForgetReaderGroupW
21 0012 SCardForgetReaderW
22 0013 SCardFreeMemory
23 0014 SCardGetAttrib
24 0015 SCardGetCardTypeProviderNameA
25 0016 SCardGetCardTypeProviderNameW
26 0017 SCardGetProviderIdA
27 0018 SCardGetProviderIdW
28 0019 SCardGetStatusChangeA
29 001A SCardGetStatusChangeW
30 001B SCardIntroduceCardTypeA
31 001C SCardIntroduceCardTypeW
32 001D SCardIntroduceReaderA
33 001E SCardIntroduceReaderGroupA
34 001F SCardIntroduceReaderGroupW
35 0020 SCardIntroduceReaderW
36 0021 SCardIsValidContext
37 0022 SCardListCardsA
38 0023 SCardListCardsW
39 0024 SCardListInterfacesA
40 0025 SCardListInterfacesW
41 0026 SCardListReaderGroupsA
42 0027 SCardListReaderGroupsW
43 0028 SCardListReadersA
44 0029 SCardListReadersW
45 002A SCardLocateCardsA
46 002B SCardLocateCardsByATRA
47 002C SCardLocateCardsByATRW
48 002D SCardLocateCardsW
49 002E SCardReconnect
3 002F SCardReleaseAllEvents *New
50 0030 SCardReleaseContext
4 0031 SCardReleaseNewReaderEvent *New
51 0032 SCardReleaseStartedEvent
52 0033 SCardRemoveReaderFromGroupA
53 0034 SCardRemoveReaderFromGroupW
54 0035 SCardSetAttrib
55 0036 SCardSetCardTypeProviderNameA
56 0037 SCardSetCardTypeProviderNameW
57 0038 SCardState *New
58 0039 SCardStatusA
59 003A SCardStatusW
60 003B SCardTransmit
61 003C g_rgSCardRawPci
62 003D g_rgSCardT0Pci
63 003E g_rgSCardT1Pci
*)
@SCardEstablishContext := GetProcAddress(hWinscardDLL, 'SCardEstablishContext');
@SCardReleaseContext := GetProcAddress(hWinscardDLL, 'SCardReleaseContext');
@SCardListReaderGroups := GetProcAddress(hWinscardDLL, {$IFDEF UNICODE}'SCardListReaderGroupsW'{$ELSE}'SCardListReaderGroupsA'{$ENDIF});
@SCardListReaders := GetProcAddress(hWinscardDLL, {$IFDEF UNICODE}'SCardListReadersW'{$ELSE}'SCardListReadersA'{$ENDIF});
@SCardListCards := GetProcAddress(hWinscardDLL, {$IFDEF UNICODE}'SCardListCardsW'{$ELSE}'SCardListCardsA'{$ENDIF});
@SCardListInterfaces := GetProcAddress(hWinscardDLL, {$IFDEF UNICODE}'SCardListInterfacesW'{$ELSE}'SCardListInterfacesALib'{$ENDIF}); {SCardListInterfacesALib - alib?}
@SCardGetProviderId := GetProcAddress(hWinscardDLL, {$IFDEF UNICODE}'SCardGetProviderIdW'{$ELSE}'SCardGetProviderIdA'{$ENDIF});
@SCardGetCardTypeProviderName := GetProcAddress(hWinscardDLL, {$IFDEF UNICODE}'SCardGetCardTypeProviderNameW'{$ELSE}'SCardGetCardTypeProviderNameA'{$ENDIF});
@SCardIntroduceReaderGroup := GetProcAddress(hWinscardDLL, {$IFDEF UNICODE}'SCardIntroduceReaderGroupW'{$ELSE}'SCardIntroduceReaderGroupA'{$ENDIF});
@SCardForgetReaderGroup := GetProcAddress(hWinscardDLL, {$IFDEF UNICODE}'SCardForgetReaderGroupW'{$ELSE}'SCardForgetReaderGroupA'{$ENDIF});
@SCardIntroduceReader := GetProcAddress(hWinscardDLL, {$IFDEF UNICODE}'SCardIntroduceReaderW'{$ELSE}'SCardIntroduceReaderA'{$ENDIF});
@SCardForgetReader := GetProcAddress(hWinscardDLL, {$IFDEF UNICODE}'SCardForgetReaderW'{$ELSE}'SCardForgetReaderA'{$ENDIF});
@SCardAddReaderToGroup := GetProcAddress(hWinscardDLL, {$IFDEF UNICODE}'SCardAddReaderToGroupW'{$ELSE}'SCardAddReaderToGroupA'{$ENDIF});
@SCardRemoveReaderFromGroup := GetProcAddress(hWinscardDLL, {$IFDEF UNICODE}'SCardRemoveReaderFromGroupW'{$ELSE}'SCardRemoveReaderFromGroupA'{$ENDIF});
@SCardIntroduceCardType := GetProcAddress(hWinscardDLL, {$IFDEF UNICODE}'SCardIntroduceCardTypeW'{$ELSE}'SCardIntroduceCardTypeA'{$ENDIF});
@SCardSetCardTypeProviderName := GetProcAddress(hWinscardDLL, {$IFDEF UNICODE}'SCardSetCardTypeProviderNameW'{$ELSE}'SCardSetCardTypeProviderNameA'{$ENDIF});
@SCardForgetCardType := GetProcAddress(hWinscardDLL, {$IFDEF UNICODE}'SCardForgetCardTypeW'{$ELSE}'SCardForgetCardTypeA'{$ENDIF});
@SCardFreeMemory := GetProcAddress(hWinscardDLL, 'SCardFreeMemory');
@SCardLocateCards := GetProcAddress(hWinscardDLL, {$IFDEF UNICODE}'SCardLocateCardsW'{$ELSE}'SCardLocateCardsA'{$ENDIF});
@SCardGetStatusChange := GetProcAddress(hWinscardDLL, {$IFDEF UNICODE}'SCardGetStatusChangeW'{$ELSE}'SCardGetStatusChangeA'{$ENDIF});
@SCardCancel := GetProcAddress(hWinscardDLL, 'SCardCancel');
@SCardConnect := GetProcAddress(hWinscardDLL, {$IFDEF UNICODE}'SCardConnectW'{$ELSE}'SCardConnectA'{$ENDIF});
@SCardReconnect := GetProcAddress(hWinscardDLL, 'SCardReconnect');
@SCardDisconnect := GetProcAddress(hWinscardDLL, 'SCardDisconnect');
@SCardBeginTransaction := GetProcAddress(hWinscardDLL, 'SCardBeginTransaction');
@SCardEndTransaction := GetProcAddress(hWinscardDLL, 'SCardEndTransaction');
@SCardStatus := GetProcAddress(hWinscardDLL, {$IFDEF UNICODE}'SCardStatusW'{$ELSE}'SCardStatusA'{$ENDIF});
@SCardTransmit := GetProcAddress(hWinscardDLL, 'SCardTransmit');
@SCardControl := GetProcAddress(hWinscardDLL, 'SCardControl');
@SCardGetAttrib := GetProcAddress(hWinscardDLL, 'SCardGetAttrib');
@SCardSetAttrib := GetProcAddress(hWinscardDLL, 'SCardSetAttrib');
@SCardIsValidContext := GetProcAddress(hWinscardDLL, 'SCardIsValidContext');
@SCardLocateCardsByATR := GetProcAddress(hWinscardDLL, {$IFDEF UNICODE}'SCardLocateCardsByATRW'{$ELSE}'SCardLocateCardsByATRA'{$ENDIF});
@SCardAccessStartedEvent := GetProcAddress(hWinscardDLL, 'SCardAccessStartedEvent');
@SCardReleaseStartedEvent := GetProcAddress(hWinscardDLL, 'SCardReleaseStartedEvent');
Result := True;
end;
{$ELSE}
const
WinSCardDLL = 'winscard.dll';
function SCardEstablishContext; external WinSCardDLL name 'SCardEstablishContext';
function SCardReleaseContext; external WinSCardDLL name 'SCardReleaseContext';
function SCardListReaderGroupsW; external WinSCardDLL name 'SCardListReaderGroupsW';
function SCardListReaderGroupsA; external WinSCardDLL name 'SCardListReaderGroupsA';
function SCardListReadersW; external WinSCardDLL name 'SCardListReadersW';
function SCardListReadersA; external WinSCardDLL name 'SCardListReadersA';
function SCardListCardsW; external WinSCardDLL name 'SCardListCardsW';
function SCardListCardsA; external WinSCardDLL name 'SCardListCardsA';
function SCardListInterfacesW; external WinSCardDLL name 'SCardListInterfacesW';
function SCardListInterfacesA; external WinSCardDLL name 'SCardListInterfacesA';
function SCardGetProviderIdW; external WinSCardDLL name 'SCardGetProviderIdW';
function SCardGetProviderIdA; external WinSCardDLL name 'SCardGetProviderIdA';
function SCardGetCardTypeProviderNameW; external WinSCardDLL name 'SCardGetCardTypeProviderNameW';
function SCardGetCardTypeProviderNameA; external WinSCardDLL name 'SCardGetCardTypeProviderNameA';
function SCardIntroduceReaderGroupW; external WinSCardDLL name 'SCardIntroduceReaderGroupW';
function SCardIntroduceReaderGroupA; external WinSCardDLL name 'SCardIntroduceReaderGroupA';
function SCardForgetReaderGroupW; external WinSCardDLL name 'SCardForgetReaderGroupW';
function SCardForgetReaderGroupA; external WinSCardDLL name 'SCardForgetReaderGroupA';
function SCardIntroduceReaderW; external WinSCardDLL name 'SCardIntroduceReaderW';
function SCardIntroduceReaderA; external WinSCardDLL name 'SCardIntroduceReaderA';
function SCardForgetReaderW; external WinSCardDLL name 'SCardForgetReaderW';
function SCardForgetReaderA; external WinSCardDLL name 'SCardForgetReaderA';
function SCardAddReaderToGroupW; external WinSCardDLL name 'SCardAddReaderToGroupW';
function SCardAddReaderToGroupA; external WinSCardDLL name 'SCardAddReaderToGroupA';
function SCardRemoveReaderFromGroupW; external WinSCardDLL name 'SCardRemoveReaderFromGroupW';
function SCardRemoveReaderFromGroupA; external WinSCardDLL name 'SCardRemoveReaderFromGroupA';
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -