Share via


USBFN_GET_ATTACH_ACTION función de devolución de llamada (usbfnattach.h)

Implementación del controlador de filtro que se invoca cuando el cargador está conectado al puerto.

Sintaxis

USBFN_GET_ATTACH_ACTION UsbfnGetAttachAction;

NTSTATUS UsbfnGetAttachAction(
  [in]  PVOID Context,
  [out] PUSBFN_ON_ATTACH OnAttach
)
{...}

Parámetros

[in] Context

Puntero a un contexto definido por el controlador.

[out] OnAttach

Puntero a una estructura de USBFN_ON_ATTACH asignada por el autor de la llamada que el controlador rellena con el tipo de conexión y puerto.

Valor devuelto

Si la operación se realiza correctamente, la función de devolución de llamada debe devolver STATUS_SUCCESS u otro valor de estado para el que NT_SUCCESS(status) es igual a TRUE. De lo contrario, debe devolver un valor de estado para el que NT_SUCCESS(status) es igual a FALSE.

Comentarios

Para admitir la conexión y desasociación, el controlador de filtro inferior USB debe publicar su compatibilidad. Durante el proceso de publicación, el controlador también registra su implementación de esta función de devolución de llamada. Para obtener más información, consulte Controlador de filtro USB para admitir cargadores propietarios.

Ejemplos

NTSTATUS
UsbLowerFilter_GetAttachAction(
    __in PVOID Context,
    __out PUSBFN_ON_ATTACH OnAttach
    )
{
    NTSTATUS Status;
    PPDCP_CONTEXT PdcpContext = NULL;
    LARGE_INTEGER Timeout;
    
    PAGED_CODE();

    // Get driver context
    PdcpContext = DeviceGetUsbLowerFilterContext((WDFDEVICE)Context);

    // Clear the event
    KeClearEvent(&PdcpContext->AbortAttachOperation);

    // Wait for a while
    Timeout.QuadPart = WDF_REL_TIMEOUT_IN_MS(PdcpContext->DetectionDelayInms);

    Status = KeWaitForSingleObject(
        &PdcpContext->AbortAttachOperation,
        Executive,
        KernelMode,
        FALSE,
        &Timeout);

    switch (Status)
    {
    case STATUS_SUCCESS:
        // The abort event was set.
        Status = STATUS_REQUEST_ABORTED;
        break;

    case STATUS_TIMEOUT:
        Status = STATUS_SUCCESS;
        break;

    default:
        break;
    }

    if (NT_SUCCESS(Status))
    {
        OnAttach->AttachAction = PdcpContext->CurrentAttachAction;
        OnAttach->PortType = PdcpContext->CurrentPortType;
    }

    return Status;

Requisitos

Requisito Value
Plataforma de destino Windows
Versión mínima de KMDF 1.0
Versión mínima de UMDF 2.0
Encabezado usbfnattach.h
IRQL PASSIVE_LEVEL

Consulte también

Controlador de filtro USB para admitir cargadores propietarios