165 lines
3.3 KiB
C++
165 lines
3.3 KiB
C++
//+---------------------------------------------------------------------------
|
|
//
|
|
// Microsoft Windows
|
|
// Copyright (C) Microsoft Corporation, 1998 - 2001
|
|
//
|
|
// File : utils.cpp
|
|
//
|
|
// Contents : Common utilities required by helper.
|
|
//
|
|
// Notes :
|
|
//
|
|
// Author : Raghu Gatta (rgatta) 11 May 2001
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
#include "precomp.h"
|
|
#pragma hdrstop
|
|
|
|
BOOL g_fInitCom = TRUE;
|
|
|
|
|
|
HRESULT
|
|
HrInitializeHomenetConfig(
|
|
BOOL* pfInitCom,
|
|
IHNetCfgMgr** pphnc
|
|
)
|
|
/*++
|
|
|
|
Routine Description
|
|
|
|
Cocreate and initialize the root IHNetCfgMgr object. This will
|
|
optionally initialize COM for the caller too.
|
|
|
|
Arguments
|
|
|
|
pfInitCom [in,out] TRUE to call CoInitialize before creating.
|
|
returns TRUE if COM was successfully
|
|
initialized FALSE if not.
|
|
If NULL, means don't initialize COM.
|
|
pphnc [out] The returned IHNetCfgMgr object.
|
|
|
|
Return Value
|
|
|
|
S_OK or an error code.
|
|
|
|
--*/
|
|
{
|
|
HRESULT hr;
|
|
|
|
|
|
//
|
|
// Initialize the output parameter.
|
|
//
|
|
*pphnc = NULL;
|
|
|
|
|
|
//
|
|
// Initialize COM if the caller requested.
|
|
//
|
|
hr = S_OK;
|
|
if (pfInitCom && *pfInitCom)
|
|
{
|
|
hr = CoInitializeEx(
|
|
NULL,
|
|
COINIT_DISABLE_OLE1DDE | COINIT_APARTMENTTHREADED
|
|
);
|
|
|
|
if (RPC_E_CHANGED_MODE == hr)
|
|
{
|
|
//
|
|
// we have already been initialized in a different model
|
|
//
|
|
hr = S_OK;
|
|
*pfInitCom = FALSE;
|
|
}
|
|
}
|
|
|
|
if (SUCCEEDED(hr))
|
|
{
|
|
|
|
//
|
|
// Create Homenet Configuration Manager COM Instance
|
|
//
|
|
hr = CoCreateInstance(
|
|
CLSID_HNetCfgMgr,
|
|
NULL,
|
|
CLSCTX_INPROC_SERVER,
|
|
IID_PPV_ARG(IHNetCfgMgr, pphnc)
|
|
);
|
|
|
|
if (SUCCEEDED(hr))
|
|
{
|
|
//
|
|
// great! dont need to anything more here...
|
|
//
|
|
}
|
|
|
|
//
|
|
// If we failed anything above, and we've initialized COM,
|
|
// be sure an uninitialize it.
|
|
//
|
|
if (FAILED(hr) && pfInitCom && *pfInitCom)
|
|
{
|
|
CoUninitialize();
|
|
}
|
|
|
|
}
|
|
|
|
return hr;
|
|
}
|
|
|
|
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Function: HrUninitializeHomenetConfig
|
|
//
|
|
// Purpose: Unintialize and release an IHNetCfgMgr object. This will
|
|
// optionally uninitialize COM for the caller too.
|
|
//
|
|
// Arguments:
|
|
// fUninitCom [in] TRUE to uninitialize COM after the IHNetCfgMgr is
|
|
// uninitialized and released.
|
|
// phnc [in] The IHNetCfgMgr object.
|
|
//
|
|
// Returns: S_OK or an error code.
|
|
//
|
|
// Author: rgatta 11 May 2001
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
HRESULT
|
|
HrUninitializeHomenetConfig(
|
|
BOOL fUninitCom,
|
|
IHNetCfgMgr* phnc
|
|
)
|
|
/*++
|
|
|
|
Routine Description
|
|
|
|
Arguments
|
|
|
|
Return Value
|
|
|
|
--*/
|
|
{
|
|
assert(phnc);
|
|
HRESULT hr = S_OK;
|
|
|
|
if (phnc)
|
|
{
|
|
phnc->Release();
|
|
}
|
|
|
|
phnc = NULL;
|
|
|
|
if (fUninitCom)
|
|
{
|
|
CoUninitialize ();
|
|
}
|
|
|
|
return hr;
|
|
}
|
|
|
|
|