IOCTL_NFP_GET_NEXT_SUBSCRIBED_MESSAGE IOCTL (nfpdev.h)

Klien mengirim permintaan IOCTL_NFP_GET_NEXT_SUBSCRIBED_MESSAGE ke handel langganan berulang kali untuk menerima pesan berlangganan saat mereka tiba. Biasanya, IOCTL ini akan ditunda dalam handel langganan hingga pesan yang cocok dengan jenis langganan benar-benar tiba.

Kode utama

IRP_MJ_DEVICE_CONTROL

Buffer input

Tidak ada

Buffer output

Buffer yang valid diperlukan untuk mengembalikan data pesan saat tiba. DWORD pertama dari buffer ini dicadangkan untuk petunjuk kepada klien untuk ukuran buffer berikutnya yang akan dikembalikan. Buffer ini biasanya akan menjadi 255 byte, tetapi driver dapat meminta klien mengirim buffer yang lebih besar dengan hanya memberikan petunjuk dan menyelesaikan IOCTL dengan STATUS_BUFFER_OVERFLOW.

Blok status

Irp-IoStatus.Status> diatur ke STATUS_SUCCESS jika permintaan berhasil.

Jika tidak, Status ke kondisi kesalahan yang sesuai sebagai kode NTSTATUS.

Untuk informasi selengkapnya, lihat Nilai NTSTATUS.

Keterangan

  • Klien harus mengirim IOCTL lain setiap kali IOCTL yang tertunda selesai. Driver HARUS menggunakan kunci yang sesuai untuk menjamin bahwa jumlah keberhasilan penyelesaian IOCTL ini sama dengan jumlah penerimaan pesan yang berhasil untuk jenis langganan.
  • Berikut ini adalah tindakan yang diperlukan saat menggunakan IOCTL ini:
    • Jika IOCTL ini diterima pada handel yang sebelumnya tidak dibuka di namespace perangkat "Subs\", driver HARUS menyelesaikannya dengan STATUS_INVALID_DEVICE_STATE.
    • Driver harus mempertahankan antrean "Diterima" dari pesan yang diterima yang cocok dengan jenis langganan dalam handel file langganan.
    • Ketika IOCTL ini diterima di driver:
      • Jika antrean "Diterima" kosong, maka driver HARUS menunggu IOCTL untuk penyelesaian nanti.
      • Jika antrean "Diterima" tidak kosong, maka driver HARUS menghapus antrean satu buffer pesan, menyalin buffer pesan ke buffer output IOCTL, dan menyelesaikan IOCTL dengan STATUS_SUCCESS segera.
    • Jika pesan yang cocok dengan jenis diterima dan tidak ada IOCTL yang saat ini tertunda, driver HARUS menambahkan buffer pesan ke antrean "Diterima".
    • Jika pesan yang cocok dengan jenis diterima dan ada IOCTL tertunda yang tersedia (antrean "Diterima" kosong), driver HARUS menyalin buffer pesan ke buffer output IOCTL dan menyelesaikan IRP yang tertunda dengan STATUS_SUCCESS. Antrean "Diterima" HARUS terus kosong setelah penyelesaian IRP yang tertunda.
    • Jika driver menyelesaikan IOCTL ini dengan STATUS_SUCCESS, DWORD pertama [4 byte] dari buffer output HARUS berisi petunjuk untuk ukuran buffer klien berikutnya dan bidang Informasi IOCTL HARUS berisi ukuran pesan ini plus sizeof (DWORD) (4 byte).
    • Jika IOCTL berisi buffer input, driver HARUS menyelesaikan IOCTL dengan STATUS_INVALID_PARAMETER.
    • Jika pesan yang diterima memiliki payload panjang nol, driver HARUS mengabaikan pesan. Ini adalah pengoptimalan performa karena Windows AKAN menghilangkan pesan dengan payload panjang nol.
    • Jika pesan yang diterima terlalu besar untuk disalin ke dalam buffer IOCTL ini, driver HARUS menyalin ukuran buffer yang diperlukan ke dalam 4 byte pertama dari buffer output, atur bidang "Informasi" IOCTL ke sizeof (DWORD) ("4"), dan selesaikan IOCTL dengan STATUS_BUFFER_OVERFLOW. Buffer pesan harus dibiarkan dalam antrean "Diterima".
    • Jika IOCTL ini diterima sementara yang lain saat ini tertunda dalam handel langganan, yang kedua (atau yang lebih baru) HARUS diselesaikan dengan STATUS_INVALID_DEVICE_STATE.
    • Driver HARUS mendukung CancelIo dari IOCTL yang tertunda.

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Windows 8
Header nfpdev.h

Lihat juga

Panduan desain keseluruhan near field communication (NFC)

Panduan desain dekat kedekatan bidang (Ketuk dan Lakukan, model penyedia NFP, persyaratan driver)