Hi @Prosanta Roy ,
Thank you for the detailed question. Part of this can be established from Microsoft sources, but public documentation does not define the access rights or rollback semantics of PROC_THREAD_ATTRIBUTE_JOB_LIST, and it provides no job-level barrier that proves every member has terminated. Below are the points I could establish, in the order of your questions.
1. JOB_LIST rights and prerequisites
Job Object Security and Access Rights maps JOB_OBJECT_ASSIGN_PROCESS to AssignProcessToJobObject and JOB_OBJECT_TERMINATE to TerminateJobObject, but it does not mention JOB_LIST. I could not find a public page that defines the access mask required on each job handle or any additional process right or privilege for this attribute. The documented prerequisites are Windows 10 or Windows Server 2016 for JOB_LIST, and Windows 8 or Windows Server 2012 for nested jobs.
2. Failure, rollback, and the comparison with CREATE_SUSPENDED
Raymond Chen's A more direct and mistake-free way of creating a process in a job object addresses the comparison. With CREATE_SUSPENDED followed by AssignProcessToJobObject, the process is briefly outside the job, and a creator crash in that window can leave it orphaned. With JOB_LIST, the process is assigned to each listed job in order before its initial thread runs, so it never executes outside the job. This is a DevBlogs explanation rather than API reference text, and it does not cover failure partway through a multi-job list or caller termination during CreateProcessW. I could not find documented rollback semantics for either case.
3. TerminateJobObject and PROCESS_TERMINATE
The security page lists only JOB_OBJECT_TERMINATE for TerminateJobObject, and states that access to a job implicitly grants access to its child jobs. The function's Remarks describe the effect as if TerminateProcess were called for each member, and children of a job member join the job by default even though the controller never holds their handles. The only documented link between PROCESS_TERMINATE and job membership is the process handle passed to AssignProcessToJobObject, so one consistent reading is that the per-process sentence refers to that admission-time check. This is my interpretation, not a documented guarantee.
4. Evidence that all members have terminated
JOBOBJECT_BASIC_ACCOUNTING_INFORMATION describes ActiveProcesses as the number of processes currently associated with the job, not as a termination witness. The Job Objects page documents the signaled state of a job object only for an exceeded end-of-job time limit, so waiting on the job handle is not a general barrier either, and JOBOBJECT_ASSOCIATE_COMPLETION_PORT states that notifications such as JOB_OBJECT_MSG_ACTIVE_PROCESS_ZERO are not guaranteed to be delivered. TerminateProcess states that termination is asynchronous and that waiting on the process handle confirms it. Closure can therefore be stated as confirmed only for processes whose handles the controller holds and has seen signaled. For other descendants, the defensible result is an unconfirmed status.
5. Admission, escape, and owner-loss cleanup
The Job Objects page states that children created through Win32_Process.Create are not associated with the job, and UpdateProcThreadAttribute states that a process created with PROC_THREAD_ATTRIBUTE_PARENT_PROCESS inherits the job of the specified parent, which requires PROCESS_CREATE_PROCESS on that parent. Neither path is governed by the breakaway settings, so containment also depends on what the checker's token can reach. The same Job Objects page states that JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE acts when the last job handle is closed, so any other retained, inherited, or duplicated handle keeps the job alive after the controller is lost.
Within the scope of this forum, this is as far as I can take it from public documentation. For a more thorough and binding confirmation, particularly on points 1 to 3, you can open a request through Windows Developer Support under technical support for app platforms (Windows SDK). Please note that this channel is paid, incident-based support and requires a Microsoft support contract.
I hope this helps clarify the available documentation and the appropriate next step. If you found my explanation above was truly helpful or informative to you, I would greatly appreciate it if you could follow this guidance so others with the same issue could benefit as well.
Thank you.