Inicializando um destino de E/S geral

A estrutura inicializa o destino de E/S local de um driver para um dispositivo quando o driver chama WdfDeviceCreate. Para recuperar um identificador para o destino de E/S local de um dispositivo, o driver chama WdfDeviceGetIoTarget.

A maioria dos drivers envia solicitações apenas para o destino de E/S local.

Para inicializar um destino de E/S remoto para um dispositivo, o driver deve:

  1. Chame WdfIoTargetCreate para criar um objeto de destino de E/S.

  2. Chame WdfIoTargetOpen para abrir um destino de E/S para que o driver possa enviar solicitações para ele.

Quando o driver chama WdfIoTargetOpen, ele normalmente identifica o destino de E/S remoto fornecendo uma cadeia de caracteres Unicode que representa um nome de objeto. Esse nome pode identificar um dispositivo, arquivo ou interface do dispositivo. A estrutura envia solicitações de E/S para a parte superior da pilha de driver que dá suporte ao nome do objeto.

Raramente, um driver pode identificar um destino de E/S remoto fornecendo um ponteiro para uma estrutura do WDM (Modelo de Driver do Windows) DEVICE_OBJECT. Esse ponteiro identifica um driver diferente na pilha do driver de chamada. Os drivers baseados em estrutura raramente usam essa técnica porque raramente têm acesso às estruturas de DEVICE_OBJECT de outros drivers.

O exemplo a seguir mostra como o driver de exemplo Ndisedge usa a técnica acima para criar e abrir um 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;
    }