Allocazione di pool e routine gratuite
RDBSS fornisce una serie di routine da usare per l'allocazione del pool. In genere, queste routine vengono chiamate utilizzando macro, non chiamando direttamente queste routine. Le macro gestiscono automaticamente le differenze tra le compilazioni retail e controllate.
In una compilazione controllata, queste routine sono state progettate per aggiungere wrapper intorno alla normale allocazione del kernel e routine libere. Questi wrapper per l'allocazione del pool e le routine libere forniscono informazioni di debug aggiuntive e chiamano un set di routine che eseguono vari tipi di controllo e protezione prima di chiamare l'allocazione del pool di kernel e le routine libere. Tuttavia, queste funzionalità non sono attualmente implementate in queste routine di allocazione e gratuite, ma potrebbero essere aggiunte nelle versioni future.
In una build gratuita, queste routine diventano chiamate dirette all'allocazione del kernel e alle routine gratuite, ExAllocatePoolWithTag e ExFreePool.
Nella tabella seguente sono elencate le routine gratuite e l'allocazione del pool RDBSS.
Routine | Descrizione |
---|---|
Questa routine alloca memoria da un pool con un tag a quattro byte all'inizio del blocco che consente di rilevare i problemi di memoria. È consigliabile chiamare la macro RxAllocatePoolWithTag anziché usare direttamente questa routine. |
|
Questa routine controlla un blocco di memoria per una firma di intestazione speciale RX_POOL_HEADER. Si noti che un driver mini-redirector di rete deve aggiungere questo blocco di firma speciale alla memoria allocata per usare la routine. Questa routine non deve essere utilizzata perché questo blocco di intestazione speciale non è stato implementato. |
|
Questa routine libera un pool di memoria. È consigliabile chiamare la macro RxFreePool anziché usare direttamente questa routine. |
Una serie di macro, definite nel file di intestazione ntrxdef.h , chiamano queste routine. Anziché chiamare direttamente le routine elencate nella tabella precedente, vengono utilizzate normalmente le macro seguenti.
Macro | Descrizione |
---|---|
RxAllocatePoolWithTag (type, size, tag) |
Nelle build controllate, questa macro alloca memoria da un pool con un tag a quattro byte all'inizio del blocco che consente di intercettare le istanze del cestino della memoria. Nelle build di vendita al dettaglio, questa macro diventa una chiamata diretta a ExAllocatePoolWithTag. |
RxCheckMemoryBlock (ptr) |
Nelle compilazioni controllate, questa macro controlla un blocco di memoria per una firma di intestazione RX_POOL_HEADER speciale. Nelle build di vendita al dettaglio questa macro non esegue alcuna operazione. |
RxFreePool (ptr) |
Nelle build controllate, questa macro libera un pool di memoria. Nelle build di vendita al dettaglio, questa macro diventa una chiamata diretta a ExFreePool. |