|
MSDN 보다가 LogonUser 란 함수가 눈에 띄어,
아주 간단한 플그램을 짜보았습니다.
근데 테스트가 잘 안되서염 ^^;
소스는 아래와 같습니다. 새플젝트 열어서 걍 빈어있는
폼 그대로, OnCreate 이벤트 핸들러와, EnablePrivilege 전역함수
두개만을 작성한 것입니다.
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
BOOL EnablePrivilege(LPCSTR aName, BOOL afEnable)
{
HANDLE theToken;
TOKEN_PRIVILEGES thePrivilege;
LUID theLUID;
BOOL thefResult = FALSE;
if (!::OpenProcessToken(::GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &theToken))
return FALSE;
if (::LookupPrivilegeValue(0, aName, &theLUID))
{
thePrivilege.PrivilegeCount = 1;
thePrivilege.Privileges[0].Luid = theLUID;
if (afEnable)
thePrivilege.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
else
thePrivilege.Privileges[0].Attributes = 0;
if (::AdjustTokenPrivileges(theToken, FALSE, &thePrivilege, 0, 0, 0))
thefResult = TRUE;
}
::CloseHandle(theToken);
return thefResult;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
EnablePrivilege( SE_TCB_NAME, TRUE );
HANDLE hToken = INVALID_HANDLE_VALUE;
if( !LogonUser( "Administrator", NULL, "********", // 암호는 별표 ^^;;
LOGON32_LOGON_NETWORK, LOGON32_PROVIDER_DEFAULT, &hToken ) )
{
ShowMessage( GetLastError() );
}
}
//---------------------------------------------------------------------------
근데 항상 1314 가 출력되는 메시지 박스 하나 뜹니다.
MSDN 보니깐, 에러코드 1314 는 "SE_TCB_NAME Privilege is not held" 라고 하더군요.
물론 EnablePrivilege 함수의 리턴값은 TRUE 였습니다.
제가 LogonUser 함수를 잘못사용하는 것 같은데...
쩝... 답변좀 부탁드립니다.
ps. 이때 윈도에 어드민으로 로긴한 상태에서 테스트 했습니다.
|