PSCSIWMI_EXECUTE_METHOD回呼函式 (scsiwmi.h)
系統會呼叫迷你埠驅動程式的 HwScsiWmiExecuteMethod 例程來執行與數據區塊相關聯的方法。 此例程是選擇性的。
語法
PSCSIWMI_EXECUTE_METHOD PscsiwmiExecuteMethod;
BOOLEAN PscsiwmiExecuteMethod(
[in] PVOID DeviceContext,
[in] PSCSIWMI_REQUEST_CONTEXT RequestContext,
[in] ULONG GuidIndex,
[in] ULONG InstanceIndex,
[in] ULONG MethodId,
[in] ULONG InBufferSize,
[in] ULONG OutBufferSize,
[in, out] PUCHAR Buffer
)
{...}
參數
[in] DeviceContext
指向傳遞至 ScsiPortWmiDispatchFunction 的迷你埠驅動程式定義內容值。
[in] RequestContext
指向迷你埠驅動程序傳遞至 ScsiPortWmiDispatchFunction 的SCSIWMI_REQUEST_CONTEXT結構。
[in] GuidIndex
將數據區塊的索引指定至迷你埠驅動程序傳遞至 ScsiPortWmiDispatchFunction 之 SCSI_WMILIB_CONTEXT 結構中的 GUID 清單。
[in] InstanceIndex
如果 GuidIndex 指定的區塊有多個實例, InstanceIndex 會指定 實例。
[in] MethodId
指定要執行之方法的識別碼。 迷你埠驅動程式會將方法標識元定義為數據區塊中的專案。
[in] InBufferSize
表示輸入數據位元組的大小。 如果沒有輸入數據, InBufferSize 為零。
[in] OutBufferSize
指出緩衝區中可用的輸出數據位元組數目。
[in, out] Buffer
指向保存輸入數據的緩衝區,並從方法接收輸出數據。 如果緩衝區太小而無法接收所有輸出,迷你埠驅動程式會呼叫 ScsiPortWmiPostProcess ,並具有SRB_STATUS_DATA_OVERRUN和所需的大小。
傳回值
HwScsiWmiExecuteMethod 會在要求擱置時傳回SRB_STATUS_PENDING,如果要求已完成,則傳回非零 SRB 狀態值。 此例程傳回的SRB狀態值與傳入 ScsiPortWmiPostProcess的內容相同。 雖然傳回值數據類型是 BOOLEAN,但 HwScsiWmiExecuteMethod 例程實際上會傳回 SRB 狀態值。
備註
當迷你埠驅動程式收到 SRB 時,函式成員設定為 SRB_FUNCTION_WMI,它會使用初始化SCSI_WMILIB_CONTEXT結構的指標呼叫 ScsiPortWmiDispatchFunction,並將 MinorFunction 設定為 Srb-WmiSubFunction>。 如果 MinorFunction 指出執行方法的要求,SCSI 埠驅動程式會呼叫迷你埠驅動程式的 HwScsiWmiExecuteMethod 例程。
如果迷你埠驅動程式未實作 HwScsiWmiExecuteMethod 例程,則必須 SCSI_WMILIB_CONTEXT在 miniport 驅動程式傳遞至 ScsiPortWmiDispatchFunction 時,將 ExecuteWmiMethod 設定為 NULL。 在此情況下,埠驅動程式會將SRB_STATUS_ERROR傳回給呼叫端。
如果方法產生輸出,迷你埠驅動程序應該先檢查 OutBufferSize 中的輸出緩衝區大小,再執行任何可能有副作用或不應該執行兩次的作業。 例如,如果方法傳回計數器群組的值,然後重設計數器,迷你埠驅動程序應該先檢查緩衝區大小,再重設計數器。 這可確保埠驅動程式可以使用較大的緩衝區安全地重新傳送要求。 如果緩衝區太小,迷你埠驅動程序應該使用 SRB_STATUS_DATA_OVERRUN 呼叫 ScsiPortWmiPostProcess ,以及滿足要求所需的輸出緩衝區大小。
迷你埠驅動程式會執行 方法,並在任何情況下將輸出寫入緩衝區。 從 HwScsiWmiExecuteMethod 傳回之前,迷你埠驅動程式會使用適當的 SrbStatus 值和輸出緩衝區中使用的位元元組數目呼叫 ScsiPortWmiPostProcess。
規格需求
需求 | 值 |
---|---|
目標平台 | 桌面 |
標頭 | scsiwmi.h (包含 Scsiwmi.h) |