DRIVER_LIST_CONTROL回呼函式 (wdm.h)
AdapterListControl 例程會啟動直接記憶體存取 (DMA) 散佈/收集作業。
語法
DRIVER_LIST_CONTROL DriverListControl;
void DriverListControl(
[in] _DEVICE_OBJECT *DeviceObject,
[in] _IRP *Irp,
[in] PSCATTER_GATHER_LIST ScatterGather,
[in] PVOID Context
)
{...}
參數
[in] DeviceObject
呼叫端提供的 DEVICE_OBJECT 結構的指標。 這是目標裝置的裝置物件,先前是由驅動程式的 AddDevice 例程所建立。
[in] Irp
如果驅動程式有 StartIo 例程,則為 IRP 結構的呼叫端提供的指標,描述 I/O 作業。 否則,請勿使用。
[in] ScatterGather
描述散佈/收集區域之 SCATTER_GATHER_LIST 結構的呼叫端提供的指標。
[in] Context
呼叫端提供的驅動程式定義內容資訊指標,指定於先前呼叫 AllocateAdapterChannel。
傳回值
沒有
言論
若要註冊特定裝置物件的 AdapterListControl 例程,驅動程式必須呼叫 IoGetDmaAdapter 以取得配接器對象,然後 呼叫 getScatterGatherList 來要求使用配接器,並提供 AdapterListControl 例程位址。 當配接器可用時,系統會呼叫 AdapterListControl 例程。
例子
若要定義 AdapterListControl 回呼例程,您必須先提供函式宣告,以識別您要定義的回呼例程類型。 Windows 提供一組驅動程式的回呼函式類型。 使用回呼函式類型宣告函式有助於 驅動程式的程式代碼分析、靜態驅動程式驗證器 (SDV)和其他驗證工具尋找錯誤,而且是撰寫 Windows作系統驅動程式的需求。
例如,若要定義名為 MyAdapterListControl
的 AdapterListControl 回呼例程,請使用DRIVER_LIST_CONTROL類型,如下列程式代碼範例所示:
DRIVER_LIST_CONTROL MyAdapterListControl;
然後,實作回呼例程,如下所示:
_Use_decl_annotations_
VOID
MyAdapterListControl(
struct _DEVICE_OBJECT *DeviceObject,
struct _IRP *Irp,
PSCATTER_GATHER_LIST ScatterGather,
PVOID Context
)
{
// Function body
}
DRIVER_LIST_CONTROL函式類型定義於 Wdm.h 頭檔中。 若要在執行程式代碼分析工具時更準確地識別錯誤,請務必將 _Use_decl_annotations_
批註新增至函式定義。
_Use_decl_annotations_
批注可確保會使用套用至頭檔中DRIVER_LIST_CONTROL函式類型的批注。 如需函式宣告需求的詳細資訊,請參閱 使用 WDM 驅動程式的函式角色類型來宣告函式。 如需 _Use_decl_annotations_
的相關信息,請參閱 批注函式行為。
如需實作 AdapterListControl 例程的詳細資訊,請參閱使用散佈圖/收集 DMA 。
要求
要求 | 價值 |
---|---|
目標平臺 | 桌面 |
標頭 | wdm.h (包括 Wdm.h、Ntddk.h、Ntifs.h) |
IRQL | 在 DISPATCH_LEVEL呼叫。 |