次の方法で共有


USBFN_GET_ATTACH_ACTION コールバック関数 (usbfnattach.h)

充電器がポートに接続されたときに呼び出されるフィルター ドライバーの実装。

構文

USBFN_GET_ATTACH_ACTION UsbfnGetAttachAction;

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

パラメーター

[in] Context

ドライバー定義コンテキストへのポインター。

[out] OnAttach

ドライバーがアタッチとポートの種類を設定する呼び出し元によって割り当てられた USBFN_ON_ATTACH 構造体へのポインター。

戻り値

操作が成功した場合、コールバック関数は STATUS_SUCCESS、またはNT_SUCCESS(status) が TRUE と等しい別の状態値を返す必要があります。 それ以外の場合は、NT_SUCCESS(status) が FALSE の状態値を返す必要があります。

注釈

アタッチとデタッチの検出をサポートするには、USB 下位フィルター ドライバーでサポートを公開する必要があります。 発行プロセス中に、ドライバーは、このコールバック関数の実装も登録します。 詳細については、「 独自の充電器をサポートするための USB フィルター ドライバー」を参照してください。

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;

要件

要件
対象プラットフォーム Windows
最小 KMDF バージョン 1.0
最小 UMDF バージョン 2.0
Header usbfnattach.h
IRQL PASSIVE_LEVEL

こちらもご覧ください

独自の充電器をサポートするための USB フィルター ドライバー