ScsiPortWmiSetData 函式 (scsiwmi.h)

ScsiPortWmiSetData常式會更新要求內容中的WNODE_ALL_DATA結構,以指定實例資料的位置和長度。

注意 SCSI 埠驅動程式和 SCSI 迷你埠驅動程式模型未來可能會改變或無法使用。 相反地,我們建議使用 Storport 驅動程式Storport 迷你埠 驅動程式模型。
 

語法

PVOID ScsiPortWmiSetData(
  [in]      PSCSIWMI_REQUEST_CONTEXT RequestContext,
  [in]      ULONG                    InstanceIndex,
  [in]      ULONG                    DataLength,
  [out]     PULONG                   BufferAvail,
  [in, out] PULONG                   SizeNeeded
);

參數

[in] RequestContext

包含 WMI SRB 要求內容 之類型結構SCSIWMI_REQUEST_CONTEXT 的指標。

[in] InstanceIndex

包含索引,指出要指定實例資料的位置和長度的實例。

[in] DataLength

指定描述 實例所需的資料位元組數目。

[out] BufferAvail

在輸入時,必須包含 WNODE_ALL_DATA結構中 可用來描述實例名稱和資料的緩衝區空間位元組數目。 傳回時,這個成員包含剩餘的緩衝區空間位元組數目。

有三個 SCSI 埠 WMI 常式會傳回其 BufferAvail 參數中可用緩衝區大小的值:

ScsiPortWmiSetInstanceCount

ScsiPortWmiSetData

ScsiPortWmiSetInstanceName

迷你埠驅動程式必須先呼叫 ScsiPortWmiSetInstanceCount ,但在 呼叫 ScsiPortWmiSetInstanceCount 之後,迷你驅動程式呼叫 ScsiPortWmiSetDataScsiPortWmiSetInstanceName的順序並不重要。 呼叫 ScsiPortWmiSetDataScsiPortWmiSetInstanceName時,其 BufferAvail 參數中傳遞至常式的值必須與最近稱為 SCSI 埠 WMI 常式的 BufferAvail 參數中所傳回的值相同。 例如,假設迷你驅動程式會先呼叫 ScsiPortWmiSetInstanceCount ,而且此常式會在其 BufferAvail 參數中傳回 1,000 的值。 接下來,迷你驅動程式會呼叫 ScsiPortWmiSetData ,以傳回 其 BufferAvail 參數中的值 500。 最後,迷你驅動程式會呼叫 ScsiPortWmiSetInstanceName ,以在其 BufferAvail 參數中傳回 200 的值。 1,000 的初始值必須傳遞至BufferAvail中的ScsiPortWmiSetData,且 500 的值必須傳遞至ScsiPortWmiSetInstanceName

如果沒有足夠的記憶體可用來新增大小為 DataLength位元組的新實例資料BufferAvail成員中將會傳回零。

[in, out] SizeNeeded

表示在輸入時,為InstanceIndex所指定的實例新增描述性資料之前,描述整個 WNODE 所需的位元組數目。 傳回時,這個成員會包含 WNODE 的大小,包括新實例的資料。

傳回值

ScsiPortWmiSetData常式會傳回緩衝區的指標,讓呼叫端可以儲存InstanceIndex所識別之實例的描述性資訊。 如果 ScsiPortWmiSetData 無法為實例資料配置足夠的記憶體,或要求內容中包含的 WNODE 不是 類型WNODE_ALL_DATAScsiPortWmiSetData 會傳回 Null

備註

minidriver 必須先呼叫 ScsiPortWmiSetInstanceCount ,才能呼叫 ScsiPortWmiSetData

RequestCoNtext參數指向要求內容結構SCSIWMI_REQUEST_CONTEXT,其中包含與Windows Management Instrumentation (WMI) SCSI 要求區塊 (SRB) 相關聯的資訊。 接著,要求內容結構會包含 WMI WNODE_XXX 結構 之一,WMI 系統會使用此結構在使用者模式資料取用者與核心模式資料提供者之間傳遞資料,例如驅動程式。

ScsiPortWmiSetData常式要求要求內容中定義的 WNODE 結構必須是類型WNODE_ALL_DATA。 這是因為 ScsiPortWmiSetData 可以為任何與 WMI 資料區塊相關聯的實例指定資料緩衝區的位置和長度。 不同于包含單一實例資訊的 WNODE_SINGLE_INSTANCE 結構,WNODE_ALL_DATA結構包含多個實例緩衝區區域的指標陣列,而 ScsiPortWmiSetData 會使用 InstanceIndex 參數做為此陣列的索引,來初始化特定實例的適當陣列元素。 每個陣列元素一旦初始化,就會包含實例緩衝區區域的大小和位置。

配置給要求內容的記憶體必須維持有效狀態,直到迷你埠驅動程式呼叫 ScsiPortWmiPostProcess之後, ScsiPortWmiPostProcess 才會傳回最終的 SRB 狀態和緩衝區大小。 如果 SRB 可以畫筆,應該從 SRB 擴充功能配置要求內容的記憶體。 如果 SRB 無法畫筆,則可以從未超出範圍的堆疊框架配置記憶體。

規格需求

   
目標平臺 桌面
標頭 scsiwmi.h (包括 Miniport.h、Scsi.h)

另請參閱

SCSIWMI_REQUEST_CONTEXT

WNODE_ALL_DATA

WNODE_SINGLE_INSTANCE