Inicialización de un destino de E/S general

El marco inicializa el destino de E/S local de un controlador para un dispositivo cuando el controlador llama a WdfDeviceCreate. Para recuperar un identificador en el destino de E/S local de un dispositivo, el controlador llama a WdfDeviceGetIoTarget.

La mayoría de los controladores envían solicitudes solo a su destino de E/S local.

Para inicializar un destino de E/S remoto para un dispositivo, el controlador debe:

  1. Llame a WdfIoTargetCreate para crear un objeto de destino de E/S.

  2. Llame a WdfIoTargetOpen para abrir un destino de E/S para que el controlador pueda enviar solicitudes a él.

Cuando el controlador llama a WdfIoTargetOpen, normalmente identifica el destino de E/S remoto proporcionando una cadena Unicode que representa un nombre de objeto. Este nombre puede identificar un dispositivo, un archivo o una interfaz de dispositivo. El marco envía solicitudes de E/S a la parte superior de la pila de controladores que admite el nombre del objeto.

En raras ocasiones, un controlador podría identificar un destino de E/S remoto proporcionando un puntero a un modelo de controlador de Windows (WDM) DEVICE_OBJECT estructura. Este puntero identifica un controlador diferente dentro de la pila del controlador que llama. Los controladores basados en marcos rara vez usan esta técnica porque rara vez tienen acceso a las estructuras de DEVICE_OBJECT de otros controladores.

En el ejemplo siguiente se muestra cómo usa el controlador de ejemplo Ndisedge la técnica anterior para crear y abrir un destino de E/S remoto:

status = WdfIoTargetCreate(Adapter->WdfDevice,
                        WDF_NO_OBJECT_ATTRIBUTES,
                        &Adapter->IoTarget);
    if (!NT_SUCCESS(status)) {
        DEBUGP(MP_ERROR, ("WdfIoTargetCreate failed 0x%x\n",
               status));
        return status;
    }

    WDF_IO_TARGET_OPEN_PARAMS_INIT_CREATE_BY_NAME(&openParams,
                                &fileName,
                                STANDARD_RIGHTS_ALL
                                );

    status = WdfIoTargetOpen(Adapter->IoTarget,
                        &openParams);
    if (!NT_SUCCESS(status)) {
        DEBUGP(MP_ERROR, ("WdfIoTargetOpen failed 0x%x\n", status));
        return status;
    }