windows-nt/Source/XPSP1/NT/com/mobile/sens/conn/senssvc/ciolecmd.cxx

500 lines
7.9 KiB
C++
Raw Normal View History

2020-09-26 03:20:57 -05:00
/*++
Copyright (C) Microsoft Corporation, 1997 - 1999
Module Name:
ciolecmd.cxx
Abstract:
This file contains the implementation of the IOleCommandTarget
interface for receiving events from IE5.
Author:
Gopal Parupudi <GopalP>
Notes:
These events are not used on NT5. They are used on Win9x and NT4
platforms.
Revision History:
GopalP 1/26/1998 Start.
--*/
#include <precomp.hxx>
#include <onestop.cxx> // This is a source file!
//
// IOleCommandTarget group for WININET events.
//
// Should have the IE5 folks put it in a header file. This is moot as this
// file is no longer used on any platform.
//
CLSID CLSID_EVENTGROUP_WININET = { /* ab8ed004-b86a-11d1-b1f8-00c04fa357fa */
0xab8ed004,
0xb86a,
0x11d1,
{0xb1, 0xf8, 0x00, 0xc0, 0x4f, 0xa3, 0x57, 0xfa}
};
//
// Globals
//
LONG g_cCommandObj; // Count of active components
LONG g_cCommandLock; // Count of Server locks
//
// Constructors and Destructors
//
CImpIOleCommandTarget::CImpIOleCommandTarget(
void
) : m_cRef(1L) // Add a reference.
{
InterlockedIncrement(&g_cCommandObj);
}
CImpIOleCommandTarget::~CImpIOleCommandTarget(
void
)
{
InterlockedDecrement(&g_cCommandObj);
}
//
// Standard QueryInterface
//
STDMETHODIMP
CImpIOleCommandTarget::QueryInterface(
REFIID riid,
LPVOID *ppv
)
{
HRESULT hr;
DebugTraceGuid("CImpIOleCommandTarget:QueryInterface()", riid);
hr = S_OK;
*ppv = NULL;
// IUnknown
if (IsEqualIID(riid, IID_IUnknown))
{
*ppv = (IOleCommandTarget *) this;
}
else
// IOleCommandTarget
if (IsEqualIID(riid, IID_IOleCommandTarget))
{
*ppv = (IOleCommandTarget *) this;
}
else
{
hr = E_NOINTERFACE;
}
if (NULL != *ppv)
{
((LPUNKNOWN)*ppv)->AddRef();
}
return hr;
}
//
// Standard AddRef and Release
//
STDMETHODIMP_(ULONG)
CImpIOleCommandTarget::AddRef(
void
)
{
return InterlockedIncrement(&m_cRef);
}
STDMETHODIMP_(ULONG)
CImpIOleCommandTarget::Release(
void
)
{
LONG cRefT;
SensPrint(SENS_INFO, (SENS_STRING("\t| CImpIOleCommandTarget::Release(m_cRef = %d) called.\n"), m_cRef));
cRefT = InterlockedDecrement((PLONG) &m_cRef);
if (0 == m_cRef)
{
delete this;
}
return cRefT;
}
//
// IOleCommandTarget Implementation.
//
STDMETHODIMP
CImpIOleCommandTarget::QueryStatus(
const GUID *pguidCmdGroup,
ULONG cCmds,
OLECMD prgCmds[],
OLECMDTEXT *pCmdText
)
{
SensPrint(SENS_INFO, (SENS_STRING("---------------------------------------------------------\n")));
SensPrint(SENS_INFO, (SENS_STRING("CImpIOleCommandTarget::QueryStatus() called\n\n")));
SensPrint(SENS_INFO, (SENS_STRING(" pguidCmdGroup - 0x%x\n"), pguidCmdGroup));
SensPrint(SENS_INFO, (SENS_STRING(" cCmds - 0x%x\n"), cCmds));
SensPrint(SENS_INFO, (SENS_STRING("---------------------------------------------------------\n")));
if (IsEqualGUID(*pguidCmdGroup, CLSID_EVENTGROUP_WININET))
{
// Subscribe to WININET events
return S_OK;
}
return(OLECMDERR_E_UNKNOWNGROUP);
}
STDMETHODIMP
CImpIOleCommandTarget::Exec(
const GUID *pguidCmdGroup,
DWORD nCmdID,
DWORD nCmdexecopt,
VARIANT *pvaIn,
VARIANT *pvaOut
)
{
HRESULT hr;
hr = S_OK;
SensPrint(SENS_INFO, (SENS_STRING("---------------------------------------------------------\n")));
SensPrint(SENS_INFO, (SENS_STRING("CImpIOleCommandTarget::Exec() called\n\n")));
SensPrint(SENS_INFO, (SENS_STRING(" pguidCmdGroup - 0x%x\n"), pguidCmdGroup));
SensPrint(SENS_INFO, (SENS_STRING(" cCmds - 0x%x\n"), nCmdID));
SensPrint(SENS_INFO, (SENS_STRING(" cCmdexecopt - 0x%x\n"), nCmdexecopt));
SensPrint(SENS_INFO, (SENS_STRING("---------------------------------------------------------\n")));
if ( (NULL == pguidCmdGroup)
|| (FALSE == IsEqualGUID(*pguidCmdGroup, CLSID_EVENTGROUP_WININET)))
{
return(E_NOTIMPL);
}
//
// Handle WININET events...
//
switch (nCmdID)
{
case INETEVT_RAS_CONNECT:
ASSERT(VT_BSTR == pvaIn->vt);
hr = WininetRasConnect(pvaIn->bstrVal);
break;
case INETEVT_RAS_DISCONNECT:
ASSERT(VT_BSTR == pvaIn->vt);
hr = WininetRasDisconnect(pvaIn->bstrVal);
break;
case INETEVT_ONLINE:
hr = WininetOnline();
break;
case INETEVT_OFFLINE:
hr = WininetOffline();
break;
case INETEVT_LOGON:
ASSERT(VT_BSTR == pvaIn->vt);
hr = WininetLogon(pvaIn->bstrVal);
break;
case INETEVT_LOGOFF:
//ASSERT(VT_BSTR == pvaIn->vt);
//hr = WininetLogoff(pvaIn->bstrVal);
hr = WininetLogoff(SENS_BSTR("<Not Available>"));
break;
} // switch
return S_OK;
}
HRESULT
WininetRasConnect(
BSTR bstrPhonebookEntry
)
/*++
Routine Description:
Arguments:
Return Value:
--*/
{
HRESULT hr;
ULONG ulIgnore;
SENSEVENT_RAS Data;
hr = S_OK;
SensPrintA(SENS_INFO, ("WininetRasConnect() - RAS Connect Event!\n"));
Data.eType = SENS_EVENT_RAS_CONNECT;
Data.hConnection = NULL;
SensFireEvent(&Data);
// Do necessary work here
EvaluateConnectivity(TYPE_WAN);
return hr;
}
HRESULT
WininetRasDisconnect(
BSTR bstrPhonebookEntry
)
/*++
Routine Description:
Arguments:
Return Value:
--*/
{
HRESULT hr;
ULONG ulIgnore;
SENSEVENT_RAS Data;
hr = S_OK;
SensPrintA(SENS_INFO, ("WininetRasDisconnect() - RAS Disconnect Event!\n"));
Data.eType = SENS_EVENT_RAS_DISCONNECT;
Data.hConnection = NULL;
SensFireEvent(&Data);
// Do necessary work here
EvaluateConnectivity(TYPE_WAN);
return hr;
}
HRESULT
WininetOnline(
void
)
/*++
Routine Description:
Arguments:
Return Value:
--*/
{
HRESULT hr;
hr = S_OK;
return hr;
}
HRESULT
WininetOffline(
void
)
/*++
Routine Description:
Arguments:
Return Value:
--*/
{
HRESULT hr;
hr = S_OK;
return hr;
}
HRESULT
WininetLogon(
BSTR bstrUserName
)
/*++
Routine Description:
Arguments:
Return Value:
--*/
{
HRESULT hr;
SENS_NOTIFY_WINLOGON Data;
hr = S_OK;
//
// Setup the data.
//
memset(&Data.Info, 0x0, sizeof(SENS_NOTIFY_WINLOGON));
Data.eType = SENS_EVENT_LOGON;
Data.Info.Size = sizeof(WINLOGON_INFO);
Data.Info.Flags = 0x0;
Data.Info.UserName = bstrUserName;
Data.Info.Domain = NULL;
Data.Info.WindowStation = NULL;
Data.Info.hToken = NULL;;
// First order of business - start OneStop if necessary.
if (IsAutoSyncEnabled(NULL, AUTOSYNC_ON_STARTSHELL))
{
hr = SensNotifyOneStop(NULL, SYNC_MANAGER_LOGON, FALSE);
LogMessage((SENSLOGN "SensNotifyOneStop() returned 0x%x\n", hr));
}
// Fire the event.
SensFireEvent(&Data);
return hr;
}
HRESULT
WininetLogoff(
BSTR bstrUserName
)
/*++
Routine Description:
Arguments:
Return Value:
--*/
{
HRESULT hr;
SENS_NOTIFY_WINLOGON Data;
hr = S_OK;
//
// Setup the data.
//
memset(&Data.Info, 0x0, sizeof(SENS_NOTIFY_WINLOGON));
Data.eType = SENS_EVENT_LOGOFF;
Data.Info.Size = sizeof(WINLOGON_INFO);
Data.Info.Flags = 0x0;
Data.Info.UserName = bstrUserName;
Data.Info.Domain = NULL;
Data.Info.WindowStation = NULL;
Data.Info.hToken = NULL;;
// First order of business - start OneStop if necessary.
if (IsAutoSyncEnabled(NULL, AUTOSYNC_ON_LOGOFF))
{
hr = SensNotifyOneStop(NULL, SYNC_MANAGER_LOGOFF, FALSE);
LogMessage((SENSLOGN "SensNotifyOneStop() returned 0x%x\n", hr));
}
// Fire the event.
SensFireEvent(&Data);
return hr;
}