Funzione MmMapLockedPagesWithReservedMapping (wdm.h)
La routine MmMapLockedPagesWithReservedMapping esegue il mapping di tutti o parte di un intervallo di indirizzi riservato in precedenza dalla routine MmAllocateMappingAddress .
Sintassi
PVOID MmMapLockedPagesWithReservedMapping(
[in] PVOID MappingAddress,
[in] ULONG PoolTag,
[in] PMDL MemoryDescriptorList,
[in] __drv_strictTypeMatch(__drv_typeCond)MEMORY_CACHING_TYPE CacheType
);
Parametri
[in] MappingAddress
Puntatore all'inizio dell'intervallo di memoria virtuale riservato. Questo deve essere un indirizzo restituito in precedenza da MmAllocateMappingAddress.
[in] PoolTag
Specifica il tag del pool per il buffer di memoria riservato. Questa operazione deve essere identica al valore specificato nel parametro PoolTag della chiamata a MmAllocateMappingAddress che ha riservato il buffer.
[in] MemoryDescriptorList
Puntatore all'MDL da eseguire il mapping. Questo MDL deve descrivere le pagine fisiche bloccate. Un MDL bloccato può essere compilato dalla routine MmProbeAndLockPages o MmAllocatePagesForMdlEx .
[in] CacheType
Specifica il valore MEMORY_CACHING_TYPE da usare per creare il mapping.
Valore restituito
MmMapLockedPagesWithReservedMapping restituisce un puntatore all'inizio della memoria mappata o NULL se il sistema non è riuscito a eseguire il mapping della memoria. Questa routine restituisce NULL solo se si verifica un errore nei parametri della funzione, ad esempio l'indirizzo di mapping del driver non è abbastanza grande per estendersi sull'MDL fornito. Questa funzione è destinata a consentire ai driver di eseguire progressi anche in scenari a risorse basse.
Commenti
Il chiamante può usare MmMapLockedPagesWithReservedMapping per eseguire il mapping di una sottorange dell'intervallo di memoria virtuale riservato da MmAllocateMappingAddress come indicato di seguito:
Usare IoAllocateMdl per allocare un MDL. Il MDL restituito viene compilato usando l'indirizzo iniziale e le dimensioni specificati della sottorange dell'intervallo di memoria virtuale da mappare.
Usare MmProbeAndLockPages per bloccare le pagine fisiche descritte dall'MDL ottenuto nel passaggio 1.
Usare MmMapLockedPagesWithReservedMapping per eseguire effettivamente il mapping della memoria virtuale alla memoria fisica bloccata nel passaggio 2. Si noti che l'indirizzo virtuale restituito da questa funzione include l'offset di byte specificato dall'oggetto MDL. Tuttavia, il campo MappedSystemVa dell'MDL impostato da questa funzione non include l'offset di byte.
Una volta che il chiamante non deve accedere alla memoria, annulla il mapping della memoria con MmUnmapReservedMapping. Il chiamante può eseguire il mapping e annullare il mapping del buffer di memoria in base alle esigenze e deve annullare il mapping prima di liberare l'intervallo di mapping con MmFreeMappingAddress.
Si noti che il parametro MappingAddress specifica l'inizio dell'intervallo di memoria precedentemente riservato dal chiamante, non l'inizio della sottorange di memoria da mappare. Il chiamante specifica l'indirizzo iniziale e la lunghezza del buffer quando alloca MDL con IoAllocateMdl. Il buffer deve adattarsi all'interno dell'intervallo di memoria riservata, ma può essere un subset rigoroso.
La routine usa il parametro CacheType solo se le pagine descritte dall'MDL non hanno già un tipo di cache associato. Tuttavia, in quasi tutti i casi, le pagine hanno già un tipo di cache associato e questo tipo di cache viene usato dal nuovo mapping. Un'eccezione a questa regola è per le pagine allocate da MmAllocatePagesForMdl, che non hanno un tipo di cache specifico associato. Per tali pagine, il parametro CacheType determina il tipo di cache del mapping.
Requisiti
Requisito | Valore |
---|---|
Client minimo supportato | Disponibile in Windows XP e versioni successive di Windows. |
Piattaforma di destinazione | Universale |
Intestazione | wdm.h (include Wdm.h, Ntddk.h, Ntifs.h) |
Libreria | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | <= DISPATCH_LEVEL |
Regole di conformità DDI | HwStorPortProhibitedDDDIs(storport) |