共用方式為


EVT_SERCX2_CUSTOM_RECEIVE_TRANSACTION_START回呼函式 (sercx.h)

EvtSerCx2CustomReceiveTransactionStart 事件回呼函式是由序列架構延伸模組第 2 版 (SerCx2) 呼叫,以啟動自定義接收交易。

語法

EVT_SERCX2_CUSTOM_RECEIVE_TRANSACTION_START EvtSercx2CustomReceiveTransactionStart;

void EvtSercx2CustomReceiveTransactionStart(
  [in] SERCX2CUSTOMRECEIVETRANSACTION CustomReceiveTransaction,
  [in] WDFREQUEST Request,
  [in] PMDL Mdl,
  [in] ULONG Offset,
  [in] ULONG Length
)
{...}

參數

[in] CustomReceiveTransaction

自訂接收交易物件的 SERCX2CUSTOMRECEIVETRANSACTION 句柄。 序列控制器驅動程式先前稱為 SerCx2CustomReceiveTransactionCreate 方法來建立此物件。

[in] Request

與自定義接收交易相關聯的架構要求物件的句柄。 驅動程式負責完成此要求。 此要求可能不是用戶端所傳送的 IRP_MJ_READ 要求,因此序列控制器驅動程式不應該嘗試使用此要求來存取讀取緩衝區。 此要求主要用於取消、完成和佇列轉送(如有需要)。 若要存取用戶端讀取要求的讀取緩衝區,請使用 MdlOffsetLength 參數。

[in] Mdl

MDL 的指標,描述自定義接收交易讀取緩衝區所跨越的記憶體頁面。 數據傳輸的散佈/收集清單會使用 OffsetLength 參數所指定的此記憶體區域。

[in] Offset

數據傳輸的起始位移。 此參數是 MDL 所描述之緩衝區區域開頭的位元移。 如果 MDL 指定緩衝區空間的 N 個字節總計,Offset 的可能值會介於 0 到 N–1 的範圍內。

[in] Length

數據傳輸的大小,以位元組為單位。 如果 MDL 指定緩衝區空間的 N 個字節總計,Length 的可能值介於 1 到 N–Offset之間。

傳回值

沒有

言論

如果您的序列控制器驅動程式建立自定義接收交易物件,則必須實作此函式。 驅動程式會在建立此物件的 SerCx2CustomReceiveTransactionCreate 呼叫中註冊函式。

在 SerCx2 呼叫 EvtSerCx2CustomReceiveTransactionStart 函式之後,序列控制器驅動程式會藉由程式設計自定義數據傳輸機制,將數據從序列控制器硬體中的接收 FIFO 移至讀取要求中的緩衝區來起始交易。 除非要求可以立即完成,否則在 EvtSerCx2CustomReceiveTransactionStart 函式傳回之前,驅動程式必須呼叫 WdfRequestMarkCancelableEx 等方法,將要求標示為可取消。

EvtSerCx2CustomReceiveTransactionStart 函式啟動交易之後,SerCx2 會定期呼叫 EvtSerCx2CustomReceiveTransactionQueryProgress 事件回呼函式,以監視序列控制器驅動程式執行此交易時所進行進度。 交易完成且驅動程式完成暫止讀取要求之後,如果驅動程序實作此函式,SerCx2 會呼叫 EvtSerCx2CustomReceiveTransactionCleanup 事件回呼函式。

如果序列控制器驅動程序實作 EvtSerCx2CustomReceiveTransactionInitialize 事件回呼函式,則 SerCx2 會在呼叫 EvtSerCx2CustomReceiveTransactionStart 函式之前呼叫此函式。 就在 EvtSerCx2CustomReceiveTransactionStart 呼叫之前,以及在 EvtSerCx2CustomReceiveTransactionInitialize 呼叫傳回之後,SerCx2 會啟動偵測讀取要求是否逾時的定時器。如需詳細資訊,請參閱 SERIAL_TIMEOUTS中總逾時的討論。

如果自定義數據傳輸機制是總線主要 DMA 裝置, EvtSerCx2CustomReceiveTransactionStart 函式可以呼叫方法,例如 WdfDmaTransactionInitializeUsingOffset 來起始使用 MdlOffsetLength 參數所描述的 DMA 交易。

如果 Request 參數所識別的要求物件包含私人內容的記憶體,則當序列控制器驅動程式第一次存取內容時,此記憶體可能會未初始化。 在第一次存取時,驅動程式通常應該以零填滿內容,然後視需要明確設定內容中需要非零初始值的任何字段。

如需詳細資訊,請參閱 SerCx2 Custom-Receive Transactions

例子

若要定義 EvtSerCx2CustomReceiveTransactionStart 回呼函式,您必須先提供函式宣告,以識別您要定義的回呼函式類型。 Windows 提供一組驅動程式的回呼函式類型。 使用回呼函式類型宣告函式有助於 驅動程式的程式代碼分析靜態驅動程式驗證器 (SDV)和其他驗證工具尋找錯誤,而且是撰寫 Windows 操作系統驅動程式的需求。

例如,若要定義名為 MyCustomReceiveTransactionStart 回呼函式,請使用 EVT_SERCX2_CUSTOM_RECEIVE_TRANSACTION_START 函式類型,如下列程式代碼範例所示:

EVT_SERCX2_CUSTOM_RECEIVE_TRANSACTION_START  MyCustomReceiveTransactionStart;

然後,實作回呼函式,如下所示:

_Use_decl_annotations_
VOID
  MyCustomReceiveTransactionStart(
    SERCX2CUSTOMRECEIVETRANSACTION  CustomReceiveTransaction,
    WDFREQUEST  Request,
    PMDL  Mdl,
    ULONG  Offset,
    ULONG  Length
    )
  {...}

EVT_SERCX2_CUSTOM_RECEIVE_TRANSACTION_START 函式類型定義於 Sercx.h 頭檔中。 若要在執行程式代碼分析工具時更準確地識別錯誤,請務必將 Use_decl_annotations 批註新增至函式定義。 Use_decl_annotations 批注可確保會使用套用至頭檔中 EVT_SERCX2_CUSTOM_RECEIVE_TRANSACTION_START 函式類型的批注。 如需函式宣告需求的詳細資訊,請參閱 使用 KMDF 驅動程式的函式角色類型來宣告函式。 如需 Use_decl_annotations的詳細資訊,請參閱 批注函式行為

要求

要求 價值
最低支援的用戶端 從 Windows 8.1 開始提供。
目標平臺 桌面
標頭 sercx.h
IRQL 在 IRQL <= DISPATCH_LEVEL 呼叫。

另請參閱

IRP_MJ_READ

MDL

SERCX2CUSTOMRECEIVETRANSACTION

SERIAL_TIMEOUTS

SerCx2CustomReceiveTransactionCreate

WdfDmaTransactionInitializeUsingOffset

WdfRequestMarkCancelableEx