관리자 및 상승된 권한을 정확하게 결정
제공된 코드 조각은 관리자 상태를 정확하게 식별하지만 표준 관리자 권한과 상승된 권한을 구별하는 기능이 부족합니다. 이 개선 사항은 이러한 제한 사항을 해결합니다.
이 솔루션에는 고도 상태 확인에 대한 세련된 접근 방식이 포함됩니다.
개선된 IsProcessElevated
방법:
이 향상된 방법은 GetTokenInformation
기능을 활용하여 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>
이 방법은 UAC 활성화 및 UAC 비활성화 시나리오를 모두 강력하게 처리하여 상승된 권한을 안정적으로 결정할 수 있습니다.
위 내용은 프로세스가 높은 권한으로 실행되고 있는지 확실하게 확인하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!