📄 winscard.h
字号:
// NOTE: SCardState is an obsolete routine. PC/SC has replaced it with
// SCardStatus.
//
extern WINSCARDAPI LONG WINAPI
SCardStatusA(
IN SCARDHANDLE hCard,
OUT LPSTR szReaderName,
IN OUT LPDWORD pcchReaderLen,
OUT LPDWORD pdwState,
OUT LPDWORD pdwProtocol,
OUT LPBYTE pbAtr,
IN OUT LPDWORD pcbAtrLen);
extern WINSCARDAPI LONG WINAPI
SCardStatusW(
IN SCARDHANDLE hCard,
OUT LPWSTR szReaderName,
IN OUT LPDWORD pcchReaderLen,
OUT LPDWORD pdwState,
OUT LPDWORD pdwProtocol,
OUT LPBYTE pbAtr,
IN OUT LPDWORD pcbAtrLen);
#ifdef UNICODE
#define SCardStatus SCardStatusW
#else
#define SCardStatus SCardStatusA
#endif // !UNICODE
extern WINSCARDAPI LONG WINAPI
SCardTransmit(
IN SCARDHANDLE hCard,
IN LPCSCARD_IO_REQUEST pioSendPci,
IN LPCBYTE pbSendBuffer,
IN DWORD cbSendLength,
IN OUT LPSCARD_IO_REQUEST pioRecvPci,
OUT LPBYTE pbRecvBuffer,
IN OUT LPDWORD pcbRecvLength);
//
////////////////////////////////////////////////////////////////////////////////
//
// Reader Control Routines
//
// The following services provide for direct, low-level manipulation of the
// reader by the calling application allowing it control over the
// attributes of the communications with the card.
//
extern WINSCARDAPI LONG WINAPI
SCardControl(
IN SCARDHANDLE hCard,
IN DWORD dwControlCode,
IN LPCVOID lpInBuffer,
IN DWORD nInBufferSize,
OUT LPVOID lpOutBuffer,
IN DWORD nOutBufferSize,
OUT LPDWORD lpBytesReturned);
extern WINSCARDAPI LONG WINAPI
SCardGetAttrib(
IN SCARDHANDLE hCard,
IN DWORD dwAttrId,
OUT LPBYTE pbAttr,
IN OUT LPDWORD pcbAttrLen);
//
// 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:
#define SCardGetReaderCapabilities SCardGetAttrib
extern WINSCARDAPI LONG WINAPI
SCardSetAttrib(
IN SCARDHANDLE hCard,
IN DWORD dwAttrId,
IN LPCBYTE pbAttr,
IN DWORD cbAttrLen);
//
// 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:
#define SCardSetReaderCapabilities SCardSetAttrib
//
////////////////////////////////////////////////////////////////////////////////
//
// Smart Card Dialog definitions
//
// The following section contains structures and exported function
// declarations for the Smart Card Common Dialog dialog.
//
// Defined constants
// Flags
#define SC_DLG_MINIMAL_UI 0x01
#define SC_DLG_NO_UI 0x02
#define SC_DLG_FORCE_UI 0x04
#define SCERR_NOCARDNAME 0x4000
#define SCERR_NOGUIDS 0x8000
typedef SCARDHANDLE (WINAPI *LPOCNCONNPROCA) (IN SCARDCONTEXT, IN LPSTR, IN LPSTR, IN PVOID);
typedef SCARDHANDLE (WINAPI *LPOCNCONNPROCW) (IN SCARDCONTEXT, IN LPWSTR, IN LPWSTR, IN PVOID);
#ifdef UNICODE
#define LPOCNCONNPROC LPOCNCONNPROCW
#else
#define LPOCNCONNPROC LPOCNCONNPROCA
#endif // !UNICODE
typedef BOOL (WINAPI *LPOCNCHKPROC) (IN SCARDCONTEXT, IN SCARDHANDLE, IN PVOID);
typedef void (WINAPI *LPOCNDSCPROC) (IN SCARDCONTEXT, IN SCARDHANDLE, IN PVOID);
//
// 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.
//
typedef struct {
DWORD dwStructSize;
LPSTR lpstrGroupNames; // OPTIONAL reader groups to include in
DWORD nMaxGroupNames; // search. NULL defaults to
// SCard$DefaultReaders
LPCGUID rgguidInterfaces; // OPTIONAL requested interfaces
DWORD cguidInterfaces; // supported by card's SSP
LPSTR lpstrCardNames; // OPTIONAL requested card names; all cards w/
DWORD nMaxCardNames; // matching ATRs will be accepted
LPOCNCHKPROC lpfnCheck; // OPTIONAL if NULL no user check will be performed.
LPOCNCONNPROCA lpfnConnect; // OPTIONAL if lpfnConnect is provided,
LPOCNDSCPROC lpfnDisconnect; // lpfnDisconnect must also be set.
LPVOID pvUserData; // OPTIONAL parameter to callbacks
DWORD dwShareMode; // OPTIONAL must be set if lpfnCheck is not null
DWORD dwPreferredProtocols; // OPTIONAL
} OPENCARD_SEARCH_CRITERIAA, *POPENCARD_SEARCH_CRITERIAA, *LPOPENCARD_SEARCH_CRITERIAA;
typedef struct {
DWORD dwStructSize;
LPWSTR lpstrGroupNames; // OPTIONAL reader groups to include in
DWORD nMaxGroupNames; // search. NULL defaults to
// SCard$DefaultReaders
LPCGUID rgguidInterfaces; // OPTIONAL requested interfaces
DWORD cguidInterfaces; // supported by card's SSP
LPWSTR lpstrCardNames; // OPTIONAL requested card names; all cards w/
DWORD nMaxCardNames; // matching ATRs will be accepted
LPOCNCHKPROC lpfnCheck; // OPTIONAL if NULL no user check will be performed.
LPOCNCONNPROCW lpfnConnect; // OPTIONAL if lpfnConnect is provided,
LPOCNDSCPROC lpfnDisconnect; // lpfnDisconnect must also be set.
LPVOID pvUserData; // OPTIONAL parameter to callbacks
DWORD dwShareMode; // OPTIONAL must be set if lpfnCheck is not null
DWORD dwPreferredProtocols; // OPTIONAL
} OPENCARD_SEARCH_CRITERIAW, *POPENCARD_SEARCH_CRITERIAW, *LPOPENCARD_SEARCH_CRITERIAW;
#ifdef UNICODE
typedef OPENCARD_SEARCH_CRITERIAW OPENCARD_SEARCH_CRITERIA;
typedef POPENCARD_SEARCH_CRITERIAW POPENCARD_SEARCH_CRITERIA;
typedef LPOPENCARD_SEARCH_CRITERIAW LPOPENCARD_SEARCH_CRITERIA;
#else
typedef OPENCARD_SEARCH_CRITERIAA OPENCARD_SEARCH_CRITERIA;
typedef POPENCARD_SEARCH_CRITERIAA POPENCARD_SEARCH_CRITERIA;
typedef LPOPENCARD_SEARCH_CRITERIAA LPOPENCARD_SEARCH_CRITERIA;
#endif // UNICODE
//
// OPENCARDNAME_EX: used by SCardUIDlgSelectCard; replaces obsolete OPENCARDNAME
//
typedef struct {
DWORD dwStructSize; // REQUIRED
SCARDCONTEXT hSCardContext; // REQUIRED
HWND hwndOwner; // OPTIONAL
DWORD dwFlags; // OPTIONAL -- default is SC_DLG_MINIMAL_UI
LPCSTR lpstrTitle; // OPTIONAL
LPCSTR lpstrSearchDesc; // OPTIONAL (eg. "Please insert your <brandname> smart card.")
HICON hIcon; // OPTIONAL 32x32 icon for your brand insignia
POPENCARD_SEARCH_CRITERIAA pOpenCardSearchCriteria; // OPTIONAL
LPOCNCONNPROCA lpfnConnect; // OPTIONAL - performed on successful selection
LPVOID pvUserData; // OPTIONAL parameter to lpfnConnect
DWORD dwShareMode; // OPTIONAL - if lpfnConnect is NULL, dwShareMode and
DWORD dwPreferredProtocols; // OPTIONAL dwPreferredProtocols will be used to
// connect to the selected card
LPSTR lpstrRdr; // REQUIRED [IN|OUT] Name of selected reader
DWORD nMaxRdr; // REQUIRED [IN|OUT]
LPSTR lpstrCard; // REQUIRED [IN|OUT] Name of selected card
DWORD nMaxCard; // REQUIRED [IN|OUT]
DWORD dwActiveProtocol; // [OUT] set only if dwShareMode not NULL
SCARDHANDLE hCardHandle; // [OUT] set if a card connection was indicated
} OPENCARDNAME_EXA, *POPENCARDNAME_EXA, *LPOPENCARDNAME_EXA;
typedef struct {
DWORD dwStructSize; // REQUIRED
SCARDCONTEXT hSCardContext; // REQUIRED
HWND hwndOwner; // OPTIONAL
DWORD dwFlags; // OPTIONAL -- default is SC_DLG_MINIMAL_UI
LPCWSTR lpstrTitle; // OPTIONAL
LPCWSTR lpstrSearchDesc; // OPTIONAL (eg. "Please insert your <brandname> smart card.")
HICON hIcon; // OPTIONAL 32x32 icon for your brand insignia
POPENCARD_SEARCH_CRITERIAW pOpenCardSearchCriteria; // OPTIONAL
LPOCNCONNPROCW lpfnConnect; // OPTIONAL - performed on successful selection
LPVOID pvUserData; // OPTIONAL parameter to lpfnConnect
DWORD dwShareMode; // OPTIONAL - if lpfnConnect is NULL, dwShareMode and
DWORD dwPreferredProtocols; // OPTIONAL dwPreferredProtocols will be used to
// connect to the selected card
LPWSTR lpstrRdr; // REQUIRED [IN|OUT] Name of selected reader
DWORD nMaxRdr; // REQUIRED [IN|OUT]
LPWSTR lpstrCard; // REQUIRED [IN|OUT] Name of selected card
DWORD nMaxCard; // REQUIRED [IN|OUT]
DWORD dwActiveProtocol; // [OUT] set only if dwShareMode not NULL
SCARDHANDLE hCardHandle; // [OUT] set if a card connection was indicated
} OPENCARDNAME_EXW, *POPENCARDNAME_EXW, *LPOPENCARDNAME_EXW;
#ifdef UNICODE
typedef OPENCARDNAME_EXW OPENCARDNAME_EX;
typedef POPENCARDNAME_EXW POPENCARDNAME_EX;
typedef LPOPENCARDNAME_EXW LPOPENCARDNAME_EX;
#else
typedef OPENCARDNAME_EXA OPENCARDNAME_EX;
typedef POPENCARDNAME_EXA POPENCARDNAME_EX;
typedef LPOPENCARDNAME_EXA LPOPENCARDNAME_EX;
#endif // UNICODE
#define OPENCARDNAMEA_EX OPENCARDNAME_EXA
#define OPENCARDNAMEW_EX OPENCARDNAME_EXW
#define POPENCARDNAMEA_EX POPENCARDNAME_EXA
#define POPENCARDNAMEW_EX POPENCARDNAME_EXW
#define LPOPENCARDNAMEA_EX LPOPENCARDNAME_EXA
#define LPOPENCARDNAMEW_EX LPOPENCARDNAME_EXW
//
// SCardUIDlgSelectCard replaces GetOpenCardName
//
extern WINSCARDAPI LONG WINAPI
SCardUIDlgSelectCardA(
LPOPENCARDNAMEA_EX);
extern WINSCARDAPI LONG WINAPI
SCardUIDlgSelectCardW(
LPOPENCARDNAMEW_EX);
#ifdef UNICODE
#define SCardUIDlgSelectCard SCardUIDlgSelectCardW
#else
#define SCardUIDlgSelectCard SCardUIDlgSelectCardA
#endif // !UNICODE
//
// "Smart Card Common Dialog" definitions for backwards compatibility
// with the Smart Card Base Services SDK version 1.0
//
typedef struct {
DWORD dwStructSize;
HWND hwndOwner;
SCARDCONTEXT hSCardContext;
LPSTR lpstrGroupNames;
DWORD nMaxGroupNames;
LPSTR lpstrCardNames;
DWORD nMaxCardNames;
LPCGUID rgguidInterfaces;
DWORD cguidInterfaces;
LPSTR lpstrRdr;
DWORD nMaxRdr;
LPSTR lpstrCard;
DWORD nMaxCard;
LPCSTR lpstrTitle;
DWORD dwFlags;
LPVOID pvUserData;
DWORD dwShareMode;
DWORD dwPreferredProtocols;
DWORD dwActiveProtocol;
LPOCNCONNPROCA lpfnConnect;
LPOCNCHKPROC lpfnCheck;
LPOCNDSCPROC lpfnDisconnect;
SCARDHANDLE hCardHandle;
} OPENCARDNAMEA, *POPENCARDNAMEA, *LPOPENCARDNAMEA;
typedef struct {
DWORD dwStructSize;
HWND hwndOwner;
SCARDCONTEXT hSCardContext;
LPWSTR lpstrGroupNames;
DWORD nMaxGroupNames;
LPWSTR lpstrCardNames;
DWORD nMaxCardNames;
LPCGUID rgguidInterfaces;
DWORD cguidInterfaces;
LPWSTR lpstrRdr;
DWORD nMaxRdr;
LPWSTR lpstrCard;
DWORD nMaxCard;
LPCWSTR lpstrTitle;
DWORD dwFlags;
LPVOID pvUserData;
DWORD dwShareMode;
DWORD dwPreferredProtocols;
DWORD dwActiveProtocol;
LPOCNCONNPROCW lpfnConnect;
LPOCNCHKPROC lpfnCheck;
LPOCNDSCPROC lpfnDisconnect;
SCARDHANDLE hCardHandle;
} OPENCARDNAMEW, *POPENCARDNAMEW, *LPOPENCARDNAMEW;
#ifdef UNICODE
typedef OPENCARDNAMEW OPENCARDNAME;
typedef POPENCARDNAMEW POPENCARDNAME;
typedef LPOPENCARDNAMEW LPOPENCARDNAME;
#else
typedef OPENCARDNAMEA OPENCARDNAME;
typedef POPENCARDNAMEA POPENCARDNAME;
typedef LPOPENCARDNAMEA LPOPENCARDNAME;
#endif // UNICODE
// Backwards compatibility macros
#define OPENCARDNAME_A OPENCARDNAMEA
#define OPENCARDNAME_W OPENCARDNAMEW
#define POPENCARDNAME_A POPENCARDNAMEA
#define POPENCARDNAME_W POPENCARDNAMEW
#define LPOPENCARDNAME_A LPOPENCARDNAMEA
#define LPOPENCARDNAME_W LPOPENCARDNAMEW
extern WINSCARDAPI LONG WINAPI
GetOpenCardNameA(
LPOPENCARDNAMEA);
extern WINSCARDAPI LONG WINAPI
GetOpenCardNameW(
LPOPENCARDNAMEW);
#ifdef UNICODE
#define GetOpenCardName GetOpenCardNameW
#else
#define GetOpenCardName GetOpenCardNameA
#endif // !UNICODE
extern WINSCARDAPI LONG WINAPI
SCardDlgExtendedError (void);
#ifdef __cplusplus
}
#endif
#endif // _WINSCARD_H_
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -