C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 팁&트릭
C++Builder Programming Tip&Tricks
[1109] Token을 이용해서 현재 관리자 권한으로 실행중인지 알아내는 방법
빌더(TWx) [builder] 14264 읽음    2012-10-26 00:57
Token을 이용해서 현재 프로세스가 관리자 권한으로 실행중인지 아닌지를 알아내는 방법 입니다.

UAC가 켜져 있는 상태에서도 "관리자권한 실행여부"의 프롬프트 박스가 나타나지 않게 하면서...

프로그램 스스로 관리자 권한을 획득해서 실행되게 하는 코드를 구현 한다고 할 때...

관리자 권한 실행여부를 체크하는 방법으로 이용해도 되겠죠...

코드가 간단해서 설명은 생략 합니다. (API는 MSDN 문서를 참조하세요)


#include 
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
	DWORD dwSize;
	HANDLE hToken;
	PTOKEN_MANDATORY_LABEL ptml;
	LPWSTR szSid;

	OpenProcessToken(
		GetCurrentProcess(),
		TOKEN_QUERY,
		&hToken);

	GetTokenInformation(
		hToken,
		TokenIntegrityLevel,
		NULL,
		0,
		&dwSize);

	ptml = (PTOKEN_MANDATORY_LABEL)HeapAlloc(
		GetProcessHeap(),
		HEAP_ZERO_MEMORY,
		dwSize);

	GetTokenInformation(
		hToken,
		TokenIntegrityLevel,
		ptml,
		dwSize,
		&dwSize);

	ConvertSidToStringSid(
		ptml->Label.Sid,
		&szSid);

	if(_wcscmpi(szSid, L"S-1-16-12288") == 0)
		ShowMessage("현재 관리자 권한으로 실행되고 있음.");

	else
		ShowMessage("현재 관리자 권한으로 실행되고 있지 않음.");

	HeapFree(GetProcessHeap(), 0, (LPVOID)ptml);
	LocalFree(szSid);
}





현재 사용자의 SID와 Domain/User 네임을 알아내는 방법은 다음 링크를 참조하세요.

http://cbuilder.borlandforum.com/impboard/impboard.dll?action=read&db=bcb_qna&no=68426



...
時代遺憾 [cdincdin]   2012-11-20 11:01 X
아 제가 찾던 정보입니다. 감사합니다.

+ -

관련 글 리스트
1109 Token을 이용해서 현재 관리자 권한으로 실행중인지 알아내는 방법 빌더(TWx) 14264 2012/10/26
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.