Arv
En underordnad process kan ärva flera egenskaper och resurser från den överordnade processen. Du kan också förhindra att en underordnad process ärver egenskaper från den överordnade processen. Följande kan ärvas:
- Öppna referenser som returneras av funktionen CreateFile. Detta omfattar referenser till filer, konsolindatabuffertar, konsolskärmsbuffertar, namngivna rör, seriell kommunikationsenheter och e-postslots.
- Öppna referenser för att bearbeta, tråda, mutex, händelse, semafor, namngivna pipe-, anonym-pipe- och filmappningsobjekt. Dessa returneras av CreateProcess, CreateThread, CreateMutex, CreateEvent, CreateSemaphore, CreateNamedPipe, CreatePipeoch Funktionerna CreateFileMapping.
- Miljövariabler.
- Den aktuella katalogen.
- Konsolen, såvida inte processen kopplas från eller en ny konsol skapas. En underordnad konsolprocess kan också ärva den överordnades standardreferenser samt åtkomst till indatabufferten och den aktiva skärmbufferten.
- Felläget, som anges av funktionen SetErrorMode.
- Masken för processortillhörighet.
- Associationen med ett jobb.
Den underordnade processen ärver inte följande:
- Prioritetsklass.
- Referenser som returneras av LocalAlloc, GlobalAlloc, HeapCreateoch HeapAlloc.
- Pseudoreferenser, som i handtagen som returneras av funktionen GetCurrentProcess eller GetCurrentThread. Dessa referenser är endast giltiga för anropsprocessen.
- DLL-modulen hanterar som returneras av funktionen LoadLibrary.
- GDI- eller ANVÄNDARreferenser, till exempel HBITMAP- eller HMENU-.
Ärv referenser
En underordnad process kan ärva vissa av dess överordnade referenser, men inte ärva andra. Om du vill att ett handtag ska vara ärvt måste du göra två saker:
- Ange att handtaget ska ärvas när du skapar, öppnar eller duplicerar handtaget. Skapandefunktioner använder vanligtvis bInheritHandle medlem i en SECURITY_ATTRIBUTES struktur för detta ändamål. DuplicateHandle använder parametern bInheritHandles.
- Ange att ärvbara referenser ska ärvas genom att ange parametern bInheritHandles true när du anropar funktionen CreateProcess. För att ärva standardindata, standardutdata och standardfelhandtag måste dwFlags medlem i STARTUPINFO- struktur innehålla STARTF_USESTDHANDLES.
Om du vill ange en lista över referenser som ska ärvas av en specifik underordnad process anropar du funktionen UpdateProcThreadAttribute med flaggan PROC_THREAD_ATTRIBUTE_HANDLE_LIST.
Ett ärvt handtag refererar till samma objekt i den underordnade processen som i den överordnade processen. Den har också samma värde och åtkomstbehörigheter. När en process ändrar objektets tillstånd påverkar ändringen därför båda processerna. Om du vill använda ett handtag måste den underordnade processen hämta referensvärdet och "känna till" det objekt som den refererar till. Vanligtvis kommunicerar den överordnade processen den här informationen till den underordnade processen via dess kommandorad, miljöblock eller någon form av interprocesskommunikation.
Använd funktionen SetHandleInformation för att kontrollera om ett befintligt handtag kan ärvas eller inte.
Ärver miljövariabler
En underordnad process ärver miljövariablerna i den överordnade processen som standard. Men CreateProcess- gör det möjligt för den överordnade processen att ange ett annat block med miljövariabler. Mer information finns i Miljövariabler.
Ärver den aktuella katalogen
Funktionen GetCurrentDirectory hämtar den aktuella katalogen för anropsprocessen. En underordnad process ärver den aktuella katalogen för den överordnade processen som standard. Men CreateProcess gör det möjligt för den överordnade processen att ange en annan aktuell katalog för den underordnade processen. Om du vill ändra den aktuella katalogen för anropsprocessen använder du funktionen SetCurrentDirectory.