/// <summary> /// Set AppContainer Information to Context. /// </summary> /// <param name="package_sid">The package SID.</param> /// <param name="capabilities">List of capabilities.</param> /// <param name="throw_on_error">True to throw on error</param> /// <returns>The NT status code.</returns> public NtStatus SetAppContainer(Sid package_sid, IEnumerable <UserGroup> capabilities, bool throw_on_error) { using (var list = new DisposableList()) { var sid_buffer = list.AddResource(package_sid.ToSafeBuffer()); var cap_sids = capabilities?.ToArray() ?? new UserGroup[0]; SafeTokenGroupsBuffer cap_buffer = list.AddResource(SafeTokenGroupsBuffer.Create(cap_sids)); SafeBuffer buffer = cap_sids.Length > 0 ? cap_buffer.Data : SafeHGlobalBuffer.Null; if (!SecurityNativeMethods.AuthzSetAppContainerInformation(_handle, sid_buffer, cap_sids.Length, buffer)) { return(NtObjectUtils.MapDosErrorToStatus().ToNtException(throw_on_error)); } return(NtStatus.STATUS_SUCCESS); } }