C++에서 권한 사용 및 사용 안 함
액세스 토큰에서 권한을 사용하도록 설정하면 프로세스에서 이전에는 수행할 수 없었던 시스템 수준 작업을 수행할 수 있습니다. 애플리케이션은 특히 다음과 같은 강력한 권한에 대해 권한이 계정 유형에 적합한지 철저히 확인해야 합니다.
권한 상수 | 문자열 값 | 표시 이름 |
---|---|---|
SE_ASSIGNPRIMARYTOKEN_NAME | SeAssignPrimaryTokenPrivilege | 프로세스 수준의 토큰 대체 |
SE_BACKUP_NAME | SeBackupPrivilege | 파일 및 디렉터리 백업 |
SE_DEBUG_NAME | SeDebugPrivilege | 프로그램 디버그 |
SE_INCREASE_QUOTA_NAME | SeIncreaseQuotaPrivilege | 프로세스에 대한 메모리 할당량 조정 |
SE_TCB_NAME | SeTcbPrivilege | 운영 체제의 일부로 작동 |
잠재적으로 위험한 권한을 사용하도록 설정하기 전에 코드의 함수 또는 작업에 실제로 권한이 필요한지 확인합니다. 예를 들어 운영 체제에서 실제로 SeTcbPrivilege가 필요한 함수는 거의 없습니다. 사용 가능한 모든 권한 목록은 권한 상수를 참조하세요.
다음 예제에서는 액세스 토큰에서 권한을 사용하거나 사용하지 않도록 설정하는 방법을 보여 줍니다. 이 예제에서는 LookupPrivilegeValue 함수를 호출하여 로컬 시스템에서 권한을 식별하는 데 사용하는 LUID( 로컬 고유 식별자 )를 가져옵니다. 그런 다음, 이 예제에서는 bEnablePrivilege 매개 변수의 값에 따라 권한을 사용하거나 사용하지 않도록 설정하는 AdjustTokenPrivileges 함수를 호출합니다.
#include <windows.h>
#include <stdio.h>
#pragma comment(lib, "advapi32.lib")
BOOL SetPrivilege(
HANDLE hToken, // access token handle
LPCTSTR lpszPrivilege, // name of privilege to enable/disable
BOOL bEnablePrivilege // to enable or disable privilege
)
{
TOKEN_PRIVILEGES tp;
LUID luid;
if ( !LookupPrivilegeValue(
NULL, // lookup privilege on local system
lpszPrivilege, // privilege to lookup
&luid ) ) // receives LUID of privilege
{
printf("LookupPrivilegeValue error: %u\n", GetLastError() );
return FALSE;
}
tp.PrivilegeCount = 1;
tp.Privileges[0].Luid = luid;
if (bEnablePrivilege)
tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
else
tp.Privileges[0].Attributes = 0;
// Enable the privilege or disable all privileges.
if ( !AdjustTokenPrivileges(
hToken,
FALSE,
&tp,
sizeof(TOKEN_PRIVILEGES),
(PTOKEN_PRIVILEGES) NULL,
(PDWORD) NULL) )
{
printf("AdjustTokenPrivileges error: %u\n", GetLastError() );
return FALSE;
}
if (GetLastError() == ERROR_NOT_ALL_ASSIGNED)
{
printf("The token does not have the specified privilege. \n");
return FALSE;
}
return TRUE;
}
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기