/* Copyright (c) 2000 Microsoft Corporation Module Name: Connection.cpp Abstract: This class is used to support IM scenario. Revision History: created steveshi 11/5/00 */ #include "stdafx.h" #include "rcbdyctl.h" #include "Connection.h" #define EVENT_STUB TEXT("MutexToCommunicateRemoteAssistance_Stub") ///////////////////////////////////////////////////////////////////////////// // CConnection CConnection::CConnection() { m_hEventStub = NULL; } CConnection::~CConnection() { if (m_hEventStub) CloseHandle(m_hEventStub); } STDMETHODIMP CConnection::NotifyStub() { if (!m_hEventStub) { m_hEventStub = CreateEvent(NULL, FALSE, FALSE, EVENT_STUB); if(!m_hEventStub) return HRESULT_FROM_WIN32(GetLastError()); } SetEvent(m_hEventStub); return S_OK; } STDMETHODIMP CConnection::get_ReceivedData(BSTR *pVal) { //Goto Registry to fetch data HRESULT hr = E_FAIL; CRegKey cKey; LONG lRet; BOOL bRet = FALSE; TCHAR szBuf[2001]; DWORD dwCount = 2000; lRet = cKey.Open(HKEY_CURRENT_USER, TEXT("Software\\Microsoft\\PCHealth\\RemoteAssistance")); if (lRet == ERROR_SUCCESS) { lRet = cKey.QueryValue(szBuf, TEXT("TransferString"), &dwCount); if (lRet == ERROR_SUCCESS) { *pVal = (BSTR)CComBSTR(szBuf).Copy(); bRet = TRUE; } else if (dwCount > 2000) // Assume buffer too small { TCHAR *pBuf = (TCHAR*)malloc(sizeof(TCHAR) * (dwCount + 1)); if (pBuf) { lRet = cKey.QueryValue(pBuf, TEXT("TransferString"), &dwCount); if (lRet == ERROR_SUCCESS) { *pVal = (BSTR)CComBSTR(pBuf).Copy(); bRet = TRUE; } free(pBuf); } } cKey.Close(); } return S_OK; } STDMETHODIMP CConnection::SendData(BSTR bstrData) { HRESULT hr = E_FAIL; CRegKey cKey; LONG lRet; BOOL bRet = FALSE; DWORD dwCount = 2000; USES_CONVERSION; lRet = cKey.Create(HKEY_CURRENT_USER, TEXT("Software\\Microsoft\\PCHealth\\RemoteAssistance")); if (lRet == ERROR_SUCCESS) { lRet = cKey.SetValue(W2T(bstrData), TEXT("TransferString")); if (lRet == ERROR_SUCCESS) { bRet = TRUE; } cKey.Close(); } return S_OK; } STDMETHODIMP CConnection::SendDataFromFile(BSTR bstrFile) { HRESULT hr = E_FAIL; CRegKey cKey; LONG lRet; BOOL bRet = FALSE; BYTE szBuf[258]; DWORD dwCount = 2000; CComBSTR bstrBlob; HANDLE hFile = CreateFile( bstrFile, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_TEMPORARY, NULL); if (hFile == INVALID_HANDLE_VALUE) { return HRESULT_FROM_WIN32(GetLastError()); } while (ReadFile(hFile, szBuf, 256, &dwCount, NULL)) { if (dwCount == 0) break; *(WCHAR*)((WCHAR*)&szBuf + (dwCount>>1)) = L'\0'; bstrBlob.Append((LPCTSTR)&szBuf[0]); } lRet = cKey.Create(HKEY_CURRENT_USER, TEXT("Software\\Microsoft\\PCHealth\\RemoteAssistance")); if (lRet == ERROR_SUCCESS) { lRet = cKey.SetValue(bstrBlob, TEXT("TransferString")); if (lRet == ERROR_SUCCESS) { bRet = TRUE; } cKey.Close(); } return S_OK; }