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
[40715] 저번에도 질문했었는데요 EnableStatic메소드 이용해서
공윤경 [] 1533 읽음    2005-06-23 17:39
Win32_NetWorkAdapterConfiguration
아이피 어드레스를 변경해주는거거든요
혹 이거말고라도 방법이 있나요?
혹시 아시는 분 말씀좀 해주세요..
소스를 올리고 싶은데 제가 짠 소스도 아니고 공개용이 아니라서..
혹시 아시는 분이 계시다면 메일로 부탁드립니다..꾸벅...

부분적으로는요...
bool __fastcall TFrmMain::SetNAC( IWbemServices * pIWbemServices )
{
    IWbemClassObject * pClass = NULL;
    IWbemClassObject * pOutInst = NULL;
    IWbemClassObject * pInClass = NULL;
    IWbemClassObject * pInInst = NULL;

    BSTR path = SysAllocString(L"sample");
    BSTR ClassPath = SysAllocString(L"Win32_NetWorkAdapterConfiguration");
    BSTR InstancePath = SysAllocString(L"Win32_NetWorkAdapterConfiguration.Index='1'");
    BSTR MethodName = SysAllocString(L"EnableStatic");

    BSTR ArgName1 = SysAllocString(L"IPAddress");
    BSTR ArgName2 = SysAllocString(L"SubNetMask");

    EnableWmi = CreateWMI();
    if (EnableWmi)
    {
        LogMsg("Connect WMI services.");
        pIWbemServicesCIMV2 = OpenWMICIMV2();
        if (pIWbemServicesCIMV2 == NULL)
        {
            LogMsg("(X) Failed to connect with CIMV2.");
        }
    }
    else
    {
        LogMsg("(X) WMI services not present or unavailable!");
        pIWbemServicesCIMV2 = NULL;
    }


    IEnumWbemClassObject* pEnum = GetEnumNAC();
    if (pEnum == NULL)
    {
        LogMsg( "Can't get enumerate instances!" );
        return false;
    }
    IWbemClassObject *pInst = NULL;
    ULONG uReturned;
    VARIANT vVal;
    VariantInit(&vVal);
    while (pEnum->Next(INFINITE, 1, &pInst, &uReturned) == WBEM_NO_ERROR)
    {
        // Get the Instance Name string
        if ((pInst->Get(L"IPEnabled", 0L, &vVal, NULL, NULL)) == WBEM_NO_ERROR)
        {
            if (vVal.boolVal == false)
            {
                continue;
            }
            VariantClear(&vVal);
        }
    }
    pEnum->Release();
    BSTR Class;
    BSTR Class1;
    HRESULT hr;

    // Alloc class name string
    Class = SysAllocString(L"Win32_NetworkAdapterConfiguration");



    if (!Class)     // Out of memory
    {
            return false;
    }
    hr = pIWbemServicesCIMV2->GetObject(ClassPath, 0L, NULL, &pInst, NULL);

    check_getobj(hr);
    SysFreeString(Class);
    Class = NULL;
    if ( hr != WBEM_NO_ERROR )
    {
        return false;
    }

/////////////////////////////////////////////////////////////////

    LogMsg("Connected to WMI");

    // Set the proxy so that impersonation of the client occurs.
    hr = CoSetProxyBlanket(pIWbemServicesCIMV2,
        RPC_C_AUTHN_WINNT,
        RPC_C_AUTHZ_NONE,
        NULL,
        RPC_C_AUTHN_LEVEL_CALL,
        RPC_C_IMP_LEVEL_IMPERSONATE,
        NULL,
        EOAC_NONE
    );
    check(hr);
    // Get the class object
    LogMsg("");
    LogMsg(" Get Class object Test ...");
    hr = pIWbemServicesCIMV2->GetObject(ClassPath, 0, NULL, &pClass, NULL);

    check_getobj(hr);
    if(hr != WBEM_S_NO_ERROR)
    {
        LogMsg("Error");
        return false;
    }

    // Get the input argument and set the property
    LogMsg("");
    LogMsg(" Get Method Test ...");
    hr = pClass->GetMethod(MethodName, 0, &pInClass, NULL);
    check_getmethod(hr);
    LogMsg(hr);
    if(hr != WBEM_S_NO_ERROR)
    {
        LogMsg("Error");
        return false;
    }

    hr = pInClass->SpawnInstance(0, &pInInst);
    if(hr != WBEM_S_NO_ERROR)
    {
        LogMsg("Error");
        return false;
    }

    LogMsg("");
    LogMsg(" Put Test ...");
    BSTR ip;
    BSTR mask;
    ip = SysAllocString(L"192.168.255.252");
    mask = SysAllocString(L"255.255.255.0");

    long index[]={0};

    SAFEARRAY *ip_list;
    ip_list = SafeArrayCreateVector(VT_BSTR,0,1);
    SafeArrayPutElement(ip_list,index,ip);

    SAFEARRAY *mask_list;
    mask_list = SafeArrayCreateVector(VT_BSTR,0,1);
    SafeArrayPutElement(mask_list,index,mask);



    VARIANT arg1;
    arg1.vt = VT_ARRAY|VT_BSTR;
    arg1.parray = ip_list;
//    hr = pInInst->Put(ArgName1, 0, &arg1, 0);
    hr=pInInst->Put(L"IPAddress",0L,&arg1,NULL);

    if(hr != WBEM_S_NO_ERROR)
    {
        LogMsg("(X) Put IP failed ");
        return false;
    }
    else
    {
        LogMsg("(O) Put IP succeeded");
    }
/*    VARIANT arg2;
    arg2.vt = VT_ARRAY|VT_BSTR;
    arg2.parray = mask_list;
    hr = pInInst->Put(ArgName2, 0, &arg2, 0);
    check2(hr);
    if(hr != WBEM_S_NO_ERROR)
    {
        LogMsg("(X) Put Subnet failed ");
        return false;
    }
    else
    {
        LogMsg("(O) Put Subnet succeeded");
    }
  */
    // Call the method
    LogMsg("");
    LogMsg(" ExecMethod Test ...");
    hr = pIWbemServicesCIMV2->ExecMethod(InstancePath, MethodName, 0, NULL, pInInst,
                                    &pOutInst, NULL);

    check(hr);

    if(hr != WBEM_S_NO_ERROR){
        LogMsg("(X) ExecMethod failed ");
        return false;
    }
    else
    {
        LogMsg("(O) ExecMethod succeeded");
    }

    if(hr!=0)
    {
        LogMsg("(X) EnableStatic failed with return code ");
        LogMsg("");
        return false;
    }
    else
    {
        LogMsg("(O) EnableStatic succeeded");

        // Free up resources
        SysFreeString(ip);
        SysFreeString(mask);
        SafeArrayDestroy(ip_list);
        SafeArrayDestroy(mask_list);
        VariantClear(&arg1);
//        VariantClear(&arg2);

        SysFreeString(path);
        SysFreeString(ClassPath);
        SysFreeString(InstancePath);
        SysFreeString(MethodName);
        SysFreeString(ArgName1);
        SysFreeString(ArgName2);

//        pClass->Release();
//        pInInst->Release();
//        pInClass->Release();
//        pOutInst->Release();
//        pIWbemServicesCIMV2->Release();
        CoUninitialize();
        return true;
    }


}

이부분이 세팅을 해주는 부분인데...
읽어오는건 되거든요
근데 세팅하면서 에러는 안나는데 결과적으론 세팅이 안되요...

결과는
Connect WMI services.
==============================================================================
-The call succeeded.
------------------------------------------------------------------------------
MACAddress = 00:0B:DB:4C:D3:9D
Description = Intel(R) PRO/1000 MT Network Connection - パケット スケジューラ ミニポート
IPAddress =  10.30.24.53
IPSubnet =  255.255.224.0
DefaultIPGateway =  10.30.1.1
DHCPEnabled = FALSE
DNSHostName = c-st-kong
WINSPrimaryServer = 10.30.1.5
==============================================================================
Connect WMI services.
-The call succeeded.
The call succeeded.
Connected to WMI
(O) The call succeeded.

Get Class object Test ...
The call succeeded.

Get Method Test ...
(O) The requested in and out parameter objects were returned.
0

Put Test ...
(O) Put IP succeeded

ExecMethod Test ...
(O) The call succeeded.
(O) ExecMethod succeeded
(O) EnableStatic succeeded
(O) Set succeeded.

이렇게 나오거든요...
Get Method부터인지...잘못된거 같은데..
어디를 찾아봐도 읎네요

아니 엔에스디엔을 보고도 잘 모르겠네요...
부탁드립니다.

+ -

관련 글 리스트
40715 저번에도 질문했었는데요 EnableStatic메소드 이용해서 공윤경 1533 2005/06/23
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.