共用方式為


OPENCARD_SEARCH_CRITERIAA結構 (winscard.h)

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 字串中的位元元數上限(ANSI 版本)或字元數上限(Unicode 版本)。

rgguidInterfaces

保留供日後使用。 識別所需介面的 GUID 陣列。 將此成員設定為 NULL

cguidInterfaces

保留供日後使用。 rgguidInterfaces 陣列中的介面數目。 將此成員設定為 NULL

lpstrCardNames

緩衝區的指標,其中包含 Null 終止的卡片名稱字串。 緩衝區中的最後一個字串必須以兩個 Null 字元終止。 每個字串都是要找到的卡片名稱。

nMaxCardNames

lpstrGroupNames 字串中的位元組數上限(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 函式成功,卡片會保持連線並初始化,並傳回卡片句柄。

線上例程的原型如下所示。

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 用戶數據的指標。 此指標會傳回 Connect、Check 和 Disconnect 例程上的呼叫端。

dwShareMode

如果 lpfnConnect 不是 NULL,則會忽略 dwShareModedwPreferredProtocols 成員。 如果 lpfnConnect 為 NULL,且 dwShareMode 為非零值,則會對使用 dwShareModedwPreferredProtocols 做為 參數的 SCardConnect 進行內部 呼叫。

dwPreferredProtocols

用於內部連線,如 dwShareMode中所述。

言論

注意

winscard.h 標頭會將 OPENCARD_SEARCH_CRITERIA 定義為別名,根據 UNICODE 預處理器常數的定義,自動選取此函式的 ANSI 或 Unicode 版本。 混合使用編碼中性別名與非編碼中性的程序代碼,可能會導致編譯或運行時間錯誤不符。 如需詳細資訊,請參閱函式原型的 慣例。

要求

要求 價值
最低支援的用戶端 Windows XP [僅限傳統型應用程式]
支援的最低伺服器 Windows Server 2003 [僅限傳統型應用程式]
標頭 winscard.h

另請參閱

OPENCARDNAME_EX

SCardUIDlgSelectCard