Condividi tramite


Funzione ZwMapViewOfSection (wdm.h)

La routine ZwMapViewOfSection esegue il mapping di una visualizzazione di una sezione nello spazio indirizzi virtuale di un processo soggetto.

Sintassi

NTSYSAPI NTSTATUS ZwMapViewOfSection(
  [in]                HANDLE          SectionHandle,
  [in]                HANDLE          ProcessHandle,
  [in, out]           PVOID           *BaseAddress,
  [in]                ULONG_PTR       ZeroBits,
  [in]                SIZE_T          CommitSize,
  [in, out, optional] PLARGE_INTEGER  SectionOffset,
  [in, out]           PSIZE_T         ViewSize,
  [in]                SECTION_INHERIT InheritDisposition,
  [in]                ULONG           AllocationType,
  [in]                ULONG           Win32Protect
);

Parametri

[in] SectionHandle

Handle per un oggetto sezione. Questo handle viene creato da una chiamata riuscita a ZwCreateSection o ZwOpenSection.

[in] ProcessHandle

Handle per l'oggetto che rappresenta il processo in cui deve essere mappata la vista. Utilizzare la macro ZwCurrentProcess per specificare il processo corrente. L'handle deve essere stato aperto con accesso PROCESS_VM_OPERATION .

[in, out] BaseAddress

Puntatore a una variabile che riceve l'indirizzo di base della vista. Se il valore di questo parametro non è NULL, la visualizzazione viene allocata a partire dall'indirizzo virtuale specificato arrotondato per difetto al limite di indirizzo di 64 kilobyte successivo.

[in] ZeroBits

Specifica il numero di bit di indirizzi di ordine elevato che devono essere zero nell'indirizzo di base della visualizzazione sezione. Il valore di questo parametro deve essere minore di 21 e viene usato solo se BaseAddress è NULL, in altre parole, quando il chiamante consente al sistema di determinare dove allocare la vista.

[in] CommitSize

Specifica le dimensioni, in byte, dell'area di cui è stato eseguito il commit iniziale della visualizzazione. CommitSize è significativo solo per le sezioni supportate da file di pagina e viene arrotondato al multiplo più vicino di PAGE_SIZE. Per le sezioni che eseguono il mapping dei file, i dati e l'immagine vengono sottoposti a commit in fase di creazione della sezione.

[in, out, optional] SectionOffset

Puntatore a una variabile che riceve l'offset, in byte, dall'inizio della sezione alla visualizzazione. Se questo puntatore non è NULL, l'offset viene arrotondato per difetto al successivo limite di dimensioni della granularità di allocazione.

[in, out] ViewSize

Puntatore a una variabile SIZE_T. Se il valore iniziale di questa variabile è zero, ZwMapViewOfSection esegue il mapping di una visualizzazione della sezione che inizia da SectionOffset e continua fino alla fine della sezione. In caso contrario, il valore iniziale specifica le dimensioni della visualizzazione, in byte. ZwMapViewOfSection arrotonda sempre questo valore fino al multiplo 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 vista.

[in] InheritDisposition

Specifica la modalità di condivisione della visualizzazione con i processi figlio. I valori possibili sono:

ViewShare

La vista verrà mappata a tutti i processi figlio creati in futuro.

ViewUnmap

La visualizzazione non verrà mappata ai processi figlio.

I driver devono in genere specificare ViewUnmap per questo parametro.

[in] AllocationType

Specifica un set di flag che descrive il tipo di allocazione da eseguire per l'area di pagine specificata. 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 venga specificato MEM_RESERVE. Per altre informazioni sui flag MEM_XXX , vedere la descrizione delle routine VirtualAlloc e MapViewOfFile3 .

[in] Win32Protect

Specifica la protezione della pagina da applicare alla visualizzazione mappata.

Per gli oggetti sezione creati con l'attributo SEC_IMAGE, il parametro Win32Protect 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 Win32Protect deve essere impostato su PAGE_READONLY.

Per le sezioni non di immagine, il valore del parametro Win32Protect deve essere compatibile con la protezione della pagina della sezione specificata quando è stato chiamato ZwCreateSection.

ZwMapViewOfSection imposta il tipo di cache delle pagine mappate in modo che corrispondano al tipo di cache fornito al momento della creazione dell'oggetto sezione. Ad esempio, se ZwCreateSection è stato chiamato con il flag SEC_NOCACHE, ZwMapViewOfSection eseguirà il mapping delle pagine non memorizzate, indipendentemente dal fatto che il parametro Win32Protect includa o meno il flag PAGE_NOCACHE.

Valore restituito

ZwMapViewOfSection 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 Win32Protect non è valido.
STATUS_SECTION_PROTECTION Il valore specificato per il parametro Win32Protect 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 ZwMapViewOfSection per eseguire il mapping di un intervallo di memoria da \Device\PhysicalMemory in 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 di 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 sezione e viste.

Se la chiamata a questa funzione viene eseguita in modalità utente, è necessario usare il nome "NtMapViewOfSection" anziché "ZwMapViewOfSection".

Per le chiamate da driver in modalità kernel, le versioni NtXxx e ZwXxx di una routine di Servizi di sistema nativi di Windows 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 Using Nt and Zw Versions of the Native System Services Routines .For more information about the Nt Xxx and Zw versions of the Native System Services Routines.

Requisiti

Requisito Valore
Piattaforma di destinazione Universale
Intestazione wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)
Libreria NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL
Regole di conformità DDI HwStorPortProhibitedDDIs(storport), PowerIrpDDis(wdm)

Vedi anche

Uso delle versioni Nt e Zw delle routine native di Servizi di sistema

ZwCreateSection

ZwOpenSection

ZwMapViewOfSectionEx

ZwUnmapViewOfSection

MapViewOfFile3