HRESULT CHTFileTransferSystemServiceModule::RegisterAppId(bool bService) throw() 
{
	HRESULT hr = S_OK; 
	BOOL res = CAtlServiceModuleT<CHTFileTransferSystemServiceModule, IDS_SERVICENAME>::RegisterAppId(bService);   
	if(bService) 
	{ 
		if(IsInstalled()) 
		{                 
			SC_HANDLE hSCM = ::OpenSCManagerW(NULL, NULL, SERVICE_CHANGE_CONFIG); 
			SC_HANDLE hService = NULL; 
			if (hSCM == NULL) 
				hr = AtlHresultFromLastError(); 
			else 
			{ 
				hService = ::OpenService(hSCM, m_szServiceName, SERVICE_CHANGE_CONFIG); 
				if(hService != NULL) 
				{ 
					const int m_szServiceNameLen = 4096; 
					const int m_szServiceDescriptionLen = 2000; 
					CAString strServiceDescription = L"HTFileTransferSystemService"; 
					SERVICE_DESCRIPTION sdBuf = {strServiceDescription.GetBuffer(0)};
					strServiceDescription.ReleaseBuffer();
					res = ChangeServiceConfig2(hService, SERVICE_CONFIG_DESCRIPTION, &sdBuf); 
					if (res)
					{
						res = ChangeServiceConfig( 
							hService,        // handle of service 
							SERVICE_WIN32_OWN_PROCESS | SERVICE_INTERACTIVE_PROCESS, // service type: no change 
							SERVICE_AUTO_START,  // service start type 
							SERVICE_NO_CHANGE, // error control: no change 
							NULL,              // binary path: no change 
							NULL,              // load order group: no change 
							NULL,              // tag ID: no change 
							NULL,              // dependencies: no change 
							NULL,              // account name: no change 
							NULL,              // password: no change 
							NULL);
						if (res != 0)
						{
							hr = AtlHresultFromLastError();
						}
					}
					else
					{
						hr = AtlHresultFromLastError();
					}
					::CloseServiceHandle(hService); 
				} 
				else 
				{
					hr = AtlHresultFromLastError(); 
				}
				::CloseServiceHandle(hSCM); 
			} 
		} 
	} 
	return   hr; 
}
예제 #2
0
HRESULT
CNdasEventMonitor::Initialize()
{
	HRESULT hr;

	// Initialize routine is reentrant
	if (m_HeartbeatMonitorTimer.IsInvalid()) 
	{
		// Auto-reset waitable timer
		m_HeartbeatMonitorTimer = ::CreateWaitableTimer(NULL, FALSE, NULL);
		if (m_HeartbeatMonitorTimer.IsInvalid()) 
		{
			hr = AtlHresultFromLastError();			
			XTLTRACE2(NDASSVC_EVENTMON, TRACE_LEVEL_ERROR,
				"Timer creation failed, hr=0x%X\n", 
				hr);
			return hr;
		}
	}
	if (m_NdasLogicalUnitSetChanged.IsInvalid()) 
	{
		m_NdasLogicalUnitSetChanged = ::CreateEvent(NULL, TRUE, FALSE, NULL);
		if (m_NdasLogicalUnitSetChanged.IsInvalid()) 
		{
			hr = AtlHresultFromLastError();
			XTLTRACE2(NDASSVC_EVENTMON, TRACE_LEVEL_ERROR,
				"Logical device set change event creation failed, hr=0x%X\n",
				hr);
			return hr;
		}
	}
	if (!m_NdasDeviceDataLock.Initialize())
	{
		hr = AtlHresultFromLastError();
		XTLTRACE2(NDASSVC_EVENTMON, TRACE_LEVEL_ERROR,
			"Device ReaderWriterLock initialization failed, hr=0x%X\n",
			hr);
		return hr;
	}
	if (!m_NdasLogicalUnitDataLock.Initialize())
	{
		hr = AtlHresultFromLastError();			
		XTLTRACE2(NDASSVC_EVENTMON, TRACE_LEVEL_ERROR,
			"LogDevice ReaderWriterLock initialization failed, hr=0x%X\n",
			hr);
		return hr;
	}

	return S_OK;
}
예제 #3
0
EXTERN_C HRESULT WINAPI BKEngLoad(LPCWSTR lpszEngineDir)
{
    if (g_hMod_bkeng)
        return S_FALSE;


    CWinPath pathEngineDir;
    if (lpszEngineDir)
    {
        pathEngineDir = lpszEngineDir;
    }
    else
    {
        pathEngineDir.GetModuleFileName((HMODULE)&__ImageBase);
        pathEngineDir.RemoveFileSpec();
    }


    pathEngineDir.AddBackslash();
    g_hMod_bkeng = ::LoadLibrary(pathEngineDir.m_strPath + BKMOD_NAME_BKENG);
    if (!g_hMod_bkeng)
        return GetLastError() ? AtlHresultFromLastError() : E_FAIL;

    
    g_hMod_bkatr    = ::LoadLibrary(pathEngineDir.m_strPath + BKMOD_NAME_BKATRUN);
    g_hMod_bkbak    = ::LoadLibrary(pathEngineDir.m_strPath + BKMOD_NAME_BKBAK);
    g_hMod_bkdb     = ::LoadLibrary(pathEngineDir.m_strPath + BKMOD_NAME_BKDB);
    g_hMod_bkcache  = ::LoadLibrary(pathEngineDir.m_strPath + BKMOD_NAME_BKCACHE);


    return S_OK;
}
예제 #4
0
HRESULT
CNdasDeviceHeartbeatListener::Initialize()
{
	if (!m_datalock.Initialize())
	{
		return AtlHresultFromLastError();
	}
	return S_OK;
}
예제 #5
0
/***********************************************************************
* CreateWmpOcx
* Create a hidden WMP OCX
***********************************************************************/
HRESULT CMainDlg::CreateWmpOcx()
{
    CComPtr<IAxWinHostWindow>           spHost;
    RECT                                rect = {0, 0, 0, 0};
    HRESULT                             hr = E_FAIL;
    CComPtr<IObjectWithSite>            spHostObject;
    CComObject<CWMPRemoteHost>          *pRemoteHost = NULL;
    IUnknown                            *punkSite = NULL;

    m_pView = new CAxWindow();
    hr = m_pView ? S_OK : AtlHresultFromLastError();
    
    if(SUCCEEDED(hr) && m_pView)
    {
        m_pView->Create(m_hWnd, rect, NULL, WS_CHILD | WS_VISIBLE);
        if(::IsWindow(m_pView->m_hWnd))
        {
            hr = m_pView->QueryHost(IID_IObjectWithSite, (void **)&spHostObject);
        }
        
        if(SUCCEEDED(hr) && spHostObject.p)
        {
            hr = CComObject<CWMPRemoteHost>::CreateInstance(&pRemoteHost);
            if(pRemoteHost)
            {
                hr = ((IUnknown *)(IWMPRemoteMediaServices *)pRemoteHost)->QueryInterface(IID_IUnknown, (void **)&punkSite);
            }
        }
        
        if(SUCCEEDED(hr) && punkSite)
        {
            hr = spHostObject->SetSite(punkSite);
            punkSite->Release();
            punkSite = NULL;
        }
        
        if(SUCCEEDED(hr))
        {
            hr = m_pView->QueryHost(&spHost);
        }
        
        if(SUCCEEDED(hr) && spHost.p)
        {
            hr = spHost->CreateControl(L"{6BF52A52-394A-11d3-B153-00C04F79FAA6}", m_pView->m_hWnd, 0);
        }

        if(SUCCEEDED(hr))
        {
            hr = m_pView->QueryControl(&m_spPlayer);
        }
    }
    
    return hr;
}
예제 #6
0
HRESULT
CNdasCommandServer::Initialize()
{
	m_hProcSemaphore = ::CreateSemaphore(NULL, 0, MaxPipeInstances, NULL);
	if (m_hProcSemaphore.IsInvalid())
	{
		HRESULT hr = AtlHresultFromLastError();
		return hr;
	}
	return S_OK;
}
예제 #7
0
EXTERN_C HRESULT WINAPI BKEngCreateObject(REFIID riid, void** ppvObj, DWORD dwBKEngVer)
{
    if (!g_hMod_bkeng)
        return E_HANDLE;


    PFN_BKEngCreateObject pfn = (PFN_BKEngCreateObject)::GetProcAddress(g_hMod_bkeng, FN_BKEngCreateObject);
    if (!pfn)
        return GetLastError() ? AtlHresultFromLastError() : E_FAIL;


    return pfn(riid, ppvObj, dwBKEngVer);
}
예제 #8
0
EXTERN_C HRESULT WINAPI BKEngUninitialize()
{
    if (!g_hMod_bkeng)
        return E_HANDLE;


    PFN_BKEngUninitialize pfn = (PFN_BKEngUninitialize)::GetProcAddress(g_hMod_bkeng, FN_BKEngUninitialize);
    if (!pfn)
        return GetLastError() ? AtlHresultFromLastError() : E_FAIL;


    return pfn();
}
예제 #9
0
EXTERN_C HRESULT WINAPI BKEngInitialize(Skylark::BKENG_PLATFORM_INIT* pInit)
{
    if (!g_hMod_bkeng)
        return E_HANDLE;

    
    PFN_BKEngInitialize pfn = (PFN_BKEngInitialize)::GetProcAddress(g_hMod_bkeng, FN_BKEngInitialize);
    if (!pfn)
        return GetLastError() ? AtlHresultFromLastError() : E_FAIL;


    return pfn(pInit);
}
예제 #10
0
        static HRESULT _ExpandFullPathName( CString& strPathName )
        {
            DWORD dwLen = ::GetFullPathName(strPathName, 0, NULL, NULL);
            if (0 == dwLen)
                return GetLastError() ? AtlHresultFromLastError() : E_FAIL;

            assert(dwLen <= WIN_PATH_MAX_UNICODE_PATH);
            if (dwLen > WIN_PATH_MAX_UNICODE_PATH)
                return E_UNEXPECTED;

            CString strFullPathName;
            dwLen = ::GetFullPathName(strPathName, dwLen, strFullPathName.GetBuffer(dwLen), NULL);
            if (0 == dwLen)
            {
                strFullPathName.ReleaseBuffer(0);
                return GetLastError() ? AtlHresultFromLastError() : E_FAIL;
            }

            strFullPathName.ReleaseBuffer();
            strPathName = strFullPathName;
            return S_OK;
        }
   HRESULT CloseHandle(HANDLE hObject)
   {
      // Users should do any shutdown operation required here.
      // Generally, this means just closing the handle.

      if (!::CloseHandle(hObject))
      {
         // Closing the handle failed for some reason.
         return AtlHresultFromLastError();
      }

      return S_OK;
   }
예제 #12
0
HRESULT
CNdasAutoRegister::Initialize()
{
	if (m_hSemQueue.IsInvalid())
	{
		m_hSemQueue = ::CreateSemaphore(NULL, 0, 255, NULL);
		if (m_hSemQueue.IsInvalid())
		{
			HRESULT hr = AtlHresultFromLastError();
			return hr;
		}
	}
	(void) m_data.LoadFromSystem();
	return S_OK;
}
예제 #13
0
HRESULT CWinThread::CreateNoCRT( IWinRunnable* piRunnable )
{
	assert(!m_h);
	assert(piRunnable);
	if (m_h)
		return AtlHresultFromWin32(ERROR_ALREADY_INITIALIZED);

	if (!piRunnable)
		return E_POINTER;

	m_h = ::CreateThread(NULL, 0, RunThreadFuncNoCRT, piRunnable, CREATE_SUSPENDED, NULL);
	if (!m_h)
		return GetLastError() ? AtlHresultFromLastError() : E_FAIL;

	Resume();
	return S_OK;
}
예제 #14
0
HRESULT CWinThread::Create( IWinRunnable* piRunnable )
{
	assert(!m_h);
	assert(piRunnable);
	if (m_h)
		return AtlHresultFromWin32(ERROR_ALREADY_INITIALIZED);

	if (!piRunnable)
		return E_POINTER;

	// use _beginthreadex for initialization of c runtime lib
	m_h = (HANDLE)_beginthreadex(NULL, 0, RunThreadFunc, piRunnable, CREATE_SUSPENDED, NULL);
	if (!m_h)
		return GetLastError() ? AtlHresultFromLastError() : E_FAIL;

	Resume();
	return S_OK;
}
예제 #15
0
HRESULT CNdasUnitImpl::ConnectUnitDevice(
	HNDAS *ndasHandle)
{
	//
	// Binding Address List
	//
	SOCKADDR_LPX localSockAddrLpx;
	SOCKET_ADDRESS localSocketAddress;
	localSocketAddress.iSockaddrLength = sizeof(SOCKADDR_LPX);
	localSocketAddress.lpSockaddr = reinterpret_cast<LPSOCKADDR>(&localSockAddrLpx);

	COMVERIFY(m_pParentNdasDevice->get_LocalAddress(&localSocketAddress));

	SOCKET_ADDRESS_LIST localAddressList;
	localAddressList.iAddressCount = 1;
	localAddressList.Address[0] = localSocketAddress;

	// Connection Information
	NDASCOMM_CONNECTION_INFO ci = {0};
	ci.Size = sizeof(NDASCOMM_CONNECTION_INFO);
	ci.AddressType = NDASCOMM_CIT_DEVICE_ID;
	COMVERIFY(m_pParentNdasDevice->get_NdasDeviceId(&ci.Address.DeviceId));
	ci.LoginType = NDASCOMM_LOGIN_TYPE_NORMAL;
	COMVERIFY(m_pParentNdasDevice->get_HardwarePassword(&ci.OEMCode.UI64Value));
	ci.Protocol = NDASCOMM_TRANSPORT_LPX;
	ci.UnitNo = m_unitDeviceId.UnitNo;
	ci.WriteAccess = FALSE;
	ci.BindingSocketAddressList = &localAddressList;

	*ndasHandle = ::NdasCommConnect(&ci);

	if (NULL == *ndasHandle)
	{
		HRESULT hr = AtlHresultFromLastError();
		XTLTRACE2(NDASSVC_NDASCOMM, TRACE_LEVEL_ERROR,
			"NdasCommConnect failed, hr=0x%X\n", hr);
		return hr;
	}

	return S_OK;
}