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 |