Condividi tramite


PALLOCATE_COMMON_BUFFER_WITH_BOUNDS funzione di callback (wdm.h)

Questa funzione di callback alloca la memoria per un buffer comune ed esegue il mapping in modo che sia accessibile da un dispositivo master e dalla CPU. Il buffer comune può essere associato da un indirizzo logico minimo e massimo facoltativo.

Sintassi

PALLOCATE_COMMON_BUFFER_WITH_BOUNDS PallocateCommonBufferWithBounds;

PVOID PallocateCommonBufferWithBounds(
  [in]           PDMA_ADAPTER DmaAdapter,
  [in, optional] PPHYSICAL_ADDRESS MinimumAddress,
  [in, optional] PPHYSICAL_ADDRESS MaximumAddress,
  [in]           ULONG Length,
  [in]           ULONG Flags,
  [in, optional] MEMORY_CACHING_TYPE *CacheType,
  [in]           NODE_REQUIREMENT PreferredNode,
  [out]          PPHYSICAL_ADDRESS LogicalAddress
)
{...}

Parametri

[in] DmaAdapter

Puntatore a una struttura DMA_ADAPTER. Questa struttura è l'oggetto adapter che rappresenta il dispositivo DMA master del driver o il canale DMA del sistema. Il chiamante ha ottenuto questo puntatore da una chiamata precedente alla routine IoGetDmaAdapter.

[in, optional] MinimumAddress

Puntatore a una variabile che contiene l'indirizzo logico minimo per il buffer comune. Questo parametro indica che il buffer deve essere allocato dalla memoria in corrispondenza di e sopra questo indirizzo. Questo parametro è facoltativo e può essere specificato come NULL per indicare che non esiste alcun indirizzo minimo.

[in, optional] MaximumAddress

Puntatore a una variabile che contiene l'indirizzo logico massimo per il buffer comune. Questo parametro indica che il buffer deve essere allocato dalla memoria al di sotto di questo indirizzo. Questo parametro è facoltativo e può essere specificato come NULL per indicare che non esiste alcun indirizzo massimo.

[in] Length

Dimensioni, in byte, del buffer comune da allocare per l'operazione DMA.

[in] Flags

Dimensioni, in byte, del buffer comune da allocare per l'operazione DMA.

Bandiera Significato
DOMAIN_COMMON_BUFFER_LARGE_PAGE Il buffer comune verrà allocato usando una granularità di pagina più grande di PAGE_SIZE * 512. Si noti che questo può aumentare la probabilità che l'allocazione abbia esito negativo.

[in, optional] CacheType

Puntatore a un'enumerazione MEMORY_CACHING_TYPE che indica se la routine deve abilitare o disabilitare la memoria memorizzata nella cache nel buffer comune da allocare. Sono supportati solo i valori di MmNonCached e MmCached. Il parametro è facoltativo e può essere specificato come NULL per specificare la memorizzazione nella cache dipenderà dal valore predefinito della piattaforma hardware.

[in] PreferredNode

Nodo NUMA preferito da cui deve essere allocata la memoria. Se N è il numero di nodi NUMA in un sistema multiprocessore, PreferredNode è un numero compreso nell'intervallo compreso tra 0 e N-1. Per un sistema a un processore o un sistema multiprocessore non NUMA, impostare PreferredNode su zero.

[out] LogicalAddress

Puntatore a una variabile in cui questa routine scrive l'indirizzo logico che il dispositivo può usare per accedere al buffer comune. Il dispositivo DMA deve usare questo indirizzo logico anziché l'indirizzo fisico restituito da una routine, ad esempio MmGetPhysicalAddress.

Valore restituito

Restituisce PVOID che rappresenta l'indirizzo virtuale della memoria allocata per il buffer comune. Se il buffer non può essere allocato, restituisce NULL.

Osservazioni

Questa funzione di callback è una versione estesa della routine PALLOCATE_COMMON_BUFFER_EX. L'elenco seguente riepiloga le funzionalità disponibili solo nella versione estesa:

  • Il chiamante può specificare un indirizzo logico minimo per il buffer comune da allocare.

  • Il chiamante può fornire un override del tipo di memorizzazione nella cache che verrà seguito indipendentemente dalla piattaforma hardware.

  • Il chiamante può specificare l'uso di una granularità maggiore per l'allocazione del buffer comune.

Fabbisogno

Requisito Valore
client minimo supportato Windows 10, versione 1803
piattaforma di destinazione Desktop
intestazione wdm.h (include Wdm.h)
IRQL PASSIVE_LEVEL

Vedere anche

DMA_OPERATIONS

PALLOCATE_COMMON_BUFFER_EX