Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Menentukan dengan Boleh Dipercayai sama ada Proses Berjalan dengan Keistimewaan Ditingkatkan?
Menentukan Pentadbir dan Keistimewaan Ditinggikan Dengan Tepat
Coretan kod yang disediakan dengan tepat mengenal pasti status pentadbir, tetapi tidak mempunyai keupayaan untuk membezakan antara hak pentadbir standard dan keistimewaan yang dinaikkan. Peningkatan ini menangani had itu.
Penyelesaian melibatkan pendekatan yang diperhalusi untuk penentuan status ketinggian:
Diperbaiki IsProcessElevated
Kaedah:
Kaedah yang dipertingkatkan ini memanfaatkan fungsi GetTokenInformation
untuk memastikan secara langsung tahap ketinggian proses, mengambil kira tetapan Kawalan Akaun Pengguna (UAC):
<code class="language-csharp">public static bool IsProcessElevated { get { // Check UAC status if (UacHelper.IsUacEnabled) { // Obtain process token IntPtr tokenHandle; if (!OpenProcessToken(Process.GetCurrentProcess().Handle, TOKEN_READ, out tokenHandle)) { throw new ApplicationException($"Failed to retrieve process token. Win32 Error Code: {Marshal.GetLastWin32Error()}"); } // Retrieve elevation type 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); return elevationResult == TOKEN_ELEVATION_TYPE.TokenElevationTypeFull; } else { throw new ApplicationException("Elevation status determination failed."); } } else { // Fallback to standard administrator check if UAC is disabled WindowsIdentity identity = WindowsIdentity.GetCurrent(); WindowsPrincipal principal = new WindowsPrincipal(identity); return principal.IsInRole(WindowsBuiltInRole.Administrator); } } }</code>
Kaedah ini mengendalikan kedua-dua senario yang didayakan UAC dan dilumpuhkan UAC dengan mantap, memberikan penentuan keistimewaan tinggi yang boleh dipercayai.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menentukan dengan Boleh Dipercayai sama ada Proses Berjalan dengan Keistimewaan Ditingkatkan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!