Función WdfCmResourceListRemoveByDescriptor (wdfresource.h)

[Solo se aplica a KMDF]

El método WdfCmResourceListRemoveByDescriptor quita un descriptor de recursos especificado de una lista de recursos especificada.

Sintaxis

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

Parámetros

[in] List

Identificador de un objeto de lista de recursos de marco que representa una lista de recursos de hardware para un dispositivo.

[in] Descriptor

Puntero a una estructura de CM_PARTIAL_RESOURCE_DESCRIPTOR que describe un recurso de hardware.

Valor devuelto

None

Observaciones

Se produce una comprobación de errores si el controlador proporciona un identificador de objeto no válido.

El método WdfCmResourceListRemoveByDescriptor quita el descriptor de recursos que coincide con el parámetro Descriptor . Para buscar una coincidencia, el método compara el descriptor de recursos especificado con los descriptores de recursos de la configuración lógica, byte para byte.

Cuando WdfCmResourceListRemoveByDescriptor quita el descriptor de recursos que tiene el valor de índice n, el valor de índice del descriptor de recursos siguiente cambia de n+1 a n.

Para obtener más información sobre las listas de recursos, consulte Recursos de hardware para controladores de Framework-Based.

Ejemplos

En el ejemplo de código siguiente se buscan descriptores de recursos de puerto en las listas de recursos de un dispositivo. Para cada recurso de puerto que encuentra el ejemplo, comprueba si la dirección del puerto está dentro de un intervalo determinado. Si la dirección del puerto está fuera del intervalo, en el ejemplo se quita el descriptor de las listas de recursos sin procesar y traducidas.

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 Value
Plataforma de destino Universal
Versión mínima de KMDF 1.0
Encabezado wdfresource.h (incluya Wdf.h)
Library Wdf01000.sys (consulte Control de versiones de la biblioteca de marcos).
IRQL <=DISPATCH_LEVEL
Reglas de cumplimiento de DDI DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf)

Consulte también

CM_PARTIAL_RESOURCE_DESCRIPTOR

WdfCmResourceListRemove