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

C++빌더 Q&A
C++Builder Programming Q&A
[10949] [질문] LogonUser 함수에 관한 질문~~~
Khiyol [barleytea] 1763 읽음    2001-09-11 12:42
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. 이때 윈도에 어드민으로 로긴한 상태에서 테스트 했습니다.

+ -

관련 글 리스트
10949 [질문] LogonUser 함수에 관한 질문~~~ Khiyol 1763 2001/09/11
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.