次の方法で共有


CM_RESOURCE_LIST 構造体 (wdm.h)

CM_RESOURCE_LIST構造体は、デバイスに割り当てられているすべてのシステム ハードウェア リソースを指定します。

構文

typedef struct _CM_RESOURCE_LIST {
  ULONG                       Count;
  CM_FULL_RESOURCE_DESCRIPTOR List[1];
} CM_RESOURCE_LIST, *PCM_RESOURCE_LIST;

メンバー

Count

このCM_RESOURCE_LIST構造体で指定された完全なリソース記述子 数。 List メンバーは、最初の完全なリソース記述子のヘッダーです。 WDM ドライバーの場合、 Count は常に 1 です。

List[1]

最初の完全なリソース記述子のヘッダーとして機能する CM_FULL_RESOURCE_DESCRIPTOR 構造体。 CM_RESOURCE_LIST構造体に複数の完全なリソース記述子が含まれている場合、2 番目の完全なリソース記述子は、メモリ内の 1 つ目の直後に続きます。 各完全なリソース記述子のサイズは、含まれる CM_PARTIAL_RESOURCE_DESCRIPTOR 配列の長さによって異なります。 詳細については、「解説」を参照してください。

注釈

この構造では、デバイスへのハードウェア リソースの割り当てを説明します。 IRP_MN_START_DEVICE IRP は、この構造体を使用して、プラグ アンド プレイ マネージャーがデバイスに割り当てるリソースを指定します。 レガシ デバイスのドライバーは、この構造体を使用して、リソース要件を IoReportResourceForDetection ルーチンに渡します。 ハードウェア リソースの割り当ての詳細については、「 ハードウェア リソース」を参照してください。

CM_RESOURCE_LIST構造体は、1 つ以上の完全なリソース記述子を含む、変数サイズの大きなデータ構造のヘッダーです。 この大きな構造のすべてのデータは、連続するメモリ ブロックを占有します。 各完全なリソース記述子は、大きなブロック内のサブブロックを占有します。

完全なリソース記述子は 、CM_FULL_RESOURCE_DESCRIPTOR 構造体で始まります。これは、 CM_PARTIAL_RESOURCE_DESCRIPTOR 構造体の配列のヘッダーとして機能します。 この配列の長さは、リソース記述子全体のサイズを決定します。 CM_FULL_RESOURCE_DESCRIPTOR 構造体の最後のメンバーはこの配列の最初の要素を最後のメンバーとして含むCM_PARTIAL_RESOURCE_LIST構造体です。 配列に複数の要素が含まれている場合、残りの要素は、メモリ内の CM_PARTIAL_RESOURCE_LIST 構造体の末尾 ( CM_FULL_RESOURCE_DESCRIPTOR 構造体の末尾でもあります) の直後に続きます。

ドライバー コードでは、ポインターの算術演算を使用して、完全なリソース記述子から次のリソース記述子にステップ実行できます。 たとえば、 list という名前のパラメーターが、1 つの完全なリソース記述子の先頭にある CM_FULL_RESOURCE_DESCRIPTOR 構造体へのポインターである場合、 list は次のように次の完全なリソース記述子の先頭を指すように更新できます。

list = (PCM_FULL_RESOURCE_DESCRIPTOR)(list->PartialResourceList.PartialDescriptors +
                                        list->PartialResourceList.Count);

この例では、 list->PartialResourceList.PartialDescriptorsCM_PARTIAL_RESOURCE_DESCRIPTOR 配列の先頭へのポインターであり list->PartialResourceList.Count 、配列内の要素の数です。 PartialDescriptors メンバーと Count メンバーの詳細については、「CM_PARTIAL_RESOURCE_LIST」を参照してください。

すべての PnP ドライバーは 、IRP_MN_START_DEVICE IRP を処理する必要があります。 通常、この IRP のドライバーハンドラーは、IRP のIO_STACK_LOCATION構造体の Parameters.StartDevice.AllocatedResources メンバーと Parameters.StartDevice.AllocatedResourcesTranslated メンバーが指す割り当てられたリソースの一覧を示します。 次のコード例には、ハンドラーで呼び出される GetAssignedResources という名前の関数が含まれています。 この関数は、必要なリソースが一覧で指定されていることを確認し、リソースを使用するようにデバイスを構成します。

GetAssignedResources 関数は、成功した場合に TRUE を 返します。 それ以外の場合は FALSE 返します (コード例を簡略化するために詳細は省略されていますが、 おそらく switch ステートメントから)。

/* Process the assigned hardware resources. */

BOOLEAN GetAssignedResources(PCM_RESOURCE_LIST reslist)
{
    PCM_FULL_RESOURCE_DESCRIPTOR list;

    list = reslist->List;

    for (int ix = 0; ix < reslist->Count; ++ix)
    {
        /* Process resources in CM_FULL_RESOURCE_DESCRIPTOR block number ix. */

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

            desc = list->PartialResourceList.PartialDescriptors + jx;

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

                ...

            }
        }

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

        list = (PCM_FULL_RESOURCE_DESCRIPTOR)(list->PartialResourceList.PartialDescriptors + 
                                              list->PartialResourceList.Count);
    }

    return TRUE;
}

要件

要件
Header wdm.h (Wdm.h、Ntddk.h、Ntifs.h、Wudfwdm.h を含む)

こちらもご覧ください

CM_FLOPPY_DEVICE_DATA

CM_FULL_RESOURCE_DESCRIPTOR

CM_KEYBOARD_DEVICE_DATA

CM_PARTIAL_RESOURCE_LIST

CM_RESOURCE_LIST

CM_SCSI_DEVICE_DATA

CM_SERIAL_DEVICE_DATA

IRP_MN_START_DEVICE

IoConnectInterrupt

IoGetDeviceProperty

IoReportResourceForDetection