Funzione WdfCommonBufferCreateWithConfig (wdfcommonbuffer.h)

[Si applica solo a KMDF]

Il metodo WdfCommonBufferCreateWithConfig crea un buffer di memoria a cui il driver e un dispositivo DMA (Direct Memory Access) possono accedere simultaneamente e il metodo specifica anche le informazioni di configurazione del buffer.

Sintassi

NTSTATUS WdfCommonBufferCreateWithConfig(
  [in]           WDFDMAENABLER             DmaEnabler,
  [in]           size_t                    Length,
  [in]           PWDF_COMMON_BUFFER_CONFIG Config,
  [in, optional] PWDF_OBJECT_ATTRIBUTES    Attributes,
  [out]          WDFCOMMONBUFFER           *CommonBuffer
);

Parametri

[in] DmaEnabler

Handle per un oggetto enabler DMA ottenuto dal driver da una chiamata precedente a WdfDmaEnablerCreate.

[in] Length

Dimensione desiderata, in byte, del nuovo buffer.

[in] Config

Puntatore a una struttura WDF_COMMON_BUFFER_CONFIG che contiene informazioni di configurazione sul buffer.

[in, optional] Attributes

Puntatore a una struttura WDF_OBJECT_ATTRIBUTES che specifica gli attributi dell'oggetto oggetto per l'oggetto buffer comune. Il membro ParentObject della struttura deve essere NULL. Questo parametro è facoltativo e può essere WDF_NO_OBJECT_ATTRIBUTES.

[out] CommonBuffer

Puntatore a una variabile tipizzata WDFCOMMONBUFFER che riceve un handle per un oggetto buffer comune.

Valore restituito

WdfCommonBufferCreateWithConfig restituisce STATUS_SUCCESS se l'operazione ha esito positivo. In caso contrario, questo metodo potrebbe restituire uno dei valori seguenti:

Codice restituito Descrizione
STATUS_INVALID_PARAMETER
Il driver ha fornito un parametro non valido.
STATUS_INSUFFICIENT_RESOURCES
Il framework non è riuscito ad allocare un oggetto buffer comune oppure il sistema non è riuscito ad allocare un buffer.
 

Se il driver fornisce un handle di oggetto non valido, si verifica un controllo di bug.

Commenti

Il metodo WdfCommonBufferCreateWithConfig alloca la memoria e la esegue il mapping in modo che sia il driver che un dispositivo possano accedervi simultaneamente per le operazioni DMA.

Inoltre, WdfCommonBufferCreateWithConfig consente al driver di specificare un requisito di allineamento del buffer per il buffer. Il requisito di allineamento del buffer sostituisce il requisito di allineamento del buffer specificato dal driver quando viene chiamato WdfDeviceSetAlignmentRequirement. Il driver può usare WdfCommonBufferCreateWithConfig, anziché WdfCommonBufferCreate, se si vuole che il driver crei un buffer con un requisito di allineamento diverso da quello specificato da WdfDeviceSetAlignmentRequirement .

Dopo che il driver chiama WdfCommonBufferCreateWithConfig, il driver deve:

Un driver chiama in genere WdfCommonBufferCreateWithConfig dall'interno della relativa funzione di callback EvtDriverDeviceAdd .

Il sistema operativo determina se abilitare la memoria memorizzata nella cache nel buffer comune da allocare. Tale decisione si basa sull'architettura del processore e sul bus di dispositivo.

Nei computer con processori basati su x86, basati su x64 e Itanium, la memoria memorizzata nella cache è abilitata. Nei computer con processori basati su ARM o ARM 64, il sistema operativo non abilita automaticamente la memoria memorizzata nella cache per tutti i dispositivi. Il sistema si basa sul metodo ACPI_CCA per ogni dispositivo per determinare se il dispositivo è coerente con la cache.

Per altre informazioni sui buffer comuni, vedere Uso di buffer comuni

Esempio

Nell'esempio di codice seguente viene inizializzata una struttura WDF_COMMON_BUFFER_CONFIG e quindi viene creato un buffer a 10 byte allineato su un limite di 32 byte.

WDF_COMMON_BUFFER_CONFIG  commonBufConfig;
WDFCOMMONBUFFER  commonBuffer;

WDF_COMMON_BUFFER_CONFIG_INIT(
                              &commonBufConfig,
                              FILE_32_BYTE_ALIGNMENT
                              );

status = WdfCommonBufferCreateWithConfig(
                                         DmaEnabler,
                                         10,
                                         &commonBufConfig,
                                         WDF_NO_OBJECT_ATTRIBUTES,
                                         &commonBuffer
                                         );
if (!NT_SUCCESS (status)) {
    return status;
}

Requisiti

Requisito Valore
Piattaforma di destinazione Universale
Versione KMDF minima 1,1
Intestazione wdfcommonbuffer.h (include WdfCommonBuffer.h)
Libreria Wdf01000.sys (vedere Controllo delle versioni della libreria framework).
IRQL PASSIVE_LEVEL
Regole di conformità DDI DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf)

Vedi anche

EvtDriverDeviceAdd

WDF_COMMON_BUFFER_CONFIG

WDF_OBJECT_ATTRIBUTES

WdfCommonBufferCreate

WdfCommonBufferGetAlignedLogicalAddress

WdfCommonBufferGetAlignedVirtualAddress

WdfDeviceSetAlignmentRequirement

WdfDmaEnablerCreate