Seeker's Memo

個人的で技術的かもしれないメモがメインのブログです。http://seekers.hatenablog.jp/about

C/C++言語(Windows用)で、それが管理者権限で実行されているかプログラム内から確認したい時のサンプル

#include <windows.h>
#include <tchar.h>
#pragma comment(lib, "kernel32") 
#pragma comment(lib, "user32")
#pragma comment(lib, "advapi32")

//自作関数定義
BOOL IsAnAdmin(VOID){
	BOOL b = FALSE;
	SID_IDENTIFIER_AUTHORITY NtAuthority = SECURITY_NT_AUTHORITY;
	PSID AdministratorsGroup; 
	b = AllocateAndInitializeSid(
		&NtAuthority,
		2,
		SECURITY_BUILTIN_DOMAIN_RID,
		DOMAIN_ALIAS_RID_ADMINS,
		0, 0, 0, 0, 0, 0,
		&AdministratorsGroup); 
	if(b) 
	{
		if (!CheckTokenMembership( NULL, AdministratorsGroup, &b)) 
		{
			 b = FALSE;
		} 
		FreeSid(AdministratorsGroup); 
	}

	return(b);
}



int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow){
	if(IsAnAdmin())
		::MessageBox(NULL,_T("管理者権限で起動しました"),_T("実行権限の情報"),MB_OK | MB_ICONINFORMATION);
	else
		::MessageBox(NULL,_T("通常権限で起動しました"),_T("実行権限の情報"),MB_OK | MB_ICONINFORMATION);
	
	return 0;
}