Rumah > pembangunan bahagian belakang > C++ > Bagaimana untuk Mengesan Pentadbir dan Keistimewaan Ditingkatkan dengan Amanah dalam Windows?

Bagaimana untuk Mengesan Pentadbir dan Keistimewaan Ditingkatkan dengan Amanah dalam Windows?

DDD
Lepaskan: 2025-01-13 08:44:42
asal
575 orang telah melayarinya

How to Reliably Detect Administrator and Elevated Privileges in Windows?

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan