共用方式為


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

(ANSI 版本) 或 (lpstrGroupNames 字串中 Unicode 版本) 字元的最大位元元數目。

rgguidInterfaces

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

cguidInterfaces

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

lpstrCardNames

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

nMaxCardNames

(ANSI 版本) 或 (lpstrGroupNames 字串中 Unicode 版本) 字元的最大位元元組數。

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

注意當您使用 lpfnConnect、lpfnChecklpfnDisconnect 時,應該會出現這三個回呼程式。 使用這些回呼可進一步驗證呼叫應用程式找到適當的卡片。 這是確保選取適當卡片的最佳方式。 不過,針對 lpfnCheck 使用不是 NULL 的值時,lpfnConnectlpfnDisconnect 都不能是 NULL (,pvUserData 也應該提供) ,或者必須同時設定 dwShareModedwPreferredProtocols
 

pvUserData

Void 用戶數據的指標。 此指標會傳回 Connect、Check 和 Disconnect 例程上的呼叫端。

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