Funzione ZwMapViewOfSectionEx (wdm.h)
La routine ZwMapViewOfSectionEx esegue il mapping di una visualizzazione di una sezione nello spazio indirizzi virtuale di un processo soggetto.
Sintassi
NTSYSAPI NTSTATUS ZwMapViewOfSectionEx(
[in] HANDLE SectionHandle,
[in] HANDLE ProcessHandle,
[in, out] PVOID *BaseAddress,
[in, out, optional] PLARGE_INTEGER SectionOffset,
[in, out] PSIZE_T ViewSize,
[in] ULONG AllocationType,
[in] ULONG PageProtection,
[in, out, optional] PMEM_EXTENDED_PARAMETER ExtendedParameters,
[in] ULONG ExtendedParameterCount
);
Parametri
[in] SectionHandle
Handle in un oggetto sezione. Questo handle viene creato da una chiamata riuscita a ZwCreateSection o ZwOpenSection.
[in] ProcessHandle
Handle all'oggetto che rappresenta il processo in cui deve essere mappata la visualizzazione. Usare la macro ZwCurrentProcess per specificare il processo corrente. L'handle deve essere stato aperto con l'accesso PROCESS_VM_OPERATION .
[in, out] BaseAddress
Puntatore a una variabile che riceve l'indirizzo di base della visualizzazione. Se il valore di questo parametro non è NULL, la visualizzazione viene allocata a partire dall'indirizzo virtuale specificato arrotondato fino al limite di indirizzi di 64 kilobyte successivo.
[in, out, optional] SectionOffset
Puntatore a una variabile che riceve l'offset, in byte, dall'inizio della sezione alla vista. Se questo puntatore non è NULL, l'offset viene arrotondato fino al limite di dimensione della granularità dell'allocazione successivo.
[in, out] ViewSize
Puntatore a una variabile SIZE_T. Se il valore iniziale di questa variabile è zero, ZwMapViewOfSectionEx esegue il mapping di una visualizzazione della sezione che inizia a SectionOffset e continua alla fine della sezione. In caso contrario, il valore iniziale specifica le dimensioni della vista, in byte. ZwMapViewOfSectionEx arrotonda sempre questo valore fino al numero più vicino di PAGE_SIZE prima di eseguire il mapping della visualizzazione.
In caso di restituzione, il valore riceve le dimensioni effettive, in byte, della visualizzazione.
[in] AllocationType
Specifica un set di flag che descrive il tipo di allocazione da eseguire per l'area specificata di pagine. I flag validi sono MEM_RESERVE, MEM_TOP_DOWN, MEM_LARGE_PAGES, MEM_DIFFERENT_IMAGE_BASE_OK e MEM_REPLACE_PLACEHOLDER. Anche se MEM_COMMIT non è consentito, è implicito a meno che non sia specificato MEM_RESERVE. Per altre informazioni sui flag MEM_XXX , vedere la descrizione delle routine VirtualAlloc e MapViewOfFile3 .
[in] PageProtection
Specifica la protezione della pagina da applicare alla visualizzazione mappata.
Per gli oggetti sezione creati con l'attributo SEC_IMAGE, il parametro PageProtection non ha alcun effetto e può essere impostato su qualsiasi valore valido, ad esempio PAGE_READONLY.
Per gli oggetti sezione creati con l'attributo SEC_IMAGE_NO_EXECUTE, il valore PageProtection deve essere impostato su PAGE_READONLY.
Per le sezioni non immagine, il valore del parametro PageProtection deve essere compatibile con la protezione della pagina della sezione specificata quando è stato chiamato ZwCreateSection.
ZwMapViewOfSectionEx imposta sempre il tipo di cache delle pagine mappate in modo che corrisponda al tipo di cache specificato al momento della creazione dell'oggetto sezione. Ad esempio, se ZwCreateSection è stato chiamato con il flag SEC_NOCACHE, ZwMapViewOfSectionEx eseguirà il mapping delle pagine non memorizzate, indipendentemente dal fatto che il parametro PageProtection includa il flag PAGE_NOCACHE o meno.
[in, out, optional] ExtendedParameters
Puntatore facoltativo a uno o più parametri estesi di tipo MEM_EXTENDED_PARAMETER. Per altre informazioni sui parametri estesi, vedere la descrizione della routine MapViewOfFile3 .
[in] ExtendedParameterCount
Specifica il numero di elementi nella matrice ExtendedParameters.
Valore restituito
ZwMapViewOfSectionEx restituisce un valore NTSTATUS. I valori restituiti possibili includono quanto segue:
Codice restituito | Descrizione |
---|---|
STATUS_SUCCESS | La routine ha eseguito correttamente l'operazione richiesta. |
STATUS_CONFLICTING_ADDRESSES | L'intervallo di indirizzi specificato è in conflitto con un intervallo già riservato. |
STATUS_INVALID_PAGE_PROTECTION | Il valore specificato per il parametro PageProtection non è valido. |
STATUS_SECTION_PROTECTION | Il valore specificato per il parametro PageProtection non è compatibile con la protezione della pagina specificata al momento della creazione della sezione. |
Commenti
È possibile eseguire il mapping simultaneo di diverse visualizzazioni di una sezione nello spazio indirizzi virtuale di uno o più processi.
Non usare ZwMapViewOfSectionEx per eseguire il mapping di un intervallo di memoria da \Device\PhysicalMemory alla modalità utente, a meno che il driver non abbia allocato direttamente l'intervallo di memoria tramite MmAllocatePagesForMdlEx o un altro metodo che garantisce che nessun altro componente di sistema abbia mappato lo stesso intervallo di memoria con un valore MEMORY_CACHING_TYPE diverso.
Le applicazioni utente non possono accedere direttamente a \Device\PhysicalMemory a partire da Windows Server 2003 con Service Pack 1 (SP1) e possono accedervi solo se il driver passa un handle all'applicazione.
Per altre informazioni sugli oggetti sezione, vedere Oggetti e visualizzazioni sezione.
Se la chiamata a questa funzione si verifica in modalità utente, è necessario usare il nome "NtMapViewOfSectionEx" anziché "ZwMapViewOfSectionEx".
Per le chiamate dai driver in modalità kernel, le versioni NtXxx e ZwXxx di una routine di Windows Native System Services possono comportarsi in modo diverso nel modo in cui gestiscono e interpretano i parametri di input. Per altre informazioni sulla relazione tra le versioni NtXxx e ZwXxx di una routine, vedere Uso di nt e zw versioni delle routine di Servizi di sistema nativo.
Requisiti
Requisito | Valore |
---|---|
Client minimo supportato | Windows 11, versione 24H2 |
Intestazione | wdm.h |
Vedi anche
Uso di nt e zw versioni delle routine di Servizi di sistema nativo