次の方法で共有


IOCTL_NFCSE_HCE_REMOTE_RECV IOCTL (nfcsedev.h)

使用可能な次のデータ バッファーを返すか、バッファーに格納されたデータがない場合は、APDU バッファーが読み取り可能になるまで、要求は保留中の状態を維持します。 その後、データ バッファーは呼び出し元に返されます。 呼び出し元は、受信した最大の APDU と 4 バイトのオーバーヘッドを保持するのに十分な大きさの出力バッファーを割り当てる必要があることに注意してください。

メジャー コード

IRP_MJ_DEVICE_CONTROL

[入力バッファー]

なし

入力バッファーの長さ

なし

出力バッファー

SECURE_ELEMENT_HCE_DATA_PACKET構造体のサイズとそのペイロードを示す DWORD。その直後にSECURE_ELEMENT_HCE_DATA_PACKET構造体自体が続きます。

ステータス ブロック

Irp->要求が成功した場合、IoStatus.StatusSTATUS_SUCCESS に設定されます。 考えられるエラー コードは次のとおりです。

リターン コード 説明
STATUS_BUFFER_OVERFLOW 指定されたバッファーが小さすぎて通知を受信できませんでした。最初の DWORD には、予期されるバッファー サイズが含まれます。
STATUS_INVALID_PARAMETER 入力バッファーが 0 以外の場合。
STATUS_INVALID_DEVICE_STATE 相対名 'SEManage' 以外のハンドルで IOCTL が送信される場合。

注釈

ドライバーが準拠する必要がある要件を次に示します。

  • この IOCTL は、HCE アクティブ化イベントがトリガーされた後、既存の接続で送信されます。
  • ドライバーは、このペン付き IOCTL で CancelIo をサポートする必要があります。
  • ドライバーは、現在の接続に対して、受信した APDU の "Received" キューを維持する必要があります。
  • ドライバーでこの IOCTL を受信した場合:
    • "Received" キューが空の場合、ドライバーは後で完了するために IOCTL をペンする必要があります。
    • "Received" キューが空でない場合、ドライバーは 1 つの APDU のキューを解除し、APDU バッファーを IOCTL の出力バッファーにコピーし、STATUS_SUCCESSすぐに IOCTL を完了する必要があります。
  • ドライバーがSTATUS_SUCCESSでこの IOCTL を完了した場合、出力バッファーの最初の DWORD [4 バイト] には、SECURE_ELEMENT_HCE_DATA_PACKET構造体のサイズとそのペイロードが含まれている必要があります。
  • 受信した APDU データが大きすぎてこの IOCTL の出力バッファーにコピーできない場合、ドライバーは必要なバッファー サイズを出力バッファーの最初の 4 バイトにコピーし、IOCTL の情報フィールドを sizeof(DWORD) に設定し、ioCTL を STATUS_BUFFER_OVERFLOWで完了する必要があります。 APDU データは、"Received" キューに残しておく必要があります。

要件

要件
Header nfcsedev.h