共用方式為


智慧卡驅動程式程式庫回呼常式

智慧卡架構會定義一組標準回呼常式類型。 如需這些常式的詳細資訊,請參閱 智慧卡驅動程式回呼

讀取器驅動程式必須將這些回呼常式提供給驅動程式程式庫常式 SmartcardDeviceControl (WDM) 呼叫,方法是將指標儲存在智慧卡裝置擴充功能中,其類型為 SMARTCARD_EXTENSION。 這些指標會儲存在位於 SMARTCARD_EXTENSION 結構的 ReaderFunction 成員陣列中。 個別回呼常式可以透過一系列常數值來識別,這些常數值應該當做 ReaderFunction 陣列中的索引使用。

例如,如果您希望 SmartcardDeviceControl 在讀取器驅動程式中呼叫名為 DriverCardPower 的回呼常式,每當它完成處理 IOCTL_SMARTCARD_POWER 要求時,您必須使用 RDF_CARD_POWER 常數,以下列方式初始化裝置擴充功能:

SmartcardExtension->ReaderFunction[RDF_CARD_POWER] = 
DriverCardPower;

RDF_CARD_POWER是固定的系統定義常數,一律會對應至服務IOCTL_SMARTCARD_POWER要求的回呼常式。

如果對應至所處理 IOCTL 的 ReaderFunction 陣列成員是 NullSmartcardDeviceControl 會將STATUS_NOT_SUPPORTED的狀態傳回給讀取器驅動程式。 在某些情況下,此行為很有用。 例如,如果您的驅動程式不支援卡片退出或卡片抑制,只要將 ReaderFunction 陣列的適當成員指派為 NullSmartcardDeviceControl 就會在呼叫該成員常式時傳回STATUS_NOT_SUPPORTED。

下表列出識別各種回呼常式類型的常數。 這些是您應該用來作為 ReaderFunction 陣列索引的常數。 此資料表也提供每個常式類型的簡短描述,並指出讀取器驅動程式實作常式是必要還是選擇性的。

索引 對應回呼常式的描述 讀取器驅動程式的實作

RDF_CARD_POWER

重設或關閉插入的智慧卡

強制性

RDF_CARD_EJECT

退出插入的智慧卡

選擇性

RDF_CARD_TRACKING

安裝事件處理常式以追蹤卡片插入和移除

強制性

RDF_IOCTL_VENDOR

執行廠商特定的 IOCTL 作業

選擇性

RDF_READER_SWALLOW

執行機械式機械

選擇性

RDF_SET_PROTOCOL

為讀卡機中的卡片選取傳輸通訊協定

強制性

RDF_TRANSMIT

執行資料傳輸

強制性

當讀取器驅動程式呼叫這些常式時,它應該從輸入緩衝區擷取呼叫參數,如 智慧卡驅動程式回呼中所述。 讀取器驅動程式也應該將輸出資料儲存在適當的緩衝區區域中,如相同區段所述。

當卡片追蹤回呼常式以外的任何回呼常式傳回STATUS_PENDING時,智慧卡程式庫會停止維護讀取器驅動程式的任何進一步呼叫。 (如需卡片追蹤回呼常式的相關資訊,請參閱 RDF_CARD_TRACKING.) 如果讀取器驅動程式嘗試在程式庫處於此狀態時使用驅動程式程式庫常式,程式庫常式會傳回STATUS_DEVICE_BUSY的狀態。 這可有效地防止讀取器驅動程式從資源管理員維護 IOCTL 要求,因為讀取器驅動程式無法在呼叫 SmartcardDeviceControl時處理 IOCTL 要求。