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; } }
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; } }
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; }
/* 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; }
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); } }
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(); }
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; }
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; }
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; }
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 ; }
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; }
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; }
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); }
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)); }
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); } }
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; }
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; }
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(); }
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; }
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; }
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); } } } }
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(); }
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; }
// 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)
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; }
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; }
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); } }