PSCSIWMI_QUERY_DATABLOCK回呼函式 (scsiwmi.h)
會呼叫迷你埠驅動程式 HwScsiWmiQueryDataBlock 例程,以取得單一實例或數據區塊的所有實例。 這是必要例程。
PSCSIWMI_QUERY_DATABLOCK PscsiwmiQueryDatablock;
BOOLEAN PscsiwmiQueryDatablock(
[in] PVOID Context,
[in] PSCSIWMI_REQUEST_CONTEXT DispatchContext,
[in] ULONG GuidIndex,
[in] ULONG InstanceIndex,
[in] ULONG InstanceCount,
[in, out] PULONG InstanceLengthArray,
[in] ULONG BufferAvail,
[out] PUCHAR Buffer
)
{...}
[in] Context
指向傳遞至 ScsiPortWmiDispatchFunction的迷你埠驅動程式定義內容值。
[in] DispatchContext
指向迷你埠驅動程序傳遞至 ScsiPortWmiDispatchFunctionSCSIWMI_REQUEST_CONTEXT 結構。
[in] GuidIndex
將數據區塊的索引指定為SCSI_WMILIB_CONTEXT結構中迷你埠驅動程序傳遞至 ScsiPortWmiDispatchFunction的 GUID 清單。
[in] InstanceIndex
如果在回應IRP_MN_QUERY_SINGLE_INSTANCE要求時呼叫 HwScsiWmiQueryDataBlock,InstanceIndex 指定要查詢的實例。 如果呼叫 HwScsiWmiQueryDataBlock 以回應IRP_MN_QUERY_ALL_DATA REQUEST,InstanceIndex 為零。
[in] InstanceCount
如果呼叫 HwScsiWmiQueryDataBlock 以回應IRP_MN_QUERY_SINGLE_INSTANCE要求,InstanceCount 為 1。 如果呼叫 HwScsiWmiQueryDataBlock 以回應IRP_MN_QUERY_ALL_DATA REQUEST,InstanceCount 為要傳回的實例數目。
[in, out] InstanceLengthArray
指向ULONG陣列,指出要傳回之數據區塊的每個實例長度。 此陣列具有 instanceCount 元素。 當輸出緩衝區中沒有足夠的空間滿足要求時,這個值可能會 NULL。
[in] BufferAvail
指定在緩衝區 緩衝區中接收資料的最大位元元組數目,。
[out] Buffer
指向要接收實例數據的緩衝區。 如果緩衝區夠大而無法接收所有數據,迷你埠驅動程式會將實例數據寫入緩衝區,且每個實例都對齊 8 位元組界限。 如果緩衝區太小而無法接收所有數據,迷你埠驅動程式會呼叫 ScsiPortWmiPostProcess 狀態為 SRB_STATUS_DATA_OVERRUN,並將 BufferUsed 設定為滿足要求所需的輸出緩衝區大小。
HwScsiWmiQueryDataBlock 如果要求擱置或要求已完成,則傳回SRB_STATUS_PENDING非零 SRB 狀態值。 這個例程傳回的SRB狀態值與傳入 ScsiPortWmiPostProcess相同。 雖然傳回值數據類型是 BOOLEAN,但 HwScsiWmiQueryDataBlock 例程實際上會傳回 SRB 狀態值。
當迷你埠驅動程式收到 SRB 時,函式 成員會設定為 SRB_FUNCTION_WMI,它會呼叫 ScsiPortWmiDispatchFunction,並將指標指向初始化的 SCSI_WMILIB_CONTEXT 結構,並將 MinorFunction 設為 Srb->WmiSubFunction。 如果 MinorFunction 表示取得單一實例或數據區塊所有實例的要求,SCSI 埠驅動程式會呼叫迷你埠驅動程式的 HwScsiWmiQueryDataBlock 例程。
迷你埠驅動程式會將實例數據寫入緩衝區。 對於未加上畫筆的要求,迷你埠驅動程式會先呼叫 ScsiPortWmiPostProcess,並具有適當的 SrbStatus 值,再從 HwScsiWmiQueryDataBlock傳回 。 如果要求畫筆,迷你埠驅動程式會在要求完成時呼叫 ScsiPortWmiPostProcess。
要求 | 價值 |
---|---|
目標平臺 | 桌面 |
標頭 | scsiwmi.h (包括 Scsiwmi.h) |