예제 #1
0
 /// <summary>
 /// Open the AppContainer key.
 /// </summary>
 /// <param name="desired_access">The desired access for the key.</param>
 /// <param name="throw_on_error">True to throw on error.</param>
 /// <returns>The opened key.</returns>
 public NtResult <NtKey> OpenKey(KeyAccessRights desired_access, bool throw_on_error)
 {
     using (var result = TokenUtils.CreateAppContainerToken(null, Sid, new Sid[0], throw_on_error)) {
         if (!result.IsSuccess)
         {
             return(result.Cast <NtKey>());
         }
         using (var imp = result.Result.Impersonate(SecurityImpersonationLevel.Impersonation)) {
             return(Win32NativeMethods.GetAppContainerRegistryLocation(desired_access, out SafeKernelObjectHandle key)
                    .CreateResult(throw_on_error, () => new NtKey(key, KeyDisposition.OpenedExistingKey, false)));
         }
     }
 }