Função WdfCmResourceListRemoveByDescriptor (wdfresource.h)

[Aplica-se somente ao KMDF]

O método WdfCmResourceListRemoveByDescriptor remove um descritor de recursos especificado de uma lista de recursos especificada.

Sintaxe

void WdfCmResourceListRemoveByDescriptor(
  [in] WDFCMRESLIST                    List,
  [in] PCM_PARTIAL_RESOURCE_DESCRIPTOR Descriptor
);

Parâmetros

[in] List

Um identificador para um objeto de lista de recursos da estrutura que representa uma lista de recursos de hardware para um dispositivo.

[in] Descriptor

Um ponteiro para uma estrutura CM_PARTIAL_RESOURCE_DESCRIPTOR que descreve um recurso de hardware.

Retornar valor

Nenhum

Comentários

Um bug marcar ocorrerá se o driver fornecer um identificador de objeto inválido.

O método WdfCmResourceListRemoveByDescriptor remove o descritor de recurso que corresponde ao parâmetro Descriptor . Para localizar uma correspondência, o método compara o descritor de recursos especificado com os descritores de recurso na configuração lógica, byte para byte.

Quando WdfCmResourceListRemoveByDescriptor remove o descritor de recurso que tem o valor de índice n, o valor de índice do próximo descritor de recursos muda de n+1 para n.

Para obter mais informações sobre listas de recursos, consulte Recursos de hardware para drivers de Framework-Based.

Exemplos

O exemplo de código a seguir procura descritores de recursos de porta nas listas de recursos de um dispositivo. Para cada recurso de porta que o exemplo encontra, ele verifica se o endereço da porta está dentro de um determinado intervalo. Se o endereço da porta estiver fora do intervalo, o exemplo removerá o descritor das listas de recursos brutos e traduzidos.

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;
        }
    }
}

Requisitos

Requisito Valor
Plataforma de Destino Universal
Versão mínima do KMDF 1.0
Cabeçalho wdfresource.h (inclua Wdf.h)
Biblioteca Wdf01000.sys (consulte Controle de versão da biblioteca de estrutura.)
IRQL <=DISPATCH_LEVEL
Regras de conformidade de DDI DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf)

Confira também

CM_PARTIAL_RESOURCE_DESCRIPTOR

WdfCmResourceListRemove