IOCTL_SMARTCARD_TRANSMIT IOCTL (winsmcrd.h)
IOCTL_SMARTCARD_TRANSMIT要求會將數據傳送至插入的智慧卡,並從中接收數據。
主要程序代碼
輸入緩衝區
- Irp->AssociatedIrp.SystemBuffer指向SCARD_IO_REQUEST 結構的指標,後面接著要傳送至插入智慧卡的數據。
輸入緩衝區長度
- Parameters.DeviceIoControl.InputBufferLength 如果有任何) ,則包含結構的大小加上尾端數據位元組的長度 (。 dwProtocol 成員必須設定為先前選取的通訊協定,而 cbPciLength 成員必須設定為SCARD_IO_REQUEST結構本身的大小, (通常是八個字節) 。 結構用於未來的通訊協定。 將傳輸至卡片的數據必須緊接在此結構之後。
輸出緩衝區
位元組緩衝區包含傳輸的結果。 緩衝區會指向SCARD_IO_REQUEST結構,緊接在收到的數據之後。
- Irp->AssociatedIrp.SystemBuffer 接收傳輸的結果。 這個緩衝區也必須以 SCARD_IO_REQUEST 結構開頭。 從卡片接收的任何數據都必須緊接在 結構之後儲存。
輸出緩衝區長度
- Parameters.DeviceIoControl.OutputBufferLength 包含輸出緩衝區的長度。
狀態區塊
Irp->IoStatus.Status 設定為下列其中一個值。
值 | 意義 |
---|---|
STATUS_SUCCESS | 傳輸成功。 |
STATUS_NO_MEDIA | 讀取器中未偵測到任何智慧卡。 |
STATUS_IO_TIMEOUT | 作業逾時。 |
STATUS_INVALID_DEVICE_STATE | 標頭檔中的通訊協定與先前選取的智慧卡通訊協定不符。 |
STATUS_BUFFER_TOO_SMALL | 輸出緩衝區對於傳回數據而言太小。 |
STATUS_DEVICE_POWERED_OFF | 鄰近無線電控制已關閉。 |
備註
IOCTL_SMARTCARD_TRANSMIT 會將數據從用戶端傳輸到符合 ISO7816-4 規範的APDU中偵測到的智慧卡。 這些APTU會解譯為PC/SC規格 (第4.3.7節有更詳細的支援不同NFC無聯繫人捲標格式) 需求。 因為 NFP 功能與智慧卡共用相同的驅動程式,所以應該在探索之後立即連線該卡片,因此不需要 『Transmit』 的明確連線。
因為輸入緩衝區和輸出緩衝區指向相同的記憶體區域,所以驅動程式必須避免覆寫輸入數據。 使用智慧卡驅動程序連結庫,確定不會覆寫輸入數據。
規格需求
需求 | 值 |
---|---|
標頭 | winsmcrd.h |