예제 #1
0
 /// <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);
     }
 }