SOL9 2.0 Class: UnsecuredApartment

 SOL9 C++ Class Library  SOL9 Samples  SOL9 Tutorial  SOL9 FAQ  SOL9 ClassTree 

Source code

/*
 * UnsecuredApartment.h 
 * Copyright (c) 2012 Antillia.com TOSHIYUKI ARAI. ALL RIGHTS RESERVED. 
 */


// 2012/03/08 Updated.

#pragma once

#define _WIN32_DCOM

#include <sol\Object.h>
#include <wbemidl.h>

namespace SOL {

class UnsecuredApartment :public Object {

private:
    // Use an unsecured apartment for security
    IUnsecuredApartment* apartment;
private:
    IUnknown* stubUnknown;

public:
    /**
     * Constructor
     */
    UnsecuredApartment()
        :apartment(NULL),
        stubUnknown(NULL)
    {
        HRESULT hr;
        if (FAILED(hr = CoCreateInstance(CLSID_UnsecuredApartment, NULL, 
            CLSCTX_LOCAL_SERVER, IID_IUnsecuredApartment, 
            (void**)&apartment))) {
            throw Exception(E_FAIL, "%s: %s", "E_FAIL",__FUNCTION__);
        }
        
    }

public:
    /**
     * Destructor
     */
    ~UnsecuredApartment()
    {
        if (apartment) {
            apartment->Release();
            apartment = NULL;
        }
        
        if (stubUnknown) {
            stubUnknown->Release();
            stubUnknown = NULL;
        }
    }

public:
    /**
     * Create an instance of stubObject of IWbemObjectSink.
     * Usage:
     *    WbemObjectSink* pSink = new WbemObjectSink;
     *    IWebObjectSink* pStubSink = NULL;    
     *    unsecApartment->createStubSink(pSink, &pStubSink);
     *  //Pass this a method of WebServices class.
     */
    HRESULT createStubSink(/*[in]*/IWbemObjectSink* pSink,
                    /*[out]*/ IWbemObjectSink** ppStubSink)
    {
        HRESULT hr = S_OK;
        if (FAILED(hr = apartment->CreateObjectStub(pSink, &stubUnknown))) {
            throw Exception(E_FAIL, "%s: %s", "E_FAIL",__FUNCTION__);
        }
        
        hr = stubUnknown->QueryInterface(IID_IWbemObjectSink,
            (void **)ppStubSink);
        if (FAILED(hr)) throw Exception(E_FAIL, "%s: %s", "E_FAIL",__FUNCTION__);

        return hr;
    }
};

}

Last modified: 1 Apr 2012

Copyright (c) 2009-2012 Antillia.com ALL RIGHTS RESERVED.