Sdílet prostřednictvím


Problémy se zabezpečením objektů a zobrazení oddílů

Ovladače, které vytvářejí oddíly a zobrazení, které nemají být sdíleny s uživatelským režimem, musí při práci s oddíly a zobrazeními používat následující protokol:

  • Ovladač musí při otevření úchytu pro objekt oddílu použít popisovač jádra. Ovladače můžou zajistit, že popisovač je popisovač jádra buď jeho vytvořením v systémovém procesu, nebo zadáním atributu OBJ_KERNEL_HANDLE popisovače. Další informace naleznete v tématu Popisovače objektů.

  • Zobrazení musí být mapováno pouze ze systémového vlákna. (V opačném případě je zobrazení přístupné z procesu, ve kterém byl vytvořen.) Ovladač může zajistit, že zobrazení je namapováno ze systémového procesu, pomocí systémového pracovního vlákna pro provedení operace mapování. Další informace naleznete v tématu System Worker Threads and Driver Thread Context.

Ovladače, které sdílejí zobrazení s procesem uživatelského režimu, musí při práci s oddíly a zobrazeními používat následující protokol:

  • Ovladač, nikoli proces uživatelského režimu, musí vytvořit objekt oddílu a namapovat zobrazení.

  • Jak už bylo zmíněno dříve, ovladač musí při otevření úchytu pro sekci jádra použít popisovač jádra. Ovladače můžou zajistit, že popisovač je popisovač jádra buď jeho vytvořením v systémovém procesu, nebo zadáním atributu OBJ_KERNEL_HANDLE popisovače. Další informace naleznete v tématu Popisovače objektů.

  • Zobrazení je mapováno v kontextu vlákna procesu, který sdílí zobrazení. Ovladač nejvyšší úrovně může zaručit, že zobrazení je mapováno v kontextu aktuálního procesu provedením operace mapování v rutině dispatch, jako je DispatchDeviceControl. Rutiny odesílání ovladačů nižší úrovně běží v libovolném kontextu vlákna, a proto nelze bezpečně mapovat zobrazení v rutině odeslání. Další informace naleznete v tématu Kontext vlákna ovladače.

  • Všechny přístupy k paměti k zobrazení v rámci ovladače musí být chráněny bloky try-except. Aplikace v uživatelském režimu se zlými úmysly může zobrazení zrušit nebo změnit stav ochrany zobrazení. Způsobilo by pád systému, pokud by nebylo chráněno blokem try-except. Další informace naleznete v tématu Zpracování výjimek.

Ovladač také musí podle potřeby ověřit obsah zobrazení. Zapisovač ovladače nemůže předpokládat, že k zobrazení má přístup pouze důvěryhodná součást uživatelského režimu.

Ovladač, který musí sdílet objekt oddílu s aplikací v uživatelském režimu (který musí být schopen vytvořit vlastní zobrazení), musí používat následující protokol:

  • Ovladač, nikoli proces uživatelského režimu, musí vytvořit objekt oddílu. Ovladače nesmí nikdy používat deskriptor, který byl předán z uživatelského režimu.

  • Před předáním popisovače do uživatelského režimu musí ovladač volat ObReferenceObjectByHandle, aby získal odkaz na objekt oddílu. Tím zabráníte škodlivé aplikaci v odstranění objektu oddílu zavřením popisovače. Odkaz na objekt by měl být uložen v rozšíření zařízení ovladače.

  • Jakmile ovladač již nepoužívá objekt oddílu, musí volat ObDereferenceObject, aby uvolnil odkaz na objekt.

V systémech se systémem Microsoft Windows Server 2003 s aktualizací Service Pack 1 (SP1) a novějšími verzemi mohou otevřít pouze ovladače režimu jádra \Device\PhysicalMemory. Řidiči se ale mohou rozhodnout poskytnout popisovač uživatelské aplikaci. Aby se zabránilo problémům se zabezpečením, měly by mít přístup k \zařízení\PhysicalMemory pouze uživatelské aplikace, kterým ovladač důvěřuje.