Windows/개발2015.06.15 18:18

현재 로그인된 계정의 권한을 확인하는 코드 입니다. 


Header 파일 입니다.

#pragma once
#include  <lmaccess.h>

const DWORD cDwNetWLevel	 = 1 ; 
const DWORD cDwNetUserLevel  = 2 ; 

class CGetUserInfo
{
public:
	enum USER_PRIV
	{
		eUSER_PRIV_GUEST = 0,
		eUSER_PRIV_USER,
		eUSER_PRIV_ADMIN,
	};
	
public:
	static CGetUserInfo &Instance();
	USER_PRIV GetUserType();

private:
	BOOL GetUserDomainInfo(LPUSER_INFO_2& pUserInfo);

private:
	CGetUserInfo(void);
	~CGetUserInfo(void);
	CGetUserInfo& operator=(const CGetUserInfo&);


};

Source 파일 입니다.

#include "StdAfx.h"
#include "GetUserInfo.h"
#include  <lmwksta.h>
#include  <lmerr.h>
#include  <lm.h>
#pragma comment(lib, "netapi32.lib")
#define RETURN(x,y){x=y;goto Exit;}

CGetUserInfo::CGetUserInfo(void)
{
}

CGetUserInfo::~CGetUserInfo(void)
{
}

CGetUserInfo& CGetUserInfo::Instance()
{
	static CGetUserInfo _Ins;
	return _Ins;
}


CGetUserInfo::USER_PRIV CGetUserInfo::GetUserType()
{
	CGetUserInfo::USER_PRIV result = eUSER_PRIV_ADMIN; 

	LPUSER_INFO_2 pUserInfo = NULL;

	if( FALSE == GetUserDomainInfo(pUserInfo) )
	{
		RETURN(result,eUSER_PRIV_ADMIN);
	}
	if(pUserInfo->usri2_priv == USER_PRIV_GUEST)
	{
		RETURN(result,eUSER_PRIV_GUEST);
	}
	else
	if(pUserInfo->usri2_priv == USER_PRIV_USER)
	{
		RETURN(result,eUSER_PRIV_USER);
	}
	else
	if(pUserInfo->usri2_priv == USER_PRIV_ADMIN)
	{
		RETURN(result,eUSER_PRIV_ADMIN);
	}
Exit:
	return result;
}

BOOL CGetUserInfo::GetUserDomainInfo(LPUSER_INFO_2& pUserInfo)
{
	BOOL bResult = TRUE;

	LPWKSTA_USER_INFO_1 pWkstaInfo = NULL;
	NET_API_STATUS nStatus = NetWkstaUserGetInfo(NULL,	cDwNetWLevel, (LPBYTE *)&pWkstaInfo);
	if (nStatus != NERR_Success || NULL == pWkstaInfo )
	{
		RETURN(bResult, FALSE);		
	}

	nStatus = NetUserGetInfo( (LPCWSTR)pWkstaInfo->wkui1_logon_server , 
							  (LPCWSTR)pWkstaInfo->wkui1_username, 
							  cDwNetUserLevel, 
							  (LPBYTE*)&pUserInfo);
	if( NULL == pUserInfo)
	{
		RETURN(bResult, FALSE);		
	}

Exit:
	if ( pWkstaInfo != NULL )
	{
		NetApiBufferFree(pWkstaInfo);
	}
	return bResult;
}


사용법 입니다.

#include "stdafx.h"
#include <windows.h>
#include "GetUserInfo.h"

int main()
{
	CGetUserInfo::Instance().GetUserType();
	system("pause");
	return 0;
}
Posted by 최우림 -=HaeJuK=-

티스토리 툴바