読者です 読者をやめる 読者になる 読者になる

しーくさんのUp & Down - Thinking Notes

更新頻度はあまり高くないです。プログラミングやLinuxなどのことについてや、果てはゲーム記事まで。

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;
}