メッセージが送信されたことを示す通知の受信に関心があるクライアントは、IOCTL_NFP_GET_NEXT_TRANSMITTED_MESSAGE 要求を近接ドライバーに送信します。
メジャー コード
入力バッファー
何一つ
出力バッファー
何一つ
状態ブロック
Irp->IoStatus.Status は、要求が成功した場合にSTATUS_SUCCESSに設定されます。
それ以外の場合は、NTSTATUS コードとして適切なエラー条件の状態になります。
詳細については、「NTSTATUS 値 を参照してください。
備考
- クライアント アプリケーションは、コントロール ループ内のこの IOCTL をパブリケーション ハンドルに送信します。 同じメッセージの 2 つの個別の送信により、2 つのイベントがトリガーされます。
- クライアントは、ペンドされた IOCTL が完了するたびに別の IOCTL を送信する必要があります。 ドライバーは、この IOCTL が正常に完了した回数が、パブリケーションが送信された回数と同じであることを保証するために、適切なロックを使用する必要があります。
-
この IOCTL を使用する場合は、次のアクションが必要です。
- 以前に IOCTL_NFP_SET_PAYLOADに成功していないハンドルでこの IOCTL を受信した場合、ドライバーはSTATUS_INVALID_DEVICE_STATEで完了する必要があります。
- ドライバーは、パブリケーション ファイル ハンドル内の "CompleteEventImmediately" カウンター (ULONG 以上) に相当するものを維持する必要があります。
-
ドライバーでこの IOCTL を受信した場合:
- カウンターが 0 の場合、ドライバーは後で完了するために IOCTL をペンする必要があります。
- カウンターが 0 より大きい場合、ドライバーはカウンターを 1 ずつデクリメントし、すぐに STATUS_SUCCESS を使用して IOCTL を完了する必要があります。
- パブリケーションが送信され、IOCTL が現在ペンドされていない場合、ドライバーは "CompleteEventImmediately" カウンターを 1 ずつインクリメントする必要があります。
- 使用できるペン付き IOCTL がある間にパブリケーションが送信される場合、ドライバーは、"CompleteEventImmediately" カウンターをインクリメントせず、STATUS_SUCCESSでペン付き IRP を完了する必要があります。
- IOCTL に入力バッファーまたは出力バッファーが含まれている場合、ドライバーは IOCTL を STATUS_INVALID_PARAMETERで完了する必要があります。
- 別の IOCTL がパブリケーション ハンドルに現在ペンドされている間にこの IOCTL を受信した場合、2 つ目の IOCTL はSTATUS_INVALID_DEVICE_STATEで完了する必要があります。
- ドライバーは、ペンドされた IOCTL の CancelIo をサポートする必要があります。
必要条件
| 要件 | 価値 |
|---|---|
| サポートされる最小クライアント | Windows 8 |
| ヘッダー | nfpdev.h |