Warisan

Proses anak dapat mewarisi beberapa properti dan sumber daya dari proses induknya. Anda juga dapat mencegah proses anak mewarisi properti dari proses induknya. Berikut ini dapat diwariskan:

  • Buka handel yang dikembalikan oleh fungsi CreateFile . Ini termasuk handel ke file, buffer input konsol, buffer layar konsol, pipa bernama, perangkat komunikasi serial, dan mailslots.
  • Buka handel untuk memproses, utas, mutex, peristiwa, semaphore, named-pipe, anonymous-pipe, dan objek pemetaan file. Ini dikembalikan oleh fungsi CreateProcess, CreateThread, CreateMutex, CreateEvent, CreateSemaphore, CreateNamedPipe, CreatePipe, dan CreateFileMapping .
  • Variabel lingkungan.
  • Direktori saat ini.
  • Konsol, kecuali proses dicopot atau konsol baru dibuat. Proses konsol anak juga dapat mewarisi handel standar induk, serta akses ke buffer input dan buffer layar aktif.
  • Mode kesalahan, seperti yang diatur oleh fungsi SetErrorMode .
  • Masker afinitas prosesor.
  • Asosiasi dengan pekerjaan.

Proses anak tidak mewarisi hal berikut:

Mewarisi Handel

Proses anak dapat mewarisi beberapa handel induknya, tetapi tidak mewarisi yang lain. Untuk menyebabkan handel diwariskan, Anda harus melakukan dua hal:

  • Tentukan bahwa handel akan diwariskan saat Anda membuat, membuka, atau menduplikasi handel. Fungsi pembuatan biasanya menggunakan anggota bInheritHandle dari struktur SECURITY_ATTRIBUTES untuk tujuan ini. DuplicateHandle menggunakan parameter bInheritHandles .
  • Tentukan bahwa handel yang dapat diwariskan akan diwariskan dengan mengatur parameter bInheritHandles ke TRUE saat memanggil fungsi CreateProcess . Selain itu, untuk mewarisi input standar, output standar, dan handel kesalahan standar, anggota dwFlags dari struktur STARTUPINFO harus menyertakan STARTF_USESTDHANDLES.

Untuk menentukan daftar handel yang harus diwarisi oleh proses turunan tertentu, panggil fungsi UpdateProcThreadAttribute dengan bendera PROC_THREAD_ATTRIBUTE_HANDLE_LIST .

Handel yang diwariskan mengacu pada objek yang sama dalam proses anak seperti dalam proses induk. Ini juga memiliki nilai dan hak akses yang sama. Oleh karena itu, ketika satu proses mengubah status objek, perubahan mempengaruhi kedua proses. Untuk menggunakan handel, proses anak harus mengambil nilai handel dan "tahu" objek yang dirujuknya. Biasanya, proses induk mengkomunikasikan informasi ini ke proses anak melalui baris perintah, blok lingkungan, atau beberapa bentuk komunikasi antarproses.

Gunakan fungsi SetHandleInformation untuk mengontrol apakah handel yang ada dapat diwariskan atau tidak.

Mewarisi Variabel Lingkungan

Proses anak mewarisi variabel lingkungan dari proses induknya secara default. Namun, CreateProcess memungkinkan proses induk untuk menentukan blok variabel lingkungan yang berbeda. Untuk informasi selengkapnya, lihat Variabel Lingkungan.

Mewarisi Direktori Saat Ini

Fungsi GetCurrentDirectory mengambil direktori saat ini dari proses panggilan. Proses turunan mewarisi direktori saat ini dari proses induknya secara default. Namun, CreateProcess memungkinkan proses induk menentukan direktori saat ini yang berbeda untuk proses anak. Untuk mengubah direktori proses panggilan saat ini, gunakan fungsi SetCurrentDirectory .