Condividi tramite


EVT_ACX_CIRCUIT_PREPARE_HARDWARE funzione di callback (acxcircuit.h)

Il callback EVT_ACX_CIRCUIT_PREPARE_HARDWARE viene usato dal driver per aggiungere funzionalità quando un ACXCIRCUIT si trova nella fase di preparazione dell'hardware.

Sintassi

EVT_ACX_CIRCUIT_PREPARE_HARDWARE EvtAcxCircuitPrepareHardware;

NTSTATUS EvtAcxCircuitPrepareHardware(
  WDFDEVICE Device,
  ACXCIRCUIT Circuit,
  WDFCMRESLIST ResourcesRaw,
  WDFCMRESLIST ResourcesTranslated
)
{...}

Parametri

Device

Oggetto WDFDEVICE (descritto in WDF - Riepilogo degli oggetti Framework) associato all'oggetto ACXCIRCUIT specificato.

Circuit

L'oggetto ACXCIRCUIT (descritto in Riepilogo degli oggetti ACX) nella fase di preparazione dell'hardware.

ResourcesRaw

Handle a un oggetto resource-list framework che identifica le risorse hardware non elaborate assegnate dal gestore di Plug and Play al dispositivo. Per altre informazioni sulle risorse non elaborate, vedere Risorse non elaborate e tradotte.

ResourcesTranslated

Handle a un oggetto resource-list framework che identifica le risorse hardware tradotte assegnate dal gestore Plug and Play al dispositivo.

Valore restituito

Restituisce STATUS_SUCCESS se la chiamata ha avuto esito positivo. In caso contrario, restituisce un codice di errore appropriato. Per altre informazioni, vedere Uso dei valori NTSTATUS.

Commenti

Per registrare una funzione di callback evtAcxCircuitPrepareHardware, un driver deve chiamare il metodo AcxCircuitInitSetAcxCircuitPnpPowerCallbacks.

Se il driver ha registrato una funzione di callback EvtAcxCircuitPrepareHardware per un acXCIRCUIT, il framework ACX chiama la funzione dopo che il framework WDF chiama la funzione di callback evtDevicePrepareHardware del driver.

La funzione di callback EvtAcxCircuitPrepareHardware accede alle risorse hardware non elaborate e tradotte del dispositivo usando gli handle ResourcesRaw e ResourcesTranslated ricevuti. La funzione di callback può chiamare WdfCmResourceListGetCount e WdfCmResourceListGetDescriptor per attraversare gli elenchi di risorse. Questa funzione di callback non può modificare gli elenchi di risorse.

Per altre informazioni sugli elenchi di risorse e sull'ordine in cui vengono visualizzate le risorse, vedere Risorse non elaborate e tradotte.

In genere, la funzione di callback evtAcxCircuitPrepareHardware del driver esegue le operazioni seguenti, se necessario:

  • Esegue il mapping degli indirizzi di memoria fisica agli indirizzi virtuali di ACXCIRCUIT in modo che il driver possa accedere alla memoria assegnata al dispositivo.
  • Facoltativamente, la funzione di callback evtAcxCircuitPrepareHardware del driver potrebbe accodare un elemento di lavoro per completare tutte le altre attività di configurazione a elevato utilizzo di tempo. L'uso di un elemento di lavoro per tali operazioni può aiutare a garantire che l'ora di avvio del dispositivo non aumenti l'ora di avvio del sistema. Per altre informazioni, vedere Uso degli elementi di lavoro di Framework.
  • In genere, tutte le altre operazioni di inizializzazione hardware, incluso il firmware di caricamento, devono essere eseguite ogni volta che il dispositivo entra nello stato di lavoro (D0) e deve quindi essere eseguito nella funzione di callback EvtDeviceD0Entry del driver.

ResourcesRaw e ResourcesTranslated gestisce che la funzione di callback EvtAcxCircuitPrepareHardware/EvtDevicePrepareHardware rimane valida finché la funzione di callback EvtDeviceReleaseHardware del driver non viene restituita.

Se il driver ha esito negativo il callback EvtAcxCircuitPrepareHardware, l'oggetto ACXCIRCUIT viene inserito nello stato di eliminazione in sospeso e viene arrestato ACXSTREAMS associato.

Per altre informazioni sulle risorse hardware, vedere Introduzione alle risorse hardware.

Per altre informazioni su quando il framework ACX e WDF chiamano queste funzioni di callback, vedere Scenari di PnP e Power Management.

Per altre informazioni sui driver che forniscono questa funzione di callback, vedere Supporto di PnP e Power Management in Driver di funzione.

Esempio

Di seguito è riportato l'esempio di utilizzo.

NTSTATUS
EvtCircuitPrepareHardware(
    _In_ WDFDEVICE      Device,
    _In_ ACXCIRCUIT     Circuit,
    _In_ WDFCMRESLIST   ResourcesRaw,
    _In_ WDFCMRESLIST   ResourcesTranslated
    )
{
    NTSTATUS            status      = STATUS_SUCCESS;
    PCIRCUIT_CONTEXT    circuitCtx  = GetCircuitContext(Circuit);
    CIpcEventReader *   eventReader = circuitCtx->EventReader;

    PASSIVE_CODE();

    UNREFERENCED_PARAMETER(Device);
    UNREFERENCED_PARAMETER(ResourcesRaw);
    UNREFERENCED_PARAMETER(ResourcesTranslated);

    //
    // Enable 'remote' circuit notifications.
    //
    ASSERT(eventReader);
    status = eventReader->EnableEvents();
    if (!NT_SUCCESS(status))
    {
        DrvLogError(g_RecorderLog, FLAG_INIT,
                    "ACXCIRCUIT %p, CIpcEventReader::EnableEvents failed, %!STATUS!",
                    Circuit, status);
        goto exit;
    }

    status = STATUS_SUCCESS;

exit:
    return status;
}

Requisiti ACX

Versione minima DI ACX: 1.0

Per altre informazioni sulle versioni ACX, vedere Panoramica della versione di ACX.

Requisiti

Requisito Valore
Intestazione acxcircuit.h
IRQL PASSIVE_LEVEL

Vedi anche