Condividi tramite


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)

Vedi anche

IoAllocateMdl

MEMORY_CACHING_TYPE

MmAllocateMappingAddress

MmAllocatePagesForMdl

MmAllocatePagesForMdlEx

MmFreeMappingAddress

MmProbeAndLockPages

MmUnmapReservedMapping