Sdílet prostřednictvím


Správa oddílů paměti

Ovladač může vytvořit objekt oddílu, když zavolá funkci ZwCreateSection, která vrátí popisovač objektu oddílu. Pomocí parametru FileHandle určete podkladový soubor nebo NULL, pokud oddíl není souborem podporovaný. Další popisovače sekčního objektu lze otevřít pomocí ZwOpenSection.

Aby byla data, která patří k objektu oddílu, přístupná v adresním prostoru aktuálního procesu, je nutné namapovat zobrazení této části. Ovladače mohou mapovat zobrazení oddílu do adresního prostoru aktuálního procesu pomocí rutiny ZwMapViewOfSection . Parametr SectionOffset určuje posun bajtů, kde zobrazení začíná v rámci oddílu, a ViewSize určuje počet bajtů, které se mají mapovat.

Parametr Protect určuje povolené operace v zobrazení. Zadejte PAGE_READONLY pro zobrazení jen pro čtení, PAGE_READWRITE pro zobrazení pro čtení a zápis a PAGE_WRITECOPY pro zobrazení kopírování při zápisu.

Pro zobrazení není přidělena žádná fyzická paměť, dokud nebude přístup k rozsahu virtuální paměti. První přístup k rozsahu paměti způsobuje chybu stránky; systém pak přidělí stránku, která bude obsahovat toto umístění paměti. Pokud je oddíl založený na souborech, systém přečte obsah souboru, který odpovídá dané stránce, a zkopíruje ho do paměti. (Všimněte si, že nepoužívané objekty a zobrazení oddílů používají pro účely uchovávání knih nějaký stránkovaný a nestránkový fond.)

Jakmile ovladač přestane používat zobrazení, zruší jeho mapování voláním ZwUnmapViewOfSection. Jakmile ovladač přestane používat objekt sekce, zavře popisovač sekce pomocí ZwClose. Všimněte si, že po namapování zobrazení a žádná další zobrazení nebudou mapována, je možné bezpečně okamžitě zavolat ZwClose na popisovač oddílu; zobrazení (a objekt oddílu) nadále existuje, dokud není zobrazení zrušeno. Toto je doporučený postup, protože snižuje riziko, že ovladač nezavře popisovač.