Condividi tramite


Funzione MmLockPagableDataSection (wdm.h)

La routine MmLockPagableDataSection blocca un'intera sezione dei dati del driver nello spazio di sistema.

Sintassi

PVOID MmLockPagableDataSection(
  [in] PVOID AddressWithinSection
);

Parametri

[in] AddressWithinSection

Specifica l'indirizzo simbolico di un elemento di dati all'interno della sezione di paging.

Valore restituito

MmLockPagableDataSection restituisce un valore opaco che identifica la sezione. Questo valore deve essere passato successivamente a MmLockPagableSectionByHandle o a MmUnlockPagableImageSection.

Commenti

I driver possono usare questa routine, MmLockPagableSectionByHandle e MmUnlockPagableImageSection per rendere i dati privati in genere impaginabili in memoria.

I dati possono essere bloccati se:

  • I dati sono in genere accessibili a <= APC_LEVEL, ma potrebbe essere necessario accedervi a livelli IRQL più elevati per brevi periodi.

  • Il driver usa i dati raramente e prevedibili.

Ad esempio, i driver per i dispositivi mixer usano sezioni di dati di paging. Poiché il driver usa dati sufficienti per rendere utile la creazione di una sezione pageable-data e il driver sa quando sono necessari i dati, tale driver usa MmLockPagableDataSection, MmLockPagableSectionByHandle e MmUnlockPagableImageSection per inserire una sezione di dati nello spazio di sistema quando necessario e renderlo disponibile per la pagina quando non necessario.

Una singola chiamata a MmLockPagableDataSection fa sì che l'intera sezione, contenente i dati a cui si fa riferimento, venga bloccata nello spazio di sistema.

Si tratta di un'operazione costosa per bloccare una sezione. Se una sezione pageable-data è bloccata in più posizioni da un driver, usare MmLockPagableDataSection per la prima richiesta. Effettuare richieste di blocco successive chiamando MmLockPagableSectionByHandle, passando l'handle restituito da MmLockPagableDataSection. Il blocco tramite handle migliora significativamente le prestazioni del driver. Una sezione bloccata viene sbloccata chiamando MmUnlockPagableImageSection.

Gestione memoria gestisce un conteggio dei riferimenti nella sezione . Una sezione pageable-data è disponibile solo per il paging quando il conteggio dei riferimenti è zero. Ogni richiesta di blocco incrementa il conteggio; ogni richiesta di sblocco decrementa il conteggio. Un driver deve sbloccare una sezione tutte le volte in cui blocca una sezione per assicurarsi che tale sezione sarà disponibile per essere distribuiti quando la sezione non è necessaria. Un handle è sempre valido, indipendentemente dal conteggio. Se il conteggio su un handle è zero e viene effettuata una chiamata a MmLockPagableSectionByHandle, il conteggio viene impostato su uno e, se la sezione è stata sottoposta a paging, verrà visualizzata una pagina.

I dati in una sezione pageable-data sono contrassegnati da una direttiva del compilatore. Per creare una sezione dei dati di paging, usare #pragma data_seg ("PAGE") all'inizio del modulo dati e #pragma data_seg () alla fine del modulo. La parola chiave PAGE fa distinzione tra maiuscole e minuscole, ovvero PAGE deve essere maiuscola.

Si noti che è presente anche un #pragma data_seg("INIT") usato per rendere i dati scartabili dopo l'inizializzazione del sistema. Ad eccezione dell'uso di INIT anziché PAGE, la sintassi è la stessa. Tuttavia, il risultato non è; l'uso della direttiva PAGE rende la sezione dati paginabile. Quando viene usata la direttiva INIT , i dati nella sezione vengono rimossi non appena il driver restituisce dalla routine di immissione del driver o dalla routine di reinizializzazione se il driver ne ha uno.

Per altre informazioni sul paging dei dati, vedere Creazione di driver impaginabili.

Requisiti

Requisito Valore
Client minimo supportato Disponibile a partire da Windows 2000.
Piattaforma di destinazione Universale
Intestazione wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)
Libreria NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <=APC_LEVEL
Regole di conformità DDI HwStorPortProhibitedDDIs(storport), IrqlMmApcLte(wdm)

Vedi anche

MmLockPagableCodeSection

MmLockPagableSectionByHandle

MmPageEntireDriver

MmResetDriverPaging

MmUnlockPagableImageSection