/// <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))); } } }