次の方法で共有


EVT_ACX_FACTORY_CIRCUIT_CREATE_CIRCUIT コールバック関数 (acxcircuit.h)

EVT_ACX_FACTORY_CIRCUIT_CREATE_CIRCUIT コールバックは、ドライバーが指定された構成で ACXCIRCUIT オブジェクトを作成する必要がある場合に、ACX によって呼び出されます。

構文

EVT_ACX_FACTORY_CIRCUIT_CREATE_CIRCUIT EvtAcxFactoryCircuitCreateCircuit;

NTSTATUS EvtAcxFactoryCircuitCreateCircuit(
  WDFDEVICE Parent,
  WDFDEVICE Device,
  ACXFACTORYCIRCUIT Factory,
  PACX_FACTORY_CIRCUIT_ADD_CIRCUIT Config,
  PACXCIRCUIT_INIT CircuitInit
)
{...}

パラメーター

Parent

Device オブジェクトで参照される WDFDEVICE の親である WDFDEVICE オブジェクト (フレームワーク オブジェクト の概要で説明します)。

Device

EVT_ACX_FACTORY_CIRCUIT_CREATE_CIRCUITDEVICE コールバックで作成された WDFDEVICE オブジェクト (フレームワーク オブジェクト の概要説明)。 このデバイスは、新しい ACXCIRCUIT に関連付けられます。

Factory

既存の回線ファクトリ ACXFACTORYCIRCUIT オブジェクト。 ACX オブジェクトの詳細については、ACX オブジェクトの概要を参照してください。

Config

新しい ACXCIRCUIT の構成を定義する ACX_FACTORY_CIRCUIT_ADD_CIRCUIT 構造体。

CircuitInit

ACXCIRCUIT_INITは、回線の初期化に使用される不透明なオブジェクトです。 AcxCircuitInitAllocate 使用して、ACXCIRCUIT_INIT構造体を初期化します。

戻り値

呼び出しが成功した場合に STATUS_SUCCESS を返します。 それ以外の場合は、適切なエラー コードが返されます。 詳細については、NTSTATUS 値 の使用に関するを参照してください。

備考

AcxFactoryCircuit は、オンデマンドで ACXCIRCUIT を作成できるファクトリ オブジェクトを表します。

ドライバーは、1 つ以上の ACXFACTORYCIRCUIT を ACX に登録できます。このアクションにより、ドライバーが適切に定義された型の ACXCIRCUIT を作成できることが ACX に通知されます。

ACX は、ACXFACTORYCIRCUIT のコールバックを呼び出します。オーディオ パスで、ファクトリが提供する ACXCIRCUIT のいずれかが必要であることを検出します。

AcxFactoryCircuit には、専用の WDF キューがあります。 WDF キューの詳細については、「Framework Queue Objects」を参照してください。

使用例を次に示します。

EVT_ACX_FACTORY_CIRCUIT_CREATE_CIRCUIT Dsp_EvtAcxFactoryCircuitCreateCircuit;

NTSTATUS
Dsp_EvtAcxFactoryCircuitCreateCircuit(
    _In_ WDFDEVICE                          Parent,
    _In_ WDFDEVICE                          Device,
    _In_ ACXFACTORYCIRCUIT                  Factory,
    _In_ PACX_FACTORY_CIRCUIT_ADD_CIRCUIT   CircuitConfig,
    _In_ PACXCIRCUIT_INIT                   CircuitInit
)
{
    ACXOBJECTBAG circuitProperties;

    PAGED_CODE();

    NTSTATUS status = STATUS_SUCCESS;

    // Create object bag from the CompositeProperties
    ACX_OBJECTBAG_CONFIG propConfig;
    ACX_OBJECTBAG_CONFIG_INIT(&propConfig);
    propConfig.Handle = CircuitConfig->CircuitProperties;
    propConfig.Flags |= AcxObjectBagConfigOpenWithHandle;

    WDF_OBJECT_ATTRIBUTES attributes;
    WDF_OBJECT_ATTRIBUTES_INIT(&attributes);

    RETURN_NTSTATUS_IF_FAILED(AcxObjectBagOpen(&attributes, &propConfig, &circuitProperties));

    auto cleanupPropConfig = scope_exit([=]() {
        WdfObjectDelete(circuitProperties);
        }
    );

    // Retrieve the intended Circuit ID from the object bag
    GUID circuitId;
    RETURN_NTSTATUS_IF_FAILED(Dsp_DetermineCircuitGuidFromVendorProperties(circuitProperties, &circuitId));

    AcxCircuitInitSetComponentId(CircuitInit, &circuitId);

    // Call the appropriate CreateCircuitDevice based on the Circuit ID
    if (IsEqualGUID(circuitId, DSP_CIRCUIT_MICROPHONE_GUID) || IsEqualGUID(circuitId, DSP_CIRCUIT_UNIVERSALJACK_CAPTURE_GUID))
    {
        return DspC_EvtAcxFactoryCircuitCreateCircuit(Parent, Device, Factory, CircuitConfig, CircuitInit);
    }
    else if (IsEqualGUID(circuitId, DSP_CIRCUIT_SPEAKER_GUID) || IsEqualGUID(circuitId, DSP_CIRCUIT_UNIVERSALJACK_RENDER_GUID))
    {
        return DspR_EvtAcxFactoryCircuitCreateCircuit(Parent, Device, Factory, CircuitConfig, CircuitInit);
    }

    status = STATUS_NOT_SUPPORTED;
    return status;
}

ACX の要件

最小 ACX バージョン: 1.0

ACX バージョンの詳細については、ACX バージョンの概要 参照してください。

必要条件

要件 価値
ヘッダー acxcircuit.h
IRQL PASSIVE_LEVEL

関連項目

  • acxcircuit.h ヘッダー する