CnUnix

[알림판목록 I] [알림판목록 II] [글목록][이 전][다 음]
[ CnUnix ] in KIDS
글 쓴 이(By): ksangeun (우주인)
날 짜 (Date): 2003년 9월  3일 수요일 오전 08시 55분 14초
제 목(Title): Re: [또질문]WinNT서비스에서 사용자계정가


WMI를 이용하면 문제를 해결할 방법이 있군요.

Win32_ComputerSystem 에서 UserName property를 참조하면 됩니다.

Terminal Service로 로그인을 한 경우에도 Console의 UserName을

반환한다고 설명 되어 있습니다.

UserName 
Data type: string
Access type: Read-only

Name of a user that is logged on currently. This property must have a 
value. In a terminal services session, UserName returns the name of the 
user that is logged on to the console?not the user logged on during the 
terminal service session.

Example: jeffsmith


WMI는 Interface가 COM으로 구현되어 있어서 VC에서 COM을 사용하는

것이 익숙치 않으면, 처음에 구현 할 때 시간이 좀 걸리실 것 같습니다.

MSDN에도 셈플코드는 대부분 VB로 되어 있어서 reference 찾기도

힘들거고..

사용하시려면 일단 WMI SDK나 Paltform SDK 최신버젼을 설치하시고,

WMI를 사용할 코드에 #include <Wbemidl.h> 를 넣어줍니다.

물론 COM을 사용하니 CoInitialize나 AfxOleInit 등을 해당 instance에서

최초에 호출을 해야 하고요..

WMI Object을 가져오는 법은,

    _bstr_t bstrNamespace;
_bstr_t bstrPath;
    IWbemLocator *pWbemLocator = NULL;
    IWbemServices *pServices = NULL;

    hr = CoCreateInstance(CLSID_WbemLocator, NULL, 
                          CLSCTX_INPROC_SERVER, IID_IWbemLocator, 
                          (void**) &pWbemLocator);
    if( FAILED(hr) ) 
    {
        CoUninitialize();
        printf("failed CoCreateInstance\n");
        return;
    }
    
    bstrNamespace = L"root\\cimv2";
    hr = pWbemLocator->ConnectServer(bstrNamespace, NULL, NULL, NULL,
                                     0, NULL, NULL, &pServices);
    if( FAILED(hr) ) 
    {
        pWbemLocator->Release();
        CoUninitialize();
        printf("failed ConnectServer\n");
        return;
    }
    pWbemLocator->Release();

식으로 하고, WMI의 원하는 Class를 얻을 때는,

    bstrPath = L"Win32_ComputerSystem"; //여기에 원하는 class이름을 
넣습니다.

    hr = pServices->GetObject(bstrPath, 0, 0, &m_pComSys, 0);
    if( FAILED(hr) ) 
    {

        pWbemLocator->Release();
        CoUninitialize();
return;
    }


이런식으로 얻을 수 있습니다.

이렇게 하면 아마도 m_pComSys->UserName 에 Console user name이 들어가 
있겠죠.

아직 해 보지는 않았습니다.

그럼 이만...



=======================================================================
main(){int a=107,j=2;while(a>-5000){a=a>0?a:99;putchar(a);
a=j==49?46:a-j;j*=j;j=j%256?j:7;j*=j%16?1:-1;};printf("%cm\n",111);};
=======================================================================

[알림판목록 I] [알림판목록 II] [글 목록][이 전][다 음]
키 즈 는 열 린 사 람 들 의 모 임 입 니 다.