OPENCARDNAME_EXA结构(winscard.h)

OPENCARDNAME_EX 结构包含 SCardUIDlgSelectCard 函数用来初始化智能卡 选择卡 对话框的信息。

语法

typedef struct {
  DWORD                      dwStructSize;
  SCARDCONTEXT               hSCardContext;
  HWND                       hwndOwner;
  DWORD                      dwFlags;
  LPCSTR                     lpstrTitle;
  LPCSTR                     lpstrSearchDesc;
  HICON                      hIcon;
  POPENCARD_SEARCH_CRITERIAA pOpenCardSearchCriteria;
  LPOCNCONNPROCA             lpfnConnect;
  LPVOID                     pvUserData;
  DWORD                      dwShareMode;
  DWORD                      dwPreferredProtocols;
  LPSTR                      lpstrRdr;
  DWORD                      nMaxRdr;
  LPSTR                      lpstrCard;
  DWORD                      nMaxCard;
  DWORD                      dwActiveProtocol;
  SCARDHANDLE                hCardHandle;
} OPENCARDNAME_EXA, *POPENCARDNAME_EXA, *LPOPENCARDNAME_EXA;

成员

dwStructSize

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

hSCardContext

用于与 智能卡资源管理器通信的上下文。 调用 SCardEstablishContext 以设置 资源管理器上下文SCardReleaseContext 释放它。 此成员的值不得 NULL

hwndOwner

拥有对话框的窗口。 此成员可以是任何有效的窗口句柄,也可以为桌面默认值 NULL

dwFlags

可用于初始化对话框的一组位标志。 当对话框返回时,它将设置这些标志来指示用户的输入。 此成员可以是以下标志之一。

价值 意义
SC_DLG_MINIMAL_UI
仅当调用应用程序搜索的卡片未找到且可用于读取器时,才显示对话框。 这允许找到卡、连接(通过内部对话框机制或用户回调函数),并返回到调用应用程序。
SC_DLG_NO_UI
强制不显示 选择卡用户界面(UI),而不考虑搜索结果。
SC_DLG_FORCE_UI
无论搜索结果如何,强制显示 选择卡片 UI。

lpstrTitle

指向要放置在对话框标题栏中的字符串的指针。 如果此成员 NULL,则系统会使用默认标题“选择卡片:”。

lpstrSearchDesc

指向要向用户显示的字符串的指针,提示插入 智能卡。 如果此成员 NULL,系统将使用默认文本“请插入智能卡”。

hIcon

图标的句柄(32 x 32 像素)。 可以指定要在对话框中显示的特定于供应商的图标。 如果此值 NULL,则会显示一个通用智能卡读卡器加载图标。

pOpenCardSearchCriteria

指向要使用的 OPENCARD_SEARCH_CRITERIA 结构的指针;如果未使用 NULL,则 NULL。

lpfnConnect

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

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

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
);

pvUserData

指向用户数据的 void 指针。 此指针将传回 Connect 例程上的调用方。

dwShareMode

如果 lpfnConnectNULL,则忽略 dwShareModedwPreferredProtocols 成员。 如果 lpfnConnect NULL ,并且 dwShareMode 为非零, SCardConnect 进行内部调用,该 使用 dwShareMode 和 dwPreferredProtocols 作为 dwShareModedwPreferredProtocols 参数。 如果连接成功,hCardHandle 设置为 SCardConnect返回的句柄。 如果 lpfnConnectNULLdwShareMode 为零,则 hCardHandle 设置为 NULL

dwPreferredProtocols

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

lpstrRdr

如果卡位于,则 lpstrRdr 缓冲区包含包含定位卡的读取器的名称。 缓冲区长度应至少为 256 个字符。

nMaxRdr

lpstrRdr指向的缓冲区的大小(以字节为单位)或字符(Unicode 版本)。 如果缓冲区太小而无法包含读取器信息,SCardUIDlgSelectCard 将返回SCARD_E_NO_MEMORY,lpstrRdr指向的缓冲区所需的大小。

lpstrCard

如果卡位于,则 lpstrCard 缓冲区包含该卡的名称。 缓冲区长度应至少为 256 个字符。

nMaxCard

lpstrCard指向的缓冲区的大小(以字节为单位)或字符(Unicode 版本)。 如果缓冲区太小而无法包含卡片信息,SCardUIDlgSelectCard 返回SCARD_E_NO_MEMORY,nMaxCard中所需的缓冲区大小。

dwActiveProtocol

对话框与卡片建立连接时使用的实际协议。

hCardHandle

已连接卡的句柄(通过内部对话框连接或 lpfnConnect 回调)。

言论

注意

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

要求

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

另请参阅

SCardConnect

SCardEstablishContext

SCardReleaseContext

SCardUIDlgSelectCard

智能卡返回值