(winscard.h) OPENCARD_SEARCH_CRITERIAA 结构

SCardUIDlgSelectCard 函数使用 OPENCARD_SEARCH_CRITERIA 结构来识别满足调用方规定的要求的卡。 但是,无需使用此结构即可调用 SCardUIDlgSelectCard

语法

typedef struct {
  DWORD          dwStructSize;
  LPSTR          lpstrGroupNames;
  DWORD          nMaxGroupNames;
  LPCGUID        rgguidInterfaces;
  DWORD          cguidInterfaces;
  LPSTR          lpstrCardNames;
  DWORD          nMaxCardNames;
  LPOCNCHKPROC   lpfnCheck;
  LPOCNCONNPROCA lpfnConnect;
  LPOCNDSCPROC   lpfnDisconnect;
  LPVOID         pvUserData;
  DWORD          dwShareMode;
  DWORD          dwPreferredProtocols;
} OPENCARD_SEARCH_CRITERIAA, *POPENCARD_SEARCH_CRITERIAA, *LPOPENCARD_SEARCH_CRITERIAA;

成员

dwStructSize

结构的长度(以字节为单位)。 不得为 NULL

lpstrGroupNames

指向包含以 null 结尾的组名字符串的缓冲区的指针。 缓冲区中的最后一个字符串必须以两个 null 字符结尾。 每个字符串都是要包含在搜索中的一组卡片的名称。 如果 lpstrGroupNamesNULL,则搜索 (Scard$DefaultReaders) 的默认组。

nMaxGroupNames

lpstrGroupNames 字符串 (中 Unicode 版本) (ANSI 版本) 或字符的最大字节数。

rgguidInterfaces

保留供将来使用。 标识所需接口的 GUID 数组。 将此成员设置为 NULL

cguidInterfaces

保留供将来使用。 rgguidInterfaces 数组中的接口数。 将此成员设置为 NULL

lpstrCardNames

指向包含以 null 结尾卡名称字符串的缓冲区的指针。 缓冲区中的最后一个字符串必须以两个 null 字符结尾。 每个字符串都是要定位的卡的名称。

nMaxCardNames

lpstrGroupNames 字符串中 Unicode 版本) (ANSI 版本 () 或字符的最大字节数。

lpfnCheck

指向调用方卡验证例程的指针。 如果不需要特殊卡验证,则此指针为 NULL。 如果验证例程拒绝卡,则返回 FALSE,卡将断开连接。 如果验证例程接受卡,则返回 TRUE

检查例程的原型如下所示。

Boolean Check(
  hSCardContext, // the card context passed in the parameter block
  hCard,         // card handle
  pvUserData     // pointer to user data passed in the parameter block
);

lpfnConnect

指向调用方卡连接例程的指针。 如果调用方需要执行其他处理以连接到卡,则此函数指针将设置为用户的 connect 函数。 如果连接函数成功,则卡保持连接状态并初始化,并返回卡句柄。

连接例程的原型如下所示。

Connect(
  hSCardContext, // the card context passed in the parameter block
  szReader,      // the name of the reader
  mszCards,      // multiple string that contains
                 //    the possible card names in the reader
  pvUserData     // pointer to user data passed in parameter block
);

lpfnDisconnect

指向调用方卡断开连接例程的指针。

断开连接例程的原型如下所示。

Disconnect(
  hSCardContext, // the card context passed in the parameter block
  hCard,         // card handle
  pvUserData     // pointer to user data passed in the parameter block
);

注意 使用 lpfnConnectlpfnChecklpfnDisconnect 时,应存在所有三个回调过程。 使用这些回调可以进一步验证调用应用程序是否已找到适当的卡。 这是确保选择适当卡的最佳方式。 但是,对于 lpfnCheck 使用非 NULL 值时,lpfnConnectlpfnDisconnect 不得为 NULL (并且 pvUserData 还应) 提供,或者必须同时设置 dwShareModedwPreferredProtocols
 

pvUserData

指向用户数据的 Void 指针。 此指针将传递回“连接”、“检查”和“断开连接”例程上的调用方。

dwShareMode

如果 lpfnConnect 不为 NULL,则忽略 dwShareModedwPreferredProtocols 成员。 如果 lpfnConnectNULLdwShareMode 为非零值,则会对使用 dwShareModedwPreferredProtocols 作为参数的 SCardConnect 进行内部调用。

dwPreferredProtocols

用于内部连接,如 dwShareMode 中所述。

注解

注意

winscard.h 标头将 OPENCARD_SEARCH_CRITERIA 定义为别名,该别名根据 UNICODE 预处理器常量的定义自动选择此函数的 ANSI 或 Unicode 版本。 将非特定编码别名的使用与非非特定编码的代码混合使用可能会导致不匹配,从而导致编译或运行时错误。 有关详细信息,请参阅 函数原型的约定

要求

要求
最低受支持的客户端 Windows XP [仅限桌面应用]
最低受支持的服务器 Windows Server 2003 [仅限桌面应用]
标头 winscard.h

另请参阅

OPENCARDNAME_EX

SCardUIDlgSelectCard