共用方式為


IO_RESOURCE_REQUIREMENTS_LIST結構 (wdm.h)

IO_RESOURCE_REQUIREMENTS_LIST 結構描述裝置可以使用的資源組態集。 每個組態都代表各種類型的原始資源範圍,可由裝置使用。

語法

typedef struct _IO_RESOURCE_REQUIREMENTS_LIST {
  ULONG            ListSize;
  INTERFACE_TYPE   InterfaceType;
  ULONG            BusNumber;
  ULONG            SlotNumber;
  ULONG            Reserved[3];
  ULONG            AlternativeLists;
  IO_RESOURCE_LIST List[1];
} IO_RESOURCE_REQUIREMENTS_LIST, *PIO_RESOURCE_REQUIREMENTS_LIST;

成員

ListSize

構成 IO_RESOURCE_REQUIREMENTS_LIST 結構的位元組總數、其 IO_RESOURCE_LIST 陣列,以及後者的 IO_RESOURCE_DESCRIPTOR 陣列。

InterfaceType

指定介面類型。 這必須是 Wdm.h 或 Ntddk.h 中 INTERFACE_TYPE所定義的其中一種類型。 (WDM 驅動程式未使用。

BusNumber

系統指派、以零起始的總線號碼。 (WDM 驅動程式未使用。

SlotNumber

系統插槽編號。 (WDM 驅動程式未使用。

Reserved[3]

保留。

AlternativeLists

這個 IO_RESOURCE_REQUIREMENTS_LIST 結構所描述的硬體資源替代清單(或組態)數目。 清單 成員是第一個替代清單的標頭。

List[1]

作為第一個硬體資源替代清單標頭的 IO_RESOURCE_LIST 結構。 如果 IO_RESOURCE_REQUIREMENTS_LIST 結構描述多個替代清單,則第二個替代清單會緊接在記憶體中的第一個替代清單之後,依此列出。 每個替代清單的大小取決於它所包含的 IO_RESOURCE_DESCRIPTOR 陣列長度。 如需詳細資訊,請參閱下列一節。

言論

IRP_MN_FILTER_RESOURCE_REQUIREMENTSIRP_MN_QUERY_RESOURCE_REQUIREMENTS IRP 會使用此結構來描述 硬體資源的一或多個替代組態。

IO_RESOURCE_REQUIREMENTS_LIST 結構是較大數據結構的標頭,其大小不一,可指定一或多個資源的替代清單。 這個較大結構中的所有數據都會佔用連續的記憶體區塊,其大小是由 ListSize 成員指定。 每個替代清單都會佔用較大區塊內的子區塊。

每個替代清單的開頭都是 IO_RESOURCE_LIST 結構,其做為 IO_RESOURCE_DESCRIPTOR 結構陣列的標頭。 此陣列的長度會決定清單的大小,而清單的大小可能會從一個替代清單變更為下一個清單。 驅動程式程式代碼可以使用指標算術,從一個替代清單逐步執行到下一個。 例如,如果名為 list 的參數是替代清單開頭 IO_RESOURCE_LIST 結構的指標,則可以更新 清單,以指向下一個清單的開頭,如下所示:

list = (PIO_RESOURCE_LIST)(list->Descriptors + list->Count);

在此範例中,list->DescriptorsIO_RESOURCE_DESCRIPTOR 陣列開頭的指標,而 list->Count 是陣列中的元素數目。 如需 描述元計數 成員的詳細資訊,請參閱 IO_RESOURCE_LIST

例子

如果驅動程式包含 IRP_MN_FILTER_RESOURCE_REQUIREMENTS IRP 的處理程式,處理程式通常會在 IRP 中 IoStatus.Information 欄位所指向的資源清單。 下列程式代碼範例包含名為 FilterResources 的函式,該函式會在處理程式中呼叫以逐步執行清單。 此函式會驗證清單中指定了特定資源,或變更清單中的資源需求,而不需要變更清單的大小。 (變更清單大小的函式需要配置更新清單的緩衝區、將清單寫入此緩衝區、更新 IRP 中的 IoStatus.Information 字段,以指向更新的清單,並釋放包含原始列表的緩衝區。

FilterResources 函式會傳回 true true (可能來自 參數 語句,不過如果詳細數據省略以簡化程式代碼範例),則它會在清單中找到它所尋找的資源,或是對不會變更清單大小的清單進行變更。 否則,它會 FALSE傳回 。

/* Modify the resource list in place (without changing its size). */

BOOLEAN FilterResources(PIO_RESOURCE_REQUIREMENTS_LIST reqlist)
{
    PIO_RESOURCE_LIST list;

    list = reqlist->List;

    for (int ix = 0; ix < reqlist->AlternativeLists; ++ix)
    {
        /* Process resources in IO_RESOURCE_LIST block number ix. */

        for (int jx = 0; jx < list->Count; ++jx)
        {
            PIO_RESOURCE_DESCRIPTOR desc; 

            desc = list->Descriptors + jx;

            switch (desc->Type)
            {
               /* Process element jx in Descriptors array. */

               ...

            }
        }

        /* Advance to next IO_RESOURCE_LIST block in memory. */

        list = (PIO_RESOURCE_LIST)(list->Descriptors + list->Count);
    }

    return FALSE;
}

要求

要求 價值
標頭 wdm.h (包括 Wdm.h、Ntddk.h、Ntifs.h、Miniport.h)

另請參閱

IO_RESOURCE_DESCRIPTOR

IO_RESOURCE_LIST

IRP_MN_FILTER_RESOURCE_REQUIREMENTS

IRP_MN_QUERY_RESOURCE_REQUIREMENTS