Miras
Alt işlem, üst işleminden çeşitli özellikleri ve kaynakları devralabilir. Ayrıca bir alt işlemin üst işlemden özellikleri devralmasını engelleyebilirsiniz. Aşağıdakiler devralınabilir:
- CreateFile işlevi tarafından döndürülen tanıtıcıları açın. Dosyalara yönelik tanıtıcılar, konsol giriş arabellekleri, konsol ekranı arabellekleri, adlandırılmış kanallar, seri iletişim cihazları ve posta grafikleri buna dahildir.
- İşleme, iş parçacığı, mutex, olay, semafor, adlandırılmış kanal, anonim kanal ve dosya eşleme nesneleri için tanıtıcıları açın. Bunlar CreateProcess , CreateThread, CreateMutex, CreateEvent, CreateSemaphore, CreateNamedPipe, CreatePipeve CreateFileMapping işlevleri, sırasıyla.
- Ortam değişkenleri.
- Geçerli dizin.
- İşlem ayrılmadığı veya yeni bir konsol oluşturulmadığı sürece konsol. Alt konsol işlemi, üst konsolun standart tanıtıcılarının yanı sıra giriş arabelleğine ve etkin ekran arabelleğine erişimi de devralabilir.
- SetErrorMode işlevi tarafından ayarlanan hata modu.
- İşlemci benzite maskesi.
- bir iş ile ilişkilendirme.
Alt işlem aşağıdakileri devralmıyor:
- Öncelik sınıfı.
- LocalAlloc, GlobalAlloc, HeapCreateve HeapAlloctarafından döndürülen tanıtıcılar.
- GetCurrentProcess veya GetCurrentThreadişlevi tarafından döndürülensahte tanıtıcılar. Bu tanıtıcılar yalnızca çağrı işlemi için geçerlidir.
- LoadLibrary işlevi tarafından döndürülen DLL modülü tanıtıcıları.
- HBITMAP veya HMENUgibi GDI veya KULLANICI tanıtıcıları.
Tanıtıcıları Devralma
Alt işlem, üst öğesinin tanıtıcılarından bazılarını devralabilir, ancak diğerlerini devralmayabilir. Bir tanıtıcının devralınmasına neden olmak için iki şey yapmanız gerekir:
- Tutamacı oluşturduğunuzda, açtığınızda veya çoğalttığınızda tutamacın devralınacağını belirtin. Oluşturma işlevleri genellikle bu amaçla bir SECURITY_ATTRIBUTES yapısının bInheritHandle üyesini kullanır. DuplicateHandle, bInheritHandles parametresini kullanır.
- CreateProcess işlevi çağrılırken bInheritHandles parametresi TRUE olarak ayarlanarak devralınabilir tanıtıcıların devralınacağını belirtin. Ayrıca standart girişi, standart çıkışı ve standart hata tanıtıcılarını devralmak için dwFlagsSTARTUPINFO yapısının üyesi STARTF_USESTDHANDLES içermelidir.
Belirli bir alt işlem tarafından devralınması gereken tanıtıcıların listesini belirtmek için UpdateProcThreadAttribute işlevini PROC_THREAD_ATTRIBUTE_HANDLE_LIST bayrağıyla çağırın.
Devralınan tanıtıcı, alt işlemdeki nesnenin üst işlemdekiyle aynı nesneye başvurur. Ayrıca aynı değere ve erişim ayrıcalıklarına sahiptir. Bu nedenle, bir işlem nesnenin durumunu değiştirdiğinde, değişiklik her iki işlemi de etkiler. Tanıtıcı kullanmak için alt işlemin tanıtıcı değerini alması ve başvurduğu nesneyi "bilmesi" gerekir. Genellikle, üst işlem bu bilgileri alt işleme komut satırı, ortam bloğu veya işlemler arası iletişimbir biçimde iletir.
Mevcut tanıtıcının devralınabilir olup olmadığını denetlemek için SetHandleInformation işlevini kullanın.
Ortam Değişkenlerini Devralma
Alt işlem, üst işleminin ortam değişkenlerini varsayılan olarak devralır. Ancak CreateProcess, üst işlemin farklı bir ortam değişkeni bloğu belirtmesini sağlar. Daha fazla bilgi için bkz. Ortam Değişkenleri.
Geçerli Dizini Devralma
GetCurrentDirectory işlevi, çağırma işleminin geçerli dizinini alır. Alt işlem varsayılan olarak üst işleminin geçerli dizinini devralır. Ancak CreateProcess, üst işlemin alt işlem için farklı bir geçerli dizin belirtmesini sağlar. Çağırma işleminin geçerli dizinini değiştirmek için SetCurrentDirectory işlevini kullanın.