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
Uso delle versioni Nt e Zw delle routine native di Servizi di sistema
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per