Bagikan melalui


Langganan pesan NFP

Langganan direpresentasikan sebagai handel terbuka unik dalam driver. Langganan dibuat aktif dengan membuka handel ke namespace perangkat "Subs\". Jenis langganan didefinisikan menjadi semua yang mengikuti awalan "Subs\".

Panggilan balik pada penerimaan pesan diberikan melalui IOCTL_NFP_GET_NEXT_SUBSCRIBED_MESSAGE yang telah selesai.

Langganan dapat dinonaktifkan sementara melalui IOCTL_NFP_DISABLE.

Langganan dapat diaktifkan kembali melalui IOCTL_NFP_ENABLE.

Handles

Klien yang ingin berlangganan jenis pesan akan terlebih dahulu membuka handel baru ke driver. Menangani dari publikasi, langganan, dan sebagainya sebelumnya, tidak dapat digunakan kembali. Jika tidak lagi diperlukan, mereka akan ditutup oleh klien yang berperilaku baik.

Dalam membuka handel, klien mengatur jenis langganan pesan. Ini adalah mekanisme yang sama seperti yang digunakan dengan penerbitan, kecuali bahwa jenis tersebut diawali dengan "Subs\" alih-alih "Pubs\".

Tidak ada fasilitas untuk membaca kembali jenisnya.

Tindakan yang Diperlukan

  • Driver HARUS mengurai komponen protokol (sebelum '.' pertama). Setiap protokol yang tidak dikenal HARUS dilengkapi dengan STATUS_OBJECT_PATH_NOT_FOUND
  • Jika string tidak dihentikan NULL dalam panjang buffer, driver HARUS menyelesaikan IOCTL dengan STATUS_INVALID_PARAMETER.
  • Jika protokol memerlukan subjenis dan komponen subjenis dari buffer string kurang dari satu (1) karakter atau lebih dari 250 karakter, driver HARUS menyelesaikan IOCTL dengan STATUS_INVALID_PARAMETER.
  • Jika komponen protokol buffer string lebih panjang dari 250 karakter, driver HARUS menyelesaikan IOCTL dengan STATUS_INVALID_PARAMETER.
  • Driver HARUS menginterpretasikan NULL pertama sebagai akhir string.
  • Driver MUNGKIN mengenali jenis "Pairing:Bluetooth" untuk langganan.
  • Driver HARUS mengenali jenis "WindowsUri".
  • Driver HARUS mengenali jenis "DeviceArrived" hanya untuk langganan.
  • Driver HARUS mengenali jenis "DeviceDeparted" hanya untuk langganan.
  • Driver HARUS mengenali jenis "WindowsMime" hanya untuk langganan.
  • Driver HARUS mengenali jenis "WindowsMime.".
  • Jika protokol hanya boleh dikenali untuk langganan, dan IOCTL menentukan "Pubs\", driver HARUS menyelesaikan IOCTL dengan STATUS_OBJECT_PATH_NOT_FOUND.
  • Jika protokol hanya boleh dikenali untuk publikasi, dan IOCTL menentukan "Subs\", driver HARUS menyelesaikan IOCTL dengan STATUS_OBJECT_PATH_NOT_FOUND.
  • Beberapa protokol (namespace) dicadangkan. Kecuali ditentukan secara eksplisit dalam dokumen ini, driver TIDAK BOLEH mengenali protokol apa pun yang dimulai dengan:
    • "Windows"
    • "Perangkat"
    • "Pemasangan"
    • "NDEF"
  • Dua handel terbuka ke jenis yang sama HARUS mewakili dua entitas yang berbeda.
  • Jika CreateFile berhasil, handel sekarang menjadi "handel langganan", dan TIDAK BOLEH diubah menjadi jenis handel lainnya.
  • Setelah IOCTL ini berhasil, dan sebelum handel ditutup, setiap kali pesan diterima melalui teknologi kedekatan yang cocok dengan jenis langganan ini maka data pesan tersebut HARUS dilampirkan ke handel file untuk pengiriman ke klien.

berhenti berlangganan

Klien akan menutup handel langganan untuk berhenti menerima pesan. Jika proses klien berakhir, sistem akan menutup semua handel file yang terbuka atas nama klien.

Tindakan yang Diperlukan

Ketika handel ditutup, driver HARUS mengklaim kembali semua memori yang digunakan oleh langganan:

  • Driver HARUS mengklaim kembali data string jenis.
  • Antrean yang diterima HARUS dibersihkan dan diklaim kembali.
  • Setiap IOCTL yang tertunda HARUS diselesaikan dengan STATUS_CANCELLED.

Serekan Berbahaya

Jika perangkat serekan berbahaya mencoba serangan denial of service (DOS) melalui teknologi kedekatan, ada kemungkinan bahwa klien tidak dapat menguras antrean "Diterima" cukup cepat untuk mencegah penggunaan memori yang berlebihan oleh driver.

Tindakan yang Diperlukan

Driver TIDAK BOLEH mengantre atau mengirimkan pesan tertentu kepada klien jika pesan tersebut diterima ketika 50 pesan saat ini berada dalam antrean "Diterima" (pesan terbaru dihilangkan).

Klien yang Tidak Responsif atau Salah Tingkah

Jika klien berhenti menguras antrean "Diterima" dengan gagal mengirim permintaan IOCTL_NFP_GET_NEXT_SUBSCRIBED_MESSAGE yang diperlukan untuk jangka waktu sepuluh hingga dua puluh detik [10-20 detik], driver harus mengasumsikan bahwa klien hilang. Dalam keadaan normal, klien harus me-refresh permintaan mereka dengan baik dalam satu detik [1s]. Jika ini terjadi, driver harus mengatur penghitung "CompleteEventImmediately" ke nol dan tidak boleh menambah penghitung sampai klien bangun dan mengirim IRP yang diperlukan.

Tindakan yang Diperlukan

Driver harus mengatur penghitung "CompleteEventImmediately" ke nol dan tidak boleh menambah penghitung jika klien belum mengirim penggantian IOCTL_NFP_GET_NEXT_SUBSCRIBED_MESSAGE dalam waktu 10 - 20 detik dari penyelesaian IOCTL sebelumnya.

Pesan Salah Format

Klien kemungkinan akan menghilangkan atau mengabaikan semua kesalahan (kecuali STATUS_BUFFER_OVERFLOW) yang dikembalikan dari IOCTL_NFP_GET_NEXT_SUBSCRIBED_MESSAGE. Oleh karena itu, driver tidak boleh menyelesaikan ini dengan kondisi kesalahan hanya karena pesan cacat diterima.

Tindakan yang Diperlukan

  • Driver TIDAK BOLEH mengirimkan pesan yang lebih besar dari ukuran pesan maksimum yang diizinkan kepada klien.

  • Driver TIDAK BOLEH mengirimkan pesan panjang nol kepada klien.

  • Driver TIDAK BOLEH mengirimkan pesan parsial kepada pelanggan.

  • Driver TIDAK BOLEH mengirimkan pesan kepada klien yang telah gagal CRC yang kuat.

    Catatan Sertifikasi Forum NFC menjamin ini untuk penyedia NFC yang mendukung NFC.

  • Driver HARUS menggunakan transportasi yang sangat andal dan/atau mencoba transmisi ulang pesan yang gagal CRC yang kuat.

    Catatan Sertifikasi Forum NFC menjamin ini untuk penyedia NFC yang mendukung NFC.

Langganan Duplikat

Driver harus berasumsi bahwa jika klien berlangganan jenis pesan dua kali, itu karena klien ingin menerima pesan dua kali ketika pesan diterima.

Tindakan yang Diperlukan

Driver HARUS menerima dan melaporkan langganan duplikat, bahkan jika berlangganan oleh klien yang sama.

Referensi API near field communications (NFC)