1
키 소유자를 가져 오기 위해이 함수를 호출하려고합니다. 읽기 권한없이 레지스트리 키 핸들을 얻는 방법
[DllImport("Advapi32.dll", CharSet = CharSet.Auto)]
public extern static int SetSecurityInfo(IntPtr hKeySrc, SE_OBJECT_TYPE lpSubKey, SECURITY_INFORMATION securityInfo, IntPtr psidOwner, IntPtr psidGroup, IntPtr pDacl, IntPtr pSacl);
그러나,이 함수를 호출하기 위해, 내가 먼저 키 (IntPtr입니다 hKeysrc)에 대한 핸들이 필요합니다. 전에 이러한 함수를 사용하여 핸들을 가져옵니다.
RegistryKey key = root.OpenSubKey(keyName);
private static IntPtr GetRegistryKeyHandle(RegistryKey registryKey)
{
IntPtr ret = IntPtr.Zero;
try
{
Type registryKeyType = typeof(RegistryKey);
System.Reflection.FieldInfo fieldInfo =
registryKeyType.GetField("hkey", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
SafeHandle handle = (SafeHandle) fieldInfo.GetValue(registryKey);
ret = handle.DangerousGetHandle();
}
catch (Exception ex)
{
LogError("GetRegistryKeyHandle ERROR:" + ex.ToString());
}
return ret;
}
하지만 이제는 타겟팅하는 키에만 시스템 계정에 대한 권한이 있습니다!
키에 대한 regedit에서 사용 권한을 열려고하면 오류가 발생합니다. 현재 사용 권한 설정을 볼 수있는 권한이 없지만 사용 권한을 변경할 수 있습니다.
키에 대한 읽기 권한이 없습니다. 그럼 내가 처리하는 데 사용되는 방법은 무단 오류로 실패합니다.
이 경우 키를 어떻게 처리 할 수 있습니까? 사실, regedit이이를 수행 할 수 있습니다. 그래서 API가 그것을 할 수 있다고 생각합니다. 하지만 어떤 API를 호출해야할지 모르겠습니다.
의 키를 사용, 당신은 SeTakeOwnershipPrivilege를 사용하도록 설정 한 다음 WRITE_OWNER 액세스 키를 열어야합니다. 액세스 모드를 선택할 수있는 .NET API가 있는지 모르겠지만 필요한 경우 RegOpenKeyEx를 호출하거나 호출 할 수 있어야합니다. –
또는 백업 및 복원 권한을 활성화하면 Windows에 현재 사용 권한을 무시하도록 지시하므로 키를 열 때 특별한 작업을 수행 할 필요가 없습니다. –
@HarryJohnston, 다시 보내 주셔서 감사합니다. 나는 그것을 시도 할 것이다. – Linyes