2025-04-27 07:49:33 -04:00

158 lines
3.6 KiB
C++

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