Dědičnost
Podřízený proces může dědit několik vlastností a prostředků z nadřazeného procesu. Můžete také zabránit podřízeného procesu v dědění vlastností z nadřazeného procesu. Může se zdědit následující:
- Otevřené popisovače vrácené funkcí CreateFile To zahrnuje popisovače souborů, vyrovnávací paměti pro vstup konzoly, vyrovnávací paměti obrazovky konzoly, pojmenované kanály, sériová komunikační zařízení a mailsloty.
- Otevřené popisovače pro zpracování, vlákno, mutex, událost, semaphore, pojmenované kanály, anonymní kanál a objekty mapování souborů. Ty vrátíCreateProcess , CreateThread, CreateMutex, CreateEvent, CreateSemaphore, CreateNamedPipe, CreatePipea CreateFileMapping funkce.
- Proměnné prostředí.
- Aktuální adresář.
- Konzola, pokud není proces odpojen nebo není vytvořena nová konzola. Podřízený proces konzoly může také dědit standardní popisovače nadřazeného objektu a také přístup ke vstupní vyrovnávací paměti a aktivní vyrovnávací paměti obrazovky.
- Režim chyby nastavený funkcí SetErrorMode.
- Maska spřažení procesoru.
- Přidružení k úloze.
Podřízený proces nedědí následující:
- Třída priority.
- Zpracovává vrácené LocalAlloc, GlobalAlloc, HeapCreatea HeapAlloc .
- Pseudo handles, as in the handles return by GetCurrentProcess nebo GetCurrentThread function. Tyto popisovače jsou platné pouze pro volající proces.
- Modul KNIHOVNY DLL zpracovává vrácené funkcí LoadLibrary.
- GDI nebo UŽIVATELSKÉ popisovače, například HBITMAP nebo HMENU.
Dědění popisovačů
Podřízený proces může dědit některé z popisovačů nadřazeného objektu, ale nemůže dědit jiné. Pokud chcete způsobit zděděný popisovač, musíte udělat dvě věci:
- Určete, že popisovač má být zděděný při vytváření, otevření nebo duplikování popisovače. Funkce vytváření obvykle používají bInheritHandle člen struktury SECURITY_ATTRIBUTES pro tento účel. DuplicateHandle používá parametr bInheritHandles.
- Určete, že děditelné popisovače mají být zděděny nastavením bInheritHandles parametr true při volání CreateProcess funkce. Kromě toho, pokud chcete dědit standardní vstup, standardní výstup a standardní obslužné rutiny chyb, musí dwFlags člen struktury STARTUPINFO obsahovat STARTF_USESTDHANDLES.
Chcete-li zadat seznam popisovačů, které mají být zděděny konkrétním podřízeným procesem, zavolejte UpdateProcThreadAttribute funkce s příznakem PROC_THREAD_ATTRIBUTE_HANDLE_LIST.
Zděděný popisovač odkazuje na stejný objekt v podřízeném procesu jako v nadřazeném procesu. Má také stejnou hodnotu a přístupová oprávnění. Proto když jeden proces změní stav objektu, změna ovlivní oba procesy. Aby bylo možné použít popisovač, podřízený proces musí načíst hodnotu popisovače a "znát" objekt, na který odkazuje. Nadřazený proces obvykle tyto informace komunikuje s podřízeným procesem prostřednictvím příkazového řádku, bloku prostředí nebo určité formy komunikace mezi procesy.
Pomocí funkce SetHandleInformation můžete určit, jestli je existující popisovač zděděný nebo ne.
Dědění proměnných prostředí
Podřízený proces ve výchozím nastavení dědí proměnné prostředí nadřazeného procesu. CreateProcess však umožňuje nadřazený proces určit jiný blok proměnných prostředí. Další informace naleznete v tématu proměnné prostředí.
Dědění aktuálního adresáře
Funkce GetCurrentDirectory načte aktuální adresář volajícího procesu. Podřízený proces ve výchozím nastavení dědí aktuální adresář nadřazeného procesu. Ale CreateProcess umožňuje nadřazený proces určit jiný aktuální adresář pro podřízený proces. Chcete-li změnit aktuální adresář volajícího procesu, použijte funkci SetCurrentDirectory.