WdfCmResourceListRemoveByDescriptor 関数 (wdfresource.h)
[KMDF にのみ適用]
WdfCmResourceListRemoveByDescriptor メソッドは、指定したリソースリストから指定されたリソース記述子を削除します。
構文
void WdfCmResourceListRemoveByDescriptor(
[in] WDFCMRESLIST List,
[in] PCM_PARTIAL_RESOURCE_DESCRIPTOR Descriptor
);
パラメーター
[in] List
デバイスのハードウェア リソースの一覧を表すフレームワーク リソースリスト オブジェクトへのハンドル。
[in] Descriptor
ハードウェア リソースを記述する CM_PARTIAL_RESOURCE_DESCRIPTOR 構造体へのポインター。
戻り値
なし
解説
ドライバーが無効なオブジェクト ハンドルを提供すると、バグ チェックが発生します。
WdfCmResourceListRemoveByDescriptor メソッドは、Descriptor パラメーターに一致するリソース記述子を削除します。 一致するものを見つけるために、 メソッドは、指定されたリソース記述子と論理構成のリソース記述子 (バイトのバイト) を比較します。
WdfCmResourceListRemoveByDescriptor がインデックス値 n を持つリソース記述子を削除すると、次のリソース記述子のインデックス値が n+1 から n に変わります。
リソース リストの詳細については、「 Framework-Based ドライバーのハードウェア リソース」を参照してください。
例
次のコード例では、デバイスのリソース リストでポート リソース記述子を検索します。 この例で見つけたポート リソースごとに、ポート アドレスが特定の範囲内にあるかどうかを確認します。 ポート アドレスが範囲外の場合、この例では 、未加工のリソース リストと変換されたリソース リストの両方から記述子を削除します。
NTSTATUS
MyEvtDeviceRemoveAddedResources(
WDFDEVICE Device,
WDFCMRESLIST ResourcesRaw,
WDFCMRESLIST ResourcesTranslated
)
{
ULONG i, count;
pDevExt = DeviceGetExtension(Device);
count = WdfCmResourceListGetCount(ResourcesRaw);
for (i = 0; i < count; i++) {
PCM_PARTIAL_RESOURCE_DESCRIPTOR descriptor;
descriptor = WdfCmResourceListGetDescriptor(
ResourcesRaw,
i
);
if (descriptor->Type != CmResourceTypePort) {
continue;
}
if (descriptor->u.Port.Start.QuadPart < pDevExt->Ranges[0].MinAddress ||
descriptor->u.Port.Start.QuadPart > pDevExt->Ranges[0].MaxAddress)
{
WdfCmResourceListRemoveByDescriptor(
ResourcesRaw,
descriptor
);
// The descriptor may not be the same in the raw and translated resource lists, so use an index for the second removal
WdfCmResourceListRemove(
ResourcesTranslated,
i
);
break;
}
}
}
要件
要件 | 値 |
---|---|
対象プラットフォーム | ユニバーサル |
最小 KMDF バージョン | 1.0 |
Header | wdfresource.h (Wdf.h を含む) |
Library | Wdf01000.sys (「Framework ライブラリのバージョン管理」を参照)。 |
IRQL | <=DISPATCH_LEVEL |
DDI コンプライアンス規則 | DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf) |