ScsiPortWmiSetInstanceName 函式 (scsiwmi.h)

ScsiPortWmiSetInstanceName 例程會更新要求內容中的WNODE_ALL_DATA結構,以指定實例名稱的位置和長度。

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

語法

PWCHAR ScsiPortWmiSetInstanceName(
  [in]      PSCSIWMI_REQUEST_CONTEXT RequestContext,
  [in]      ULONG                    InstanceIndex,
  [in]      ULONG                    InstanceNameLength,
  [out]     PULONG                   BufferAvail,
  [in, out] PULONG                   SizeNeeded
);

參數

[in] RequestContext

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

[in] InstanceIndex

包含索引,這個索引表示要指定實例名稱的位置和長度。

[in] InstanceNameLength

指定實例名稱的位元組大小。

[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

如果沒有足夠的記憶體可用來新增長度 為 InstanceNameLength 的實例名稱, BufferAvail 成員中將會傳回零。

[in, out] SizeNeeded

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

傳回值

ScsiPortWmiSetInstanceCount 例程會傳回緩衝區的指標,讓呼叫端可以儲存 InstanceIndex 中指定的實例名稱。 如果 ScsiPortWmiSetInstanceCount 無法為實例名稱配置足夠的記憶體,或要求內容中包含的 WNODE 不是類型WNODE_ALL_DATA,ScsiPortWmiSetData 會傳回 NULL。

備註

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

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

ScsiPortWmiSetInstanceName 例程需要要求內容中定義的 WNODE 結構必須是類型WNODE_ALL_DATA。 這是因為 ScsiPortWmiSetInstanceName 可以為任何與 WMI 數據區塊相關聯的實例設定實例名稱區域。 不同於包含單一實例資訊的 WNODE_SINGLE_INSTANCE 結構,WNODE_ALL_DATA結構包含不同實例緩衝區區域的指標數位,而 ScsiPortWmiSetInstanceCount 會初始化此數位,以便個別存取實例數據的每個緩衝區。

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

規格需求

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

另請參閱

SCSIWMI_REQUEST_CONTEXT

WNODE_ALL_DATA

WNODE_SINGLE_INSTANCE