Cara mengesan hak pentadbir dengan atau tanpa keistimewaan yang tinggi
Kod semasa anda berjaya mengenal pasti status pentadbir, tetapi gagal apabila menentukan keistimewaan yang tinggi. Untuk menangani isu ini secara menyeluruh, kami akan meneroka pendekatan lain.
Semak sama ada UAC didayakan
Pertama, mari pastikan Kawalan Akaun Pengguna (UAC) didayakan. UAC ialah ciri keselamatan yang mengehadkan perubahan yang tidak dibenarkan pada sistem pengendalian. Jika UAC didayakan, kami memerlukan pendekatan yang berbeza untuk menyemak keistimewaan yang tinggi.
<code>RegistryKey uacKey = Registry.LocalMachine.OpenSubKey(uacRegistryKey, false); bool isUacEnabled = uacKey.GetValue(uacRegistryValue).Equals(1);</code>
Sahkan proses keistimewaan dinaikkan
Seterusnya, mari semak status keistimewaan yang tinggi bagi proses semasa. Jika UAC didayakan, kami akan menggunakan fungsi GetTokenInformation
untuk mendapatkan semula jenis promosi token.
<code>IntPtr tokenHandle; if (!OpenProcessToken(Process.GetCurrentProcess().Handle, TOKEN_READ, out tokenHandle)) {throw new ApplicationException("无法获取进程令牌。Win32 错误代码: " + Marshal.GetLastWin32Error());} TOKEN_ELEVATION_TYPE elevationResult = TOKEN_ELEVATION_TYPE.TokenElevationTypeDefault; int elevationResultSize = Marshal.SizeOf((int)elevationResult); uint returnedSize = 0; IntPtr elevationTypePtr = Marshal.AllocHGlobal(elevationResultSize); bool success = GetTokenInformation(tokenHandle, TOKEN_INFORMATION_CLASS.TokenElevationType, elevationTypePtr, (uint)elevationResultSize, out returnedSize); if (success) { elevationResult = (TOKEN_ELEVATION_TYPE)Marshal.ReadInt32(elevationTypePtr); bool isProcessAdmin = elevationResult == TOKEN_ELEVATION_TYPE.TokenElevationTypeFull; return isProcessAdmin; }</code>
Jika UAC tidak didayakan, kami boleh bergantung pada WindowsPrincipal.IsInRole
untuk menyemak status promosi.
<code>WindowsIdentity identity = WindowsIdentity.GetCurrent(); WindowsPrincipal principal = new WindowsPrincipal(identity); bool result = principal.IsInRole(WindowsBuiltInRole.Administrator); return result;</code>
Penyelesaian Lengkap
Dengan menggabungkan kedua-dua kaedah ini, kami boleh mengesan secara menyeluruh sama ada aplikasi berjalan dengan keistimewaan yang tinggi, tanpa mengira status UAC.
Atas ialah kandungan terperinci Bagaimana untuk Mengesan Pentadbir dan Keistimewaan Ditingkatkan dengan Amanah dalam Windows?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!