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_LARGE_PAGES, MEM_RESERVE e MEM_TOP_DOWN. 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 della routine VirtualAlloc .

[in] Win32Protect

Specifica il tipo di protezione per l'area delle pagine di cui è stato eseguito il commit iniziale. I driver di dispositivo e intermedi devono impostare questo valore su PAGE_READWRITE.

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 di indirizzi già riservato o il tipo di attributo della cache specificato è in conflitto con l'attributo cache esistente dell'intervallo di indirizzi. Ad esempio, se la memoria di cui è stato eseguito il mapping si trova all'interno di una pagina di grandi dimensioni già mappata come completamente memorizzata nella cache, è illegale richiedere di eseguire il mapping della memoria come non memorizzata nella cache o come scrittura combinata.
STATUS_INVALID_PAGE_PROTECTION Il valore specificato per il parametro Protect non è valido.
STATUS_SECTION_PROTECTION Il valore specificato per il parametro AllocationType non è compatibile con il tipo di protezione specificato 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.

Se la sezione specificata non esiste o l'accesso richiesto non è consentito, ZwMapViewOfSection restituisce un errore.

Non usare ZwMapViewOfSection 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 MmAllocatePagesForMdl 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

MEMORY_CACHING_TYPE

MmAllocatePagesForMdl

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

Virtualalloc

ZwCurrentProcess

ZwOpenSection

ZwUnmapViewOfSection