NFP 訊息訂閱
訂用帳戶會以驅動程式內的唯一開啟句柄表示。 訂用帳戶會在 「Subs\」 裝置命名空間中開啟句柄來成為作用中。 訂用帳戶的類型會定義為 「Subs\」 前置詞後面的一切。
訊息接收的回呼會透過已完成 的IOCTL_NFP_GET_NEXT_SUBSCRIBED_MESSAGE來提供。
您可以透過IOCTL_NFP_DISABLE暫時停用訂用 帳戶。
您可以透過IOCTL_NFP_ENABLE重新啟用訂用 帳戶。
處理
想要訂閱訊息類型的用戶端會先開啟驅動程式的新句柄。 無法重複使用來自先前發行集、訂閱等的句柄。 如果不再需要它們,則會由行為良好的客戶端關閉。
在開啟句柄時,用戶端會設定訊息訂閱的類型。 這是與用於發行相同的機制,不同之處在於類型前面加上 「Subs\」 而不是 「Pubs\」。。
沒有可讀回型別的設施。
必要動作
- 驅動程式必須在第一個 『.』 之前剖析通訊協定元件 (。) 。 任何無法辨識的通訊協議都必須完成STATUS_OBJECT_PATH_NOT_FOUND
- 如果字串不是以 NULL 結尾的緩衝區長度,驅動程式必須以STATUS_INVALID_PARAMETER完成 IOCTL。
- 如果通訊協定需要子類型,且字串緩衝區的子類型元件小於一個 (1) 字元或超過 250 個字元,驅動程式必須以STATUS_INVALID_PARAMETER完成 IOCTL。
- 如果字串緩衝區的通訊協定元件超過 250 個字元,驅動程式必須以STATUS_INVALID_PARAMETER完成 IOCTL。
- 驅動程式必須將第一個NULL解譯為字串結尾。
- 驅動程式可以辨識訂用帳戶的「配對:藍牙」類型。
- 驅動程式必須辨識 「WindowsUri」 類型。
- 驅動程式必須只辨識訂用帳戶的 「DeviceArrived」 類型。
- 驅動程式只能辨識訂用帳戶的 “DeviceDeparted” 類型。
- 驅動程式只能辨識訂用帳戶的「WindowsMime」類型。
- 驅動程式必須辨識 「WindowsMime.」 類型。
- 如果只能辨識訂用帳戶的通訊協定,且IOCTL指定 「Pubs\」,驅動程序必須以STATUS_OBJECT_PATH_NOT_FOUND完成IOCTL。
- 如果通訊協定只應該辨識發行集,且 IOCTL 指定 「Subs\」,驅動程式必須以STATUS_OBJECT_PATH_NOT_FOUND完成 IOCTL。
- 保留部分通訊協定 (命名空間) 。 除非在本文件中明確指定,否則驅動程式不得辨識以下列開頭的任何通訊協定:
- "Windows"
- “裝置”
- “配對”
- “NDEF”
- 相同類型的兩個開啟句柄必須代表兩個不同的實體。
- 如果 CreateFile 成功,句柄現在是「訂用帳戶句柄」,且「不得」變更為任何其他類型的句柄。
- 這個 IOCTL 成功之後,並在句柄關閉之前,每次透過符合此訂閱類型的鄰近技術收到訊息時,該訊息的數據必須附加至檔句柄,才能傳遞至用戶端。
取消訂閱
用戶端會關閉訂用帳戶句柄,以停止接收訊息。 如果客戶端進程終止,系統會代表用戶端關閉所有開啟的檔句柄。
必要動作
關閉句柄時,驅動程式必須回收訂用帳戶所使用的所有記憶體:
- 驅動程式必須回收類型字串數據。
- 接收的佇列必須清除並回收。
- 任何手寫筆 IOCTL 都必須使用 STATUS_CANCELLED 來完成。
惡意對等
如果惡意對等裝置嘗試透過鄰近技術 (DOS) 攻擊拒絕服務,則用戶端可能無法快速清空「已接收」佇列,以避免驅動程式使用過多的記憶體。
必要動作
如果收到 50 則訊息目前位於「已接收」佇列中時,驅動程式「不得」將指定的訊息排入佇列或傳遞給用戶端, () 捨棄最新的訊息。
沒有回應或行為錯誤用戶端
如果客戶端無法傳送 10 到 20 秒 [10-20sec] 期間所需的 IOCTL_NFP_GET_NEXT_SUBSCRIBED_MESSAGE 要求,而停止清空「已接收」佇列,則驅動程式應該假設用戶端已消失。 在正常情況下,客戶端應該在一秒 [1s] 內重新整理其要求。 如果發生這種情況,驅動程式必須將 「CompleteEventImmediately」 計數器設定為零,而且必須等到用戶端喚醒並傳送必要的 IRP 之後,才遞增計數器。
必要動作
驅動程式必須將 「CompleteEventImmediately」 計數器設定為零,如果用戶端尚未在 IOCTL 完成前 10 - 20 秒內傳送取代 IOCTL_NFP_GET_NEXT_SUBSCRIBED_MESSAGE ,則不得遞增計數器。
格式錯誤的訊息
用戶端可能會卸除或忽略從 IOCTL_NFP_GET_NEXT_SUBSCRIBED_MESSAGE 傳回STATUS_BUFFER_OVERFLOW) 以外的所有错误 (。 因此,驅動程式不應該完成這些錯誤狀況,只是因為收到格式不正確的訊息。
必要動作
驅動程式不得將大於允許訊息大小上限的訊息傳遞給用戶端。
驅動程式「不應該」將長度為零的訊息傳遞給用戶端。
驅動程式不得將部分訊息傳遞給訂閱者。
驅動程式不得將訊息傳遞至失敗強式CRC的用戶端。
注意 NFC 論壇認證可保證啟用 NFC 的 NFP 提供者。
驅動程式必須使用強式可靠傳輸和/或嘗試重新傳輸失敗強式CRC的訊息。
注意 NFC 論壇認證可保證啟用 NFC 的 NFP 提供者。
重複的訂閱
驅動程式應該假設如果客戶端訂閱訊息類型兩次,這是因為用戶端想要在收到訊息時收到訊息兩次。
必要動作
驅動程式必須接受並報告重複的訂閱,即使由相同的用戶端訂閱也一樣。