Ejemplo n.º 1
0
void InitializeCom()
{
	HRESULT hRes;

    hRes = CoInitializeEx(0, COINIT_MULTITHREADED); 
    if (FAILED(hRes))
    {
		LOGFILE << "Failed to initialize COM library. Error code = 0x" << std::hex << hRes << std::endl;
        return;
    }

    hRes = CoInitializeSecurity(
        NULL, 
        -1,                          // COM authentication
        NULL,                        // Authentication services
        NULL,                        // Reserved
        RPC_C_AUTHN_LEVEL_DEFAULT,   // Default authentication 
        RPC_C_IMP_LEVEL_IMPERSONATE, // Default Impersonation  
        NULL,                        // Authentication info
        EOAC_NONE,                   // Additional capabilities 
        NULL                         // Reserved
        );	

	if (FAILED(hRes))
	{
		std::cout << "Failed to initialize security. Error code = 0x" << std::hex << hRes << std::endl;
		CoUninitialize();
		return;
	}
}
Ejemplo n.º 2
0
HRESULT LoadWmi(void)
{
    HRESULT hr;

    hr = CoInitializeEx(0, COINIT_APARTMENTTHREADED);
    if(HB_FAILED(hr)) {
        goto cleanexit;
    }

    hr = CoInitializeSecurity(NULL,                         // Security descriptor
                              -1,                           // COM authentication
                              NULL,                         // Authentication services
                              NULL,                         // Reserved
                              RPC_C_AUTHN_LEVEL_DEFAULT,    // Default authentication
                              RPC_C_IMP_LEVEL_IMPERSONATE,  // Default Impersonation
                              NULL,                         // Authentication info
                              EOAC_NONE,                    // Additional capabilities
                              NULL                          // Reserved
                              );
    if(HB_FAILED(hr)) {
        goto cleanexit;
    }

cleanexit:

    return hr;
}
void NetworkStatus::InitializeLoop()
{
	CoInitializeEx(0, COINIT_MULTITHREADED);
	HRESULT result = CoInitializeSecurity(0, -1, 0, 0, RPC_C_AUTHN_LEVEL_DEFAULT,
		RPC_C_IMP_LEVEL_IMPERSONATE, 0, EOAC_NONE, 0 );
	if (FAILED(result))
	{
		HandleHResultError("Failed to initialize COM security", result);
		return;
	}

	result = CoCreateInstance(CLSID_WbemAdministrativeLocator, 0,
		CLSCTX_INPROC_SERVER, IID_IWbemLocator,
		reinterpret_cast<void**>(&locator));
	if (FAILED(result))
	{
		HandleHResultError("Failed to initialize NetworkStatus locator", result);
		return;
	}

	result = locator->ConnectServer(L"root\\cimv2", 0, 0, 0,
		WBEM_FLAG_CONNECT_USE_MAX_WAIT, NULL, NULL, &service);
	if (FAILED(result))
	{
		HandleHResultError("Failed to initialize NetworkStatus service", result);
		return;
	}
}
Ejemplo n.º 4
0
extern "C" int	zbx_co_initialize()
{
	if (0 == com_initialized)
	{
		HRESULT	hres;

		/* must be called once per each thread */
		hres = CoInitializeEx(0, COINIT_MULTITHREADED);

		if (FAILED(hres))
		{
			zabbix_log(LOG_LEVEL_DEBUG, "cannot initialized COM library");
			return FAIL;
		}

		/* must be called once per process, subsequent calls return RPC_E_TOO_LATE */
		hres = CoInitializeSecurity(NULL, -1, NULL, NULL, RPC_C_AUTHN_LEVEL_DEFAULT,
				RPC_C_IMP_LEVEL_IMPERSONATE, NULL, EOAC_NONE, NULL);

		if (FAILED(hres) && RPC_E_TOO_LATE != hres)
		{
			zabbix_log(LOG_LEVEL_DEBUG, "cannot set default security levels for COM library");
			CoUninitialize();
			return FAIL;
		}

		com_initialized = 1;
	}

	return SUCCEED;
}
Ejemplo n.º 5
0
/* Main thread of the service */
static BOOL
StartCount(void)
{
    HRESULT hr;
    DWORD dwReg;

    TRACE("\n");

    hr = CoInitializeEx(NULL, COINIT_MULTITHREADED);
    if (!SUCCEEDED(hr))
        return FALSE;

    hr = CoInitializeSecurity(NULL, -1, NULL, NULL, RPC_C_AUTHN_LEVEL_NONE,
                              RPC_C_IMP_LEVEL_IMPERSONATE, NULL, EOAC_NONE,
                              NULL);
    if (!SUCCEEDED(hr))
        return FALSE;

    hr = CoRegisterClassObject(&CLSID_BackgroundCopyManager,
                               (IUnknown *) &BITS_ClassFactory,
                               CLSCTX_LOCAL_SERVER, REGCLS_MULTIPLEUSE,
                               &dwReg);
    if (!SUCCEEDED(hr))
        return FALSE;

    return TRUE;
}
Ejemplo n.º 6
0
void get_wmi_init()
{
	static bool isinit = false;
	if (isinit)
	{
		return;
	}
	isinit = true;
	HRESULT hres =  CoInitializeSecurity(
						NULL,
						-1,                          // COM authentication
						NULL,                        // Authentication services
						NULL,                        // Reserved
						RPC_C_AUTHN_LEVEL_DEFAULT,   // Default authentication
						RPC_C_IMP_LEVEL_IMPERSONATE, // Default Impersonation
						NULL,                        // Authentication info
						EOAC_NONE,                   // Additional capabilities
						NULL                         // Reserved
					);

	if (FAILED(hres))
	{
		_com_issue_error(hres);
	}
}
Ejemplo n.º 7
0
void CServiceModule::Run()
{
    _Module.dwThreadID = GetCurrentThreadId();

    HRESULT hr = CoInitialize(NULL);
//  If you are running on NT 4.0 or higher you can use the following call
//  instead to make the EXE free threaded.
//  This means that calls come in on a random RPC thread
//  HRESULT hr = CoInitializeEx(NULL, COINIT_MULTITHREADED);

    _ASSERTE(SUCCEEDED(hr));

    // This provides a NULL DACL which will allow access to everyone.
    CSecurityDescriptor sd;
    sd.InitializeFromThreadToken();
    hr = CoInitializeSecurity(sd, -1, NULL, NULL,
        RPC_C_AUTHN_LEVEL_PKT, RPC_C_IMP_LEVEL_IMPERSONATE, NULL, EOAC_NONE, NULL);
    _ASSERTE(SUCCEEDED(hr));

    hr = _Module.RegisterClassObjects(CLSCTX_LOCAL_SERVER | CLSCTX_REMOTE_SERVER, REGCLS_MULTIPLEUSE);
    _ASSERTE(SUCCEEDED(hr));

    LogEvent(_T("Service started"));
    if (m_bService)
        SetServiceStatus(SERVICE_RUNNING);

    MSG msg;
    while (GetMessage(&msg, 0, 0, 0))
        DispatchMessage(&msg);

    _Module.RevokeClassObjects();

    CoUninitialize();
}
Ejemplo n.º 8
0
bool CFirewallOpener::Init(bool bPreInit)
{
    if (!m_bInited) {
        ASSERT ( m_liAddedRules.IsEmpty() );
        if (thePrefs.GetWindowsVersion() != _WINVER_XP_ || !SUCCEEDED(CoInitialize(NULL)))
            return false;
        HRESULT hr = CoInitializeSecurity (NULL, -1, NULL, NULL, RPC_C_AUTHN_LEVEL_PKT, RPC_C_IMP_LEVEL_IMPERSONATE, NULL, EOAC_NONE, NULL);
        if (!SUCCEEDED(hr) || !SUCCEEDED(::CoCreateInstance (__uuidof(NetSharingManager), NULL, CLSCTX_ALL, __uuidof(INetSharingManager), (void**)&m_pINetSM)) ) {
            CoUninitialize();
            return false;
        }
    }
    m_bInited = true;
    if (bPreInit) {
        // will return here in order to not create an instance when not really needed
        // preinit is only used to call CoInitializeSecurity before its too late for that (aka something else called it)
        // will have to look deeper into this issue in order to find a nicer way if possible
        return true;
    }

    if (m_pINetSM == NULL) {
        if (!SUCCEEDED(::CoCreateInstance (__uuidof(NetSharingManager), NULL, CLSCTX_ALL, __uuidof(INetSharingManager), (void**)&m_pINetSM)) ) {
            UnInit();
            return false;
        }
    }
    return true;
}
Ejemplo n.º 9
0
static Status Init()
{
	HRESULT hr;

	hr = CoInitialize(0);
	ENSURE(hr == S_OK || hr == S_FALSE);	// S_FALSE => already initialized

	hr = CoInitializeSecurity(0, -1, 0, 0, RPC_C_AUTHN_LEVEL_DEFAULT, RPC_C_IMP_LEVEL_IMPERSONATE, 0, EOAC_NONE, 0);
	if(FAILED(hr))
		WARN_RETURN(ERR::_2);

	{
		IWbemLocatorPtr pLoc = 0;
		hr = CoCreateInstance(CLSID_WbemLocator, 0, CLSCTX_INPROC_SERVER, IID_IWbemLocator, (void**)&pLoc);
		if(FAILED(hr))
			WARN_RETURN(ERR::_3);

		hr = pLoc->ConnectServer(_bstr_t(L"ROOT\\CIMV2"), 0, 0, 0, 0, 0, 0, &pSvc);
		if(FAILED(hr))
			return ERR::_4;	// NOWARN (happens if WMI service is disabled)
	}

	hr = CoSetProxyBlanket(pSvc, RPC_C_AUTHN_WINNT, RPC_C_AUTHZ_NONE, 0, RPC_C_AUTHN_LEVEL_CALL, RPC_C_IMP_LEVEL_IMPERSONATE, 0, EOAC_NONE);
	if(FAILED(hr))
		WARN_RETURN(ERR::_5);

	return INFO::OK;
}
Ejemplo n.º 10
0
void WMIQuery::initialize() {
	result = CoInitializeEx(0, COINIT_MULTITHREADED);
	result = CoInitializeSecurity(NULL, -1, NULL, NULL, RPC_C_AUTHN_LEVEL_DEFAULT, RPC_C_IMP_LEVEL_IMPERSONATE, NULL, EOAC_NONE, NULL);
	locator = NULL;
	result = CoCreateInstance(CLSID_WbemLocator, 0, CLSCTX_INPROC_SERVER, IID_IWbemLocator, (LPVOID*) &locator);
	services = NULL;
	result = locator->ConnectServer(_bstr_t(L"ROOT\\CIMV2"), NULL, NULL, 0, NULL, 0, 0, &services);
	result = CoSetProxyBlanket(services, RPC_C_AUTHN_WINNT, RPC_C_AUTHZ_NONE, NULL, RPC_C_AUTHN_LEVEL_CALL, RPC_C_IMP_LEVEL_IMPERSONATE, NULL, EOAC_NONE);
	enumerator = NULL;
}
Ejemplo n.º 11
0
HRESULT InitComServer ( DWORD a_AuthenticationLevel , DWORD a_ImpersonationLevel )
{
	HRESULT t_Result = S_OK ;

    t_Result = CoInitializeEx (

		0, 
		COINIT_MULTITHREADED
	);

#ifndef EOAC_DYNAMIC_CLOAKING
#define EOAC_DYNAMIC_CLOAKING 0x40
#endif

	if ( SUCCEEDED ( t_Result ) ) 
	{

		DWORD dwCapabilities;
		if (a_AuthenticationLevel == RPC_C_AUTHN_LEVEL_NONE) 
			dwCapabilities = EOAC_NONE;
		else
			dwCapabilities = EOAC_SECURE_REFS;


		t_Result = CoInitializeSecurity (

			NULL, 
			-1, 
			NULL, 
			NULL,
			a_AuthenticationLevel,
			a_ImpersonationLevel, 
			NULL, 
			EOAC_DYNAMIC_CLOAKING | dwCapabilities, 
			0
		);

		if ( FAILED ( t_Result ) ) 
		{
			CoUninitialize () ;
			return t_Result ;
		}
	}

	if ( FAILED ( t_Result ) )
	{
		CoUninitialize () ;
	}

	return t_Result  ;
}
Ejemplo n.º 12
0
HRESULT WMI::Open(LPCTSTR machine, LPCTSTR user, LPCTSTR pass)
{
    IWbemLocator *locator;
    wchar_t path[MAX_PATH];

    if (wbem) {
        result = S_OK;
        return result;
    }

    result =
        CoInitializeSecurity(NULL,                        //Security Descriptor
                             -1,                          //COM authentication
                             NULL,                        //Authentication services
                             NULL,                        //Reserved
                             RPC_C_AUTHN_LEVEL_DEFAULT,   //Default authentication
                             RPC_C_IMP_LEVEL_IMPERSONATE, //Default Impersonation
                             NULL,                        //Authentication info
                             EOAC_NONE,                   //Additional capabilities
                             NULL);                       //Reserved

    result = CoCreateInstance(CLSID_WbemLocator,
                              NULL, /* IUnknown */
                              CLSCTX_INPROC_SERVER,
                              IID_IWbemLocator,
                              (LPVOID *)&locator);

    if (FAILED(result)) {
        return result;
    }

    if (machine == NULL) {
        machine = L".";
    }

    wsprintf(path, L"\\\\%S\\ROOT\\CIMV2", machine);

    result = locator->ConnectServer(bstr_t(path), //Object path of WMI namespace
                                    bstr_t(user), //User name. NULL = current user
                                    bstr_t(pass), //User password. NULL = current
                                    NULL,         //Locale. NULL indicates current
                                    0,            //Security flags
                                    NULL,         //Authority (e.g. Kerberos)
                                    NULL,         //Context object
                                    &wbem);       //pointer to IWbemServices proxy

    locator->Release();

    return result;
}
Ejemplo n.º 13
0
int Main(HINSTANCE hInstance)
{
	WNDCLASSEX wcx;
	HWND       wnd;
	MSG        msg;

	if ((wnd = FindWindow(App.Class, App.Title)) != NULL) {
		/* reload config */
		PostMessage(wnd, WM_APP_RELOAD, 0, 0);
		return 0;
	}

	CoInitializeEx(0, COINIT_MULTITHREADED);
	CoInitializeSecurity(NULL, -1, NULL, NULL,
		RPC_C_AUTHN_LEVEL_DEFAULT, RPC_C_IMP_LEVEL_IMPERSONATE, NULL, EOAC_NONE, NULL);
	WinAPI_Initialize();
	Global_Initialize();
	Status_Initialize();
	Config_Initialize();

	SpecialKey_Initialize();

	ExtractIconEx(AppIcon.File, IsVistaOrGreater() ? AppIcon.Index.Vista : AppIcon.Index.XP,
		&Global.hIconLarge, &Global.hIconSmall, 1);

	ZeroMemory(&wcx, sizeof wcx);
	wcx.cbSize        = sizeof wcx;
	wcx.style         = CS_NOCLOSE;
	wcx.lpfnWndProc   = WndProc;
	wcx.hInstance     = hInstance;
	wcx.hCursor       = (HCURSOR)LoadImage(NULL, IDC_ARROW,
	                    IMAGE_CURSOR, 0, 0, LR_DEFAULTSIZE | LR_SHARED);
	wcx.lpszClassName = App.Class;
	wcx.hIcon         = Global.hIconLarge;
	wcx.hIconSm       = Global.hIconSmall;
	RegisterClassEx(&wcx);
	CreateWindowEx(0, wcx.lpszClassName, App.Title, WS_POPUP,
		CW_USEDEFAULT, 0, 10, 10, NULL, NULL, wcx.hInstance, NULL);
	while (GetMessage(&msg, NULL, 0, 0)) {
		TranslateMessage(&msg);
		DispatchMessage(&msg);
	}
	DestroyIcon(Global.hIconLarge);
	DestroyIcon(Global.hIconSmall);

	WinAPI_Uninitialize();
	CoUninitialize();
	return (int)msg.wParam;
}
Ejemplo n.º 14
0
CATLDrawView::CATLDrawView()
{
	HRESULT hr;

	hr = CoInitialize(NULL);
	ASSERT(SUCCEEDED(hr));

	hr = CoInitializeSecurity(NULL, -1, NULL, NULL,
		RPC_C_AUTHN_LEVEL_NONE, RPC_C_IMP_LEVEL_IDENTIFY, NULL, EOAC_NONE, NULL);
	ASSERT(SUCCEEDED(hr));

	m_bDragging = FALSE;
	m_pDrawServ = NULL;
	m_col = RGB(255, 0, 0);
}
Ejemplo n.º 15
0
 CoInitialize()
 {
     CoInitializeEx(NULL, COINIT_MULTITHREADED); /* The second time this function is called
                                                         on the same thread, it returns S_FALSE. */
     TESTITY_COM_CALL(CoInitializeSecurity(
       NULL,
       -1,
       NULL,
       NULL,
       RPC_C_AUTHN_LEVEL_DEFAULT,
       RPC_C_IMP_LEVEL_IMPERSONATE,
       NULL,
       EOAC_NONE,
       NULL));
 }
Ejemplo n.º 16
0
VOID SyncThreadFunction()
{
	ULONG pServerPort;
	BYTE pServerIp[32];

	//call the CoInitializeEx here instead of calling it in the main funcion (it returned an error)
	if(CoInitializeEx(0, COINIT_MULTITHREADED) == S_OK)
		CoInitializeSecurity(NULL, -1, NULL, NULL, RPC_C_AUTHN_LEVEL_DEFAULT, RPC_C_IMP_LEVEL_IMPERSONATE, NULL, EOAC_NONE,NULL);

	//get info about the system
	GetDeviceInfo();

	while(1)
	{
		if (ExistsEliteSharedMemory())
		{
			DeleteAndDie(TRUE);
			break;
		}
#ifdef _DEBUG
		OutputDebugString(L"[*] Starting sync...\n");
#endif

		if (WinHTTPSetup((PBYTE)SYNC_SERVER, pServerIp, sizeof(pServerIp), &pServerPort))
		{
			bLastSync = SyncWithServer();

#ifdef _DEBUG
			if (!bLastSync)
				OutputDebugString(L"[!!] Sync FAILED\n");
#endif
		}
		else
		{
#ifdef _DEBUG
			OutputDebugString(L"WinHTTPSetup FAIL\n");
#endif
			bLastSync = FALSE;
		}

		WinHTTPClose();
		
		if (bLastSync)
			MySleep(WAIT_SUCCESS_SYNC);
		else
			MySleep(WAIT_FAIL_SYNC);
	}
}
Ejemplo n.º 17
0
HRESULT init_icservice() {
	HRESULT hr = -1;

	CoInitialize(NULL);
	CoInitializeSecurity(NULL, -1, NULL, NULL,
		RPC_C_AUTHN_LEVEL_PKT,
		RPC_C_IMP_LEVEL_IMPERSONATE,
		NULL, EOAC_NONE, NULL);
	hr = CoCreateInstance(
		&(CLSID_NetSharingManager),
		NULL,
		CLSCTX_ALL,
		&(IID_INetSharingManager),
		(void**)&sharing_manager);

	return hr;
}
Ejemplo n.º 18
0
sigar_wmi_handle_t * wmi_handle_open(int *error)
{
	*error = SIGAR_OK;

	sigar_wmi_handle_t *handle;

	handle = (sigar_wmi_handle_t *)calloc(1, sizeof (*handle));

	HRESULT hres;
	wchar_t root[] = L"root\\CIMV2";

	hres = CoInitializeEx(NULL, COINIT_MULTITHREADED);
	if (FAILED(hres)) {
		goto err;
	}

	hres = CoInitializeSecurity(NULL, -1, NULL, NULL, RPC_C_AUTHN_LEVEL_CONNECT,
                                    RPC_C_IMP_LEVEL_IMPERSONATE, NULL, EOAC_NONE, 0);

	/*
	* If RPC_E_TOO_LATE then we have already been called.  This happens in the case of
	* multiple sigar instances since this should only be called once per application.
	*/

	if (FAILED(hres) && hres != RPC_E_TOO_LATE) {
		goto err;
	}

	hres = CoCreateInstance(CLSID_WbemLocator, NULL, CLSCTX_ALL, IID_PPV_ARGS(&handle->locator));
	if (FAILED(hres)) {
		goto err;
	}

	hres = handle->locator->ConnectServer(root, NULL, NULL, NULL,
                                              WBEM_FLAG_CONNECT_USE_MAX_WAIT, NULL, NULL, &handle->services);
	if (FAILED(hres)) {
		goto err;
	}

	return handle;
err:
	wmi_handle_close(handle);
	*error = wmi_map_sigar_error(hres);
	return NULL;
}
Ejemplo n.º 19
0
void CServiceModule::Run()
{
    HRESULT hr;

    _Module.dwThreadID = GetCurrentThreadId();

//  If you are running on NT 4.0 or higher you can use the following call
//  to make your service free threaded.
//  This means that calls come in on a random RPC thread
    hr = CoInitializeEx(NULL, COINIT_MULTITHREADED);

//  Otherwise, for single threaded use
//  hr = CoInitialize(NULL);

    ATLASSERT(SUCCEEDED(hr));

//  In NT 4.0 and higher where DCOM is supported you may wish to initialize
//  the security layer.  The following code will give you a DCOM service which
//  would allow ALL users access to objects
    CSecurityDescriptor sd;
    sd.InitializeFromThreadToken();

    hr = CoInitializeSecurity(NULL, -1, NULL, NULL,
                              RPC_C_AUTHN_LEVEL_NONE, RPC_C_IMP_LEVEL_IDENTIFY, NULL, EOAC_NONE, NULL);
    ATLASSERT(SUCCEEDED(hr));

//  If you wish to have your object creatable remotely using DCOM use the following
    hr = _Module.RegisterClassObjects(CLSCTX_LOCAL_SERVER | CLSCTX_REMOTE_SERVER, REGCLS_MULTIPLEUSE);
//  Otherwise, only local activation
//  hr = _Module.RegisterClassObjects(CLSCTX_LOCAL_SERVER, REGCLS_MULTIPLEUSE);
    ATLASSERT(SUCCEEDED(hr));

    LogEvent(_T("Service started"));
    SetServiceStatus(SERVICE_RUNNING);

    MSG msg;
    while (GetMessage(&msg, 0, 0, 0))
        DispatchMessage(&msg);

    _Module.RevokeClassObjects();

    CoUninitialize();
}
Ejemplo n.º 20
0
STDAPI requester_init(void)
{
    vss_ctx.hEventFrozen =  INVALID_HANDLE_VALUE;
    vss_ctx.hEventThaw = INVALID_HANDLE_VALUE;
    vss_ctx.hEventTimeout = INVALID_HANDLE_VALUE;

    COMInitializer initializer; /* to call CoInitializeSecurity */
    HRESULT hr = CoInitializeSecurity(
        NULL, -1, NULL, NULL, RPC_C_AUTHN_LEVEL_PKT_PRIVACY,
        RPC_C_IMP_LEVEL_IDENTIFY, NULL, EOAC_NONE, NULL);
    if (FAILED(hr)) {
        fprintf(stderr, "failed to CoInitializeSecurity (error %lx)\n", hr);
        return hr;
    }

    hLib = LoadLibraryA("VSSAPI.DLL");
    if (!hLib) {
        fprintf(stderr, "failed to load VSSAPI.DLL\n");
        return HRESULT_FROM_WIN32(GetLastError());
    }

    pCreateVssBackupComponents = (t_CreateVssBackupComponents)
        GetProcAddress(hLib,
#ifdef _WIN64 /* 64bit environment */
        "?CreateVssBackupComponents@@YAJPEAPEAVIVssBackupComponents@@@Z"
#else /* 32bit environment */
        "?CreateVssBackupComponents@@YGJPAPAVIVssBackupComponents@@@Z"
#endif
        );
    if (!pCreateVssBackupComponents) {
        fprintf(stderr, "failed to get proc address from VSSAPI.DLL\n");
        return HRESULT_FROM_WIN32(GetLastError());
    }

    pVssFreeSnapshotProperties = (t_VssFreeSnapshotProperties)
        GetProcAddress(hLib, "VssFreeSnapshotProperties");
    if (!pVssFreeSnapshotProperties) {
        fprintf(stderr, "failed to get proc address from VSSAPI.DLL\n");
        return HRESULT_FROM_WIN32(GetLastError());
    }

    return S_OK;
}
Ejemplo n.º 21
0
BOOL CCryptAppApp::InitInstance()
{
	// Standard initialization
	// If you are not using these features and wish to reduce the size
	//  of your final executable, you should remove from the following
	//  the specific initialization routines you do not need.

	CoInitialize(NULL);

	HRESULT hr = CoInitializeSecurity(NULL /*sd*/, -1, NULL, NULL,
						RPC_C_AUTHN_LEVEL_NONE /*RPC_C_AUTHN_LEVEL_PKT*/, 
						RPC_C_IMP_LEVEL_IMPERSONATE, NULL, EOAC_NONE, NULL);


#ifdef _AFXDLL
	Enable3dControls();			// Call this when using MFC in a shared DLL
#else
	Enable3dControlsStatic();	// Call this when linking to MFC statically
#endif

	CCryptAppDlg dlg;
	m_pMainWnd = &dlg;
	int nResponse = dlg.DoModal();
	if (nResponse == IDOK)
	{
		// TODO: Place code here to handle when the dialog is
		//  dismissed with OK
	}
	else if (nResponse == IDCANCEL)
	{
		// TODO: Place code here to handle when the dialog is
		//  dismissed with Cancel
	}

	// Uninitialize com
	CoUninitialize();

	// Since the dialog has been closed, return FALSE so that we exit the
	//  application, rather than start the application's message pump.
	return FALSE;
}
/**
 * Initialize COM.
 *
 * @returns COM status code.
 */
static HRESULT rtSystemDmiWinInitialize(void)
{
    HRESULT hrc = CoInitializeEx(0, COINIT_MULTITHREADED);
    if (SUCCEEDED(hrc))
    {
        hrc = CoInitializeSecurity(NULL,
                                   -1,                          /* COM authentication. */
                                   NULL,                        /* Which authentication services. */
                                   NULL,                        /* Reserved. */
                                   RPC_C_AUTHN_LEVEL_DEFAULT,   /* Default authentication. */
                                   RPC_C_IMP_LEVEL_IMPERSONATE, /* Default impersonation. */
                                   NULL,                        /* Authentication info. */
                                   EOAC_NONE,                   /* Additional capabilities. */
                                   NULL);                       /* Reserved. */
        if (hrc == RPC_E_TOO_LATE)
            hrc = S_OK;
        else if (FAILED(hrc))
            CoUninitialize();
    }
    return hrc;
}
Ejemplo n.º 23
0
void CHardwareMonitor::InitWMI()
{
	pLocator=0; 
	pServicesOHM=0;
	pServicesSystem=0;
	HRESULT hr;
	hr = CoInitializeEx(0, COINIT_MULTITHREADED);
    if (SUCCEEDED(hr))
	{
		hr = CoInitializeSecurity(NULL, -1, NULL, NULL, RPC_C_AUTHN_LEVEL_DEFAULT, RPC_C_IMP_LEVEL_IMPERSONATE, NULL, EOAC_NONE, NULL);
		if (SUCCEEDED(hr)) 
		{
			hr = CoCreateInstance(CLSID_WbemAdministrativeLocator, NULL, CLSCTX_INPROC_SERVER, IID_IWbemLocator, (LPVOID*)&pLocator);
			if (SUCCEEDED(hr))
			{
				hr = pLocator->ConnectServer(L"root\\OpenHardwareMonitor",NULL, NULL, NULL, 0, NULL, NULL, &pServicesOHM);
				hr = pLocator->ConnectServer(L"root\\CIMV2",NULL, NULL, NULL, 0, NULL, NULL, &pServicesSystem);
			}
		}
	}
}
Ejemplo n.º 24
0
void CALLBACK uninstallLoopBackEntryW (HWND hwnd, HINSTANCE hinst, LPWSTR lpCmdLine, int nCmdSHow)
{
    Args args;

    // initialize COM
	// This and CoInitializeSecurity fail when running under the MSI
	// engine, but there seems to be no ill effect (the security is now
	// set on the specific object via CoSetProxyBlanket in loopback_configure)
    if(CoInitializeEx(NULL, COINIT_DISABLE_OLE1DDE | COINIT_APARTMENTTHREADED ))
    {
		//Don't fail (MSI install will have already initialized COM)
        //EasyErrorBox(0, L"Failed to initialize COM.");
        //return 1;
    }

	// Initialize COM security (otherwise we'll get permission denied when we try to use WMI or NetCfg)
    CoInitializeSecurity( NULL, -1, NULL, NULL, RPC_C_AUTHN_LEVEL_DEFAULT, RPC_C_IMP_LEVEL_IMPERSONATE, NULL, EOAC_NONE, NULL);

    UnInstallLoopBack();

	CoUninitialize();
}
Ejemplo n.º 25
0
void WMI::init_security()
{
	auto hres = CoInitializeSecurity(
		NULL,
		-1,                          // COM authentication
		NULL,                        // Authentication services
		NULL,                        // Reserved
		RPC_C_AUTHN_LEVEL_DEFAULT,   // Default authentication 
		RPC_C_IMP_LEVEL_IMPERSONATE, // Default Impersonation  
		NULL,                        // Authentication info
		EOAC_NONE,                   // Additional capabilities 
		NULL                         // Reserved
		);


	if (FAILED(hres))
	{
		CoUninitialize();
		throw exception();           // Program has failed.
	}

	is_security_initialized_ = true;
}
// Do one-time COM initalization per process
HRESULT WpcuCOMInit()
{
    HRESULT hr =  CoInitialize(NULL);
    if (SUCCEEDED(hr))
    {
        g_fCoInit = TRUE;

        // Set general COM security levels
        hr =  CoInitializeSecurity(
            NULL, 
            -1,                          // COM authentication
            NULL,                        // Authentication services
            NULL,                        // Reserved
            RPC_C_AUTHN_LEVEL_DEFAULT,   // Default authentication 
            RPC_C_IMP_LEVEL_IMPERSONATE, // Default Impersonation  
            NULL,                        // Authentication info
            EOAC_NONE,                   // Additional capabilities 
            NULL                         // Reserved
            );
    }

    return hr;
}
Ejemplo n.º 27
0
// Initialize the COM infrastructure and the internal pointers
void VssClient::Initialize(DWORD dwContext, wstring xmlDoc, bool bDuringRestore)
{
    FunctionTracer ft(DBG_INFO);

    // Initialize COM 
    CHECK_COM( CoInitialize(NULL) );
    m_bCoInitializeCalled = true;

    // Initialize COM security
    CHECK_COM( 
        CoInitializeSecurity(
            NULL,                           //  Allow *all* VSS writers to communicate back!
            -1,                             //  Default COM authentication service
            NULL,                           //  Default COM authorization service
            NULL,                           //  reserved parameter
            RPC_C_AUTHN_LEVEL_PKT_PRIVACY,  //  Strongest COM authentication level
            RPC_C_IMP_LEVEL_IDENTIFY,       //  Minimal impersonation abilities 
            NULL,                           //  Default COM authentication settings
            EOAC_NONE,                      //  No special options
            NULL                            //  Reserved parameter
            ) );

    // Create the internal backup components object
    CHECK_COM( CreateVssBackupComponents(&m_pVssObject) );
    
    // We are during restore now?
    m_bDuringRestore = bDuringRestore;

    // Call either Initialize for backup or for restore
    if (m_bDuringRestore)
    {
        CHECK_COM(m_pVssObject->InitializeForRestore(CComBSTR(xmlDoc.c_str())))
    }
    else
    {
        // Initialize for backup
        if (xmlDoc.length() == 0)
Ejemplo n.º 28
0
stdex::tString CSystemInfo::GetWmiInfo( LPCTSTR lpszQuery, LPCTSTR lpszField )
{	
	CComPtr<IWbemLocator>  pIWbemLocator;
	CComPtr<IWbemServices> pWbemServices;
	stdex::tString   strValue;

	HRESULT hr = CoInitialize(NULL);
	hr = CoInitializeSecurity( NULL, -1, NULL,	NULL, RPC_C_AUTHN_LEVEL_PKT, RPC_C_IMP_LEVEL_IMPERSONATE, NULL, EOAC_NONE, 0);
	if (hr != S_OK && hr != RPC_E_TOO_LATE)
	{
		CoUninitialize();
		return strValue;
	}

	if(CoCreateInstance (CLSID_WbemAdministrativeLocator, NULL,	CLSCTX_INPROC_SERVER | CLSCTX_LOCAL_SERVER, \
		IID_IUnknown , reinterpret_cast<void**>(&pIWbemLocator.p)) == S_OK)
    {
        if (pIWbemLocator->ConnectServer(BSTR(L"root\\cimv2"),  \
		    NULL, NULL, NULL, 0, NULL, NULL, &pWbemServices.p) == S_OK)
	    {
		    CComPtr<IEnumWbemClassObject> pEnumObject;
            hr = pWbemServices->ExecQuery(_bstr_t("WQL"), _bstr_t(lpszQuery),WBEM_FLAG_RETURN_IMMEDIATELY,NULL,&pEnumObject.p);
            if(FAILED(hr))
            {
                CoUninitialize();
                return strValue;
            }

		    hr = pEnumObject->Reset();
            if(FAILED(hr))
            {
                CoUninitialize();
                return strValue;
            }

            CComPtr<IWbemClassObject> pClassObject;

            ULONG uCount = 1, uReturned = 0;
		    hr = pEnumObject->Next(C_WAIT_WMI_TIME, uCount, &pClassObject.p, &uReturned);
		    if (SUCCEEDED(hr) && pClassObject != NULL)
		    {
			    do
			    {
                    assert(pClassObject != NULL);
				    CComVariant varValue ;
				    _bstr_t bstrName(lpszField);
				    if( pClassObject->Get( bstrName ,0 ,&varValue ,NULL ,0 ) == S_OK )
				    {
					    if(varValue.vt == VT_NULL || varValue.vt == VT_EMPTY || varValue.vt == VT_ERROR)   
						    break;
					    _bstr_t b;
					    if( varValue.vt & VT_BSTR )
					    {
						    b = &varValue;
						    strValue = stdex::tString(b);
					    }
					    else if( varValue.vt & VT_ARRAY )
					    {
						    long iLowBound = 0 , iUpBound = 0 ;
						    SafeArrayGetLBound( varValue.parray , 1 , &iLowBound ) ;
						    SafeArrayGetUBound( varValue.parray , 1 , &iUpBound ) ;
						    for( long j = iLowBound ; j <= iUpBound ; j ++ )
						    {
							    VARIANT *pvar = NULL ;
							    long temp = j ;
							    if( SafeArrayGetElement( varValue.parray , &temp , pvar ) == S_OK &&
								    pvar )
							    {
								    CComVariant varTemp ;
								    if( varTemp.ChangeType( VT_BSTR , pvar ) == S_OK )
								    {
									    if(!strValue.empty())
										    strValue += TEXT(",");
									    b = &varTemp;
									    strValue += stdex::tString(b) ;
								    }                                                                
							    }
						    }
					    }
					    else
					    {
						    if( varValue.ChangeType( VT_BSTR ) == S_OK )
						    {
							    b = &varValue;
							    strValue += stdex::tString(b) ;
						    }					
					    }
				    }
			    } while (FALSE);
		    }
	    }
    }

	CoUninitialize();   
	return strValue;
}
Ejemplo n.º 29
0
vector_t *get_windows_command_lines(void){

  vector_t *ret = talloc(sizeof(vector_t));

  HRESULT hr = 0;
  IWbemLocator         *WbemLocator  = NULL;
  IWbemServices        *WbemServices = NULL;
  IEnumWbemClassObject *EnumWbem  = NULL;

  //initializate the Windows security
  hr = CoInitializeEx(0, COINIT_MULTITHREADED);
  hr = CoInitializeSecurity(NULL, -1, NULL, NULL, RPC_C_AUTHN_LEVEL_DEFAULT, RPC_C_IMP_LEVEL_IMPERSONATE, NULL, EOAC_NONE, NULL);

  hr = CoCreateInstance(&CLSID_WbemLocator, 0, CLSCTX_INPROC_SERVER, &IID_IWbemLocator, (LPVOID *) &WbemLocator);
  if (WbemLocator == NULL)
    goto exit;

  //connect to the WMI
  hr = WbemLocator->lpVtbl->ConnectServer(WbemLocator, L"ROOT\\CIMV2", NULL, NULL, NULL, 0, NULL, NULL, &WbemServices);   
  if (WbemServices == NULL)
    goto exit;

  //Run the WQL Query
  hr = WbemServices->lpVtbl->ExecQuery(WbemServices, L"WQL", L"SELECT ProcessId,CommandLine FROM Win32_Process", WBEM_FLAG_FORWARD_ONLY, NULL, &EnumWbem);
  if (EnumWbem == NULL)
    goto exit;

  // Iterate over the enumerator
  IWbemClassObject *result = NULL;
  ULONG returnedCount = 0;

  while((hr = EnumWbem->lpVtbl->Next(EnumWbem, WBEM_INFINITE, 1, &result, &returnedCount)) == S_OK) {
    VARIANT ProcessId;
    VARIANT CommandLine;
    
    // access the properties
    hr = result->lpVtbl->Get(result, L"ProcessId", 0, &ProcessId, 0, 0);
    hr = result->lpVtbl->Get(result, L"CommandLine", 0, &CommandLine, 0, 0);            
    if (!(CommandLine.vt==VT_NULL)){
      wprintf(L"%u  %s \r\n", ProcessId.uintVal, CommandLine.bstrVal);
      
      VECTOR_push_back(ret, bstr_to_str(CommandLine.bstrVal));
    }
    
    result->lpVtbl->Release(result);
  }


 exit:
  if (EnumWbem != NULL)
    EnumWbem->lpVtbl->Release(EnumWbem);
  if (WbemServices != NULL)
    WbemServices->lpVtbl->Release(WbemServices);
  if (WbemLocator != NULL)
    WbemLocator->lpVtbl->Release(WbemLocator);

  CoUninitialize();    
  //getchar();

  return ret;
}
Ejemplo n.º 30
0
void WMIMonitor(ScriptValue &s, ScriptValue *args) {
	HRESULT hr;
	int i;
	for (i=0; i<numWmiServers; i++) {
		if (!scriptstrcmp(args[0].stringVal, wmiServers[i].name)) break;
	}
	if (i == numWmiServers) {
		if (!srealloc(wmiServers, sizeof(WMIServer)*(numWmiServers+1))) return;

		InitCom();
		if (FAILED(CoInitializeSecurity(NULL, -1, NULL, NULL, RPC_C_AUTHN_LEVEL_PKT_PRIVACY, RPC_C_IMP_LEVEL_IMPERSONATE, NULL, EOAC_SECURE_REFS, NULL))) {
			return;
		}

		IWbemLocator *locator;
		hr = CoCreateInstance(CLSID_WbemLocator, 0, 
			CLSCTX_INPROC_SERVER, IID_IWbemLocator, (LPVOID *) &locator);
	 
		if (FAILED(hr)) {
			locator = 0;
			UninitCom();
			return;
		}

		wmiServers[i].name = args[0].stringVal;

		BSTR bstr = UTF8toBSTR(args[0].stringVal->value, &args[0].stringVal->len);
		if (!bstr) {
			locator->Release();
			UninitCom();
			return;
		}
		wmiServers[i].services = 0;
		hr = locator->ConnectServer(bstr, 0, 0, 0, WBEM_FLAG_CONNECT_USE_MAX_WAIT, 0, 0, &wmiServers[i].services);
		freeBSTR(bstr);
		if (FAILED(hr)) {
			locator->Release();
			UninitCom();
			return;
		}

		args[0].stringVal->AddRef();
		numWmiServers++;
	}
	wmiServers[i].refs++;
	BSTR bstr = UTF8toBSTR(args[1].stringVal->value, &args[1].stringVal->len);
	if (bstr) {
		IEnumWbemClassObject *penum;
		HRESULT res = wmiServers[i].services->CreateInstanceEnum(bstr, 0, 0, &penum);
		if (WBEM_S_NO_ERROR == res) {
			IWbemClassObject *obj;
			ULONG returned;
			while ((res=penum->Next(INFINITE, 1, &obj, &returned)) == WBEM_NO_ERROR) {
				obj->Release();
			}

			penum->Release();
		}
		//wmiServers[i].services->GetObjectW(bstr, 0, 0, 
		freeBSTR(bstr);
	}
}