|
저도 정확히는 모르지만 아래의 정보가 도움이 될 것같군요.
MSDN 라이브러리를 찾아보니 아래의 두 가지 방법이 있군요.
BOOL IsAdmin( )
{
SC_HANDLE hSC;
// Try an Admin Privileged API - if it works, return TRUE, else FALSE
hSC = OpenSCManager(NULL, NULL, GENERIC_READ | GENERIC_WRITE | GENERIC_EXECUTE );
if ( hSC == NULL ) return FALSE;
CloseServiceHandle( hSC );
return TRUE;
}
BOOL IsAdmin(void)
{
HANDLE hAccessToken;
UCHAR InfoBuffer[1024];
PTOKEN_GROUPS ptgGroups = (PTOKEN_GROUPS)InfoBuffer;
DWORD dwInfoBufferSize;
PSID psidAdministrators;
SID_IDENTIFIER_AUTHORITY siaNtAuthority = SECURITY_NT_AUTHORITY;
UINT x;
BOOL bSuccess;
if(!OpenThreadToken(GetCurrentThread(), TOKEN_QUERY, TRUE,&hAccessToken ))
{
if(GetLastError() != ERROR_NO_TOKEN) return FALSE;
// retry against process token if no thread token exists
if(!OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY,&hAccessToken)) return FALSE;
}
bSuccess = GetTokenInformation(hAccessToken,TokenGroups,InfoBuffer,1024, &dwInfoBufferSize);
CloseHandle(hAccessToken);
if(!bSuccess ) return FALSE;
if(!AllocateAndInitializeSid(&siaNtAuthority, 2,
SECURITY_BUILTIN_DOMAIN_RID,
DOMAIN_ALIAS_RID_ADMINS,
0, 0, 0, 0, 0, 0,
&psidAdministrators))
return FALSE;
// assume that we don't find the admin SID.
bSuccess = FALSE;
for(x=0;x<ptgGroups->GroupCount;x++)
{
if( EqualSid(psidAdministrators, ptgGroups->Groups[x].Sid) )
{
bSuccess = TRUE;
break;
}
}
FreeSid(psidAdministrators);
return bSuccess;
}
민인학 님이 쓰신 글 :
: 제목 그대로입니다.
:
: 환경변수로 USER_NAME을 알아내서 Administrator인지 검색하는 방법 말구요..
: 딴 방법은 없나요?
:
: 따른 계정으로도 administrator권한이 있을수 있잖아요..
: 부탁드립니다.
|