Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Proces v režimu jádra systému Windows a správce vláken řídí, jak se procesy a vlákna spouští v operačním systému Windows. Pochopení tohoto správce je nezbytné pro vývojáře ovladačů v režimu jádra, kteří potřebují vytvářet vlákna, monitorovat vytváření procesů nebo synchronizovat přístup ke sdíleným prostředkům.
Ukázka ovladače ObCallback ukazuje, jak používat rutiny oznámení procesů a vláken v ovladači režimu jádra.
Přehled procesů a vláken
Proces je softwarový program, který je aktuálně spuštěný ve Windows a je identifikovaný jedinečným ID procesu (PID). V každém procesu představuje jedno nebo více vláken skutečné jednotky provádění, které spouští kód programu. Každé vlákno má také jedinečné ID vlákna (TID) v rámci procesu.
Vlákna umožňují multitasking sdílením času procesoru. Na počítači s jedním procesorem je možné přidělit více vláken, ale současně se spustí pouze jedno. Procesor rychle přepíná mezi vlákny a vytváří iluzi současného provádění. V systémech s více procesory dojde k skutečnému paralelnímu spouštění, když vlákna běží současně na různých procesorech.
Procesy a vlákna v režimu jádra systému Windows a správce vláken zajišťují provádění všech vláken v procesu. Bez ohledu na to, jestli máte jeden procesor nebo více, je třeba při programování ovladačů zajistit, aby všechna vlákna vašeho procesu byla navržena tak, aby bez ohledu na pořadí, v jakém se vlákna zpracovávají, ovladač funguje správně.
Pokud se vlákna z různých procesů pokusí použít stejný prostředek ve stejnou dobu, může dojít k problémům. Systém Windows poskytuje několik technik, jak se tomuto problému vyhnout. Technika zajištění, aby se vlákna z různých procesů nedotýkala stejného prostředku, se nazývá synchronizace. Další informace o synchronizaci naleznete v tématu Techniky synchronizace.
Rutiny, které poskytují přímé rozhraní pro proces a správce vláken, mají obvykle předponu písmena "Ps"; Například PsCreateSystemThread. Seznam DDI jádra najdete v tématu Jádro Systému Windows.
Osvědčené postupy pro implementaci funkcí zpětného volání souvisejících s procesy a vlákny
Tato sada pokynů se vztahuje na tyto rutiny zpětného volání:
- PCREATE_PROCESS_NOTIFY_ROUTINE
- PCREATE_PROCESS_NOTIFY_ROUTINE_EX
- PCREATE_THREAD_NOTIFY_ROUTINE
- PLOAD_IMAGE_NOTIFY_ROUTINE
- POB_PRE_OPERATION_CALLBACK
- POB_POST_OPERATION_CALLBACK
Použijte tyto osvědčené postupy:
- Udržujte rutiny krátké a jednoduché.
- Neprovádějte volání do služby uživatelského režimu za účelem ověření procesu, vlákna nebo obrazu.
- Nedělejte volání do registru.
- Neprovádějte blokující a/nebo interprocesové (IPC) funkční volání.
- Neprovádějte synchronizaci s jinými vlákny, protože to může vést k blokádám způsobeným opětovným vstupem.
- Použití systémových pracovních vláken k práci ve frontě, zejména práce zahrnující:
- Pomalá rozhraní API nebo rozhraní API, která volají do jiného procesu.
- Jakékoli blokující chování, které by mohlo přerušit vlákna v základních službách.
- Pokud používáte systémová pracovní vlákna, nečekejte na dokončení práce. Tím se ztrácí účel řazení práce do fronty pro její asynchronní dokončení.
- Zvažte osvědčené postupy pro použití zásobníku v režimu jádra. Příklady najdete v tématu Jak můžu zabránit tomu, aby ovladači nedošlo zásobníkové místo v režimu jádra? a Klíčové koncepty a tipy pro ovladače.
Procesy subsystému
Počínaje Windows 10 umožňuje subsystém Windows pro Linux (WSL) uživateli spouštět nativní binární soubory LINUX ELF64 ve Windows spolu s dalšími aplikacemi pro Windows. Informace o architektuře WSL a komponentách uživatelského režimu a režimu jádra, které jsou potřeba ke spuštění binárních souborů, najdete v příspěvcích na blogu Subsystému Windows pro Linux .
Jednou z komponent je proces subsystému , který hostuje neupravený binární soubor linuxového režimu v uživatelském režimu, například /bin/bash. Procesy subsystému neobsahují datové struktury přidružené k procesům Win32, například blok prostředí procesu (PEB) a blok prostředí vlákna (TEB). V případě procesu subsystému jsou systémová volání a výjimky v uživatelském režimu odesílány do spárovaného ovladače.
Tady jsou změny rutin správce procesů a vláken, aby podporovaly procesy subsystému:
Typ WSL je označen hodnotou SubsystemInformationTypeWSL v SUBSYSTEM_INFORMATION_TYPE výčtu. Ovladače mohou volat NtQueryInformationProcess a NtQueryInformationThread k určení podkladového subsystému. Tyto volání vrací SubsystemInformationTypeWSL pro WSL.
Ostatní ovladače režimu jádra můžou dostat oznámení o vytvoření nebo odstranění procesu subsystému registrací své rutiny zpětného volání prostřednictvím volání PsSetCreateProcessNotifyRoutineEx2. Chcete-li získat oznámení o vytváření nebo odstraňování vláken, ovladače mohou volat PsSetCreateThreadNotifyRoutineEx a jako typ oznámení zadat PsCreateThreadNotifySubsystems .
Struktura PS_CREATE_NOTIFY_INFO byla rozšířena tak, aby zahrnovala člena IsSubsystemProcess , který označuje jiný subsystém než Win32. Další členy, jako je FileObject, ImageFileName, CommandLine , indikují další informace o procesu subsystému. Informace o chování těchto členů, viz SUBSYSTEM_INFORMATION_TYPE.