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 |
ヘッダー | wdfresource.h (Wdf.h を含む) |
ライブラリ | Wdf01000.sys (フレームワーク ライブラリのバージョン管理を参照)。 |
IRQL | <=DISPATCH_LEVEL |
DDI コンプライアンス規則 を する | DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf) |