windows-nt/Source/XPSP1/NT/printscan/ui/wiaacmgr/evntparm.h
2020-09-26 16:20:57 +08:00

264 lines
7.3 KiB
C++

#ifndef __EVNTPARM_H_INCLUDED
#define __EVNTPARM_H_INCLUDED
#include <windows.h>
#include <uicommon.h>
#include "shmemsec.h"
struct CEventParameters
{
public:
GUID EventGUID;
CSimpleStringWide strFullItemName;
CSimpleStringWide strEventDescription;
CSimpleStringWide strDeviceID;
CSimpleStringWide strDeviceDescription;
DWORD dwDeviceType;
ULONG ulEventType;
ULONG ulReserved;
HWND hwndParent;
CSharedMemorySection<HWND> *pWizardSharedMemory;
public:
CEventParameters( const CEventParameters &other )
: EventGUID(other.EventGUID),
strFullItemName(other.strFullItemName),
strDeviceID(other.strDeviceID),
strDeviceDescription(other.strDeviceDescription),
dwDeviceType(other.dwDeviceType),
ulEventType(other.ulEventType),
ulReserved(other.ulReserved),
hwndParent(other.hwndParent),
pWizardSharedMemory(other.pWizardSharedMemory),
strEventDescription(other.strEventDescription)
{
}
CEventParameters &operator=( const CEventParameters &other )
{
if (this != &other)
{
EventGUID = other.EventGUID;
strFullItemName = other.strFullItemName;
strDeviceID = other.strDeviceID;
strDeviceDescription = other.strDeviceDescription;
dwDeviceType = other.dwDeviceType;
ulEventType = other.ulEventType;
ulReserved = other.ulReserved;
hwndParent = other.hwndParent;
pWizardSharedMemory = other.pWizardSharedMemory;
}
return *this;
}
CEventParameters()
: EventGUID(IID_NULL),
dwDeviceType(0),
ulEventType(0),
ulReserved(0),
pWizardSharedMemory(NULL)
{
}
~CEventParameters()
{
if (pWizardSharedMemory)
{
pWizardSharedMemory = NULL;
}
}
};
class CStiEventData
{
public:
class CStiEventHandler
{
private:
CSimpleStringWide m_strApplicationName;
CSimpleStringWide m_strCommandLine;
public:
CStiEventHandler()
{
}
CStiEventHandler( const CSimpleStringWide &strApplicationName, const CSimpleStringWide &strCommandLine )
: m_strApplicationName(strApplicationName),
m_strCommandLine(strCommandLine)
{
}
CStiEventHandler( const CStiEventHandler &other )
: m_strApplicationName(other.ApplicationName()),
m_strCommandLine(other.CommandLine())
{
}
~CStiEventHandler()
{
}
CStiEventHandler &operator=( const CStiEventHandler &other )
{
if (this != &other)
{
m_strApplicationName = other.ApplicationName();
m_strCommandLine = other.CommandLine();
}
return *this;
}
bool IsValid() const
{
return (m_strApplicationName.Length() && m_strCommandLine.Length());
}
CSimpleStringWide ApplicationName() const
{
return m_strApplicationName;
}
CSimpleStringWide CommandLine() const
{
return m_strCommandLine;
}
};
typedef CSimpleDynamicArray<CStiEventHandler> CStiEventHandlerArray;
private:
GUID m_guidEvent;
CSimpleStringWide m_strEventDescription;
CSimpleStringWide m_strDeviceId;
CSimpleStringWide m_strDeviceDescription;
DWORD m_dwDeviceType;
ULONG m_ulEventType;
ULONG m_ulReserved;
CStiEventHandlerArray m_EventHandlers;
public:
CStiEventData()
: m_guidEvent(IID_NULL),
m_dwDeviceType(0),
m_ulEventType(0),
m_ulReserved(0)
{
}
CStiEventData( const GUID *pguidEvent,
LPCWSTR pwszEventDescription,
LPCWSTR pwszDeviceId,
LPCWSTR pwszDeviceDescription,
DWORD dwDeviceType,
LPCWSTR pwszFullItemName,
ULONG *pulEventType,
ULONG ulReserved
)
: m_guidEvent(pguidEvent ? *pguidEvent : IID_NULL),
m_strEventDescription(pwszEventDescription),
m_strDeviceId(pwszDeviceId),
m_strDeviceDescription(pwszDeviceDescription),
m_dwDeviceType(dwDeviceType),
m_ulEventType(pulEventType ? *pulEventType : 0),
m_ulReserved(ulReserved)
{
//
// Crack event handlers.
//
// Walk the string until we come to the end, marked by double \0 characters
//
LPCWSTR pwszCurr = pwszFullItemName;
while (pwszCurr && *pwszCurr)
{
//
// Save the application name
//
CSimpleStringWide strApplication = pwszCurr;
//
// Advance to the command line
//
pwszCurr += lstrlen(pwszCurr) + 1;
//
// Save the command line
//
CSimpleStringWide strCommandLine = pwszCurr;
//
// Advance to the next token
//
pwszCurr += lstrlen(pwszCurr) + 1;
//
// If both application and command line are valid strings, add them to the list
//
if (strApplication.Length() && strCommandLine.Length())
{
m_EventHandlers.Append( CStiEventHandler( strApplication, strCommandLine ) );
}
}
}
CStiEventData( const CStiEventData &other )
: m_guidEvent(other.Event()),
m_strEventDescription(other.EventDescription()),
m_strDeviceId(other.DeviceId()),
m_strDeviceDescription(other.DeviceDescription()),
m_dwDeviceType(other.DeviceType()),
m_ulEventType(other.EventType()),
m_ulReserved(other.Reserved()),
m_EventHandlers(other.EventHandlers())
{
}
~CStiEventData()
{
}
CStiEventData &operator=( const CStiEventData &other )
{
if (this != &other)
{
m_guidEvent = other.Event();
m_strEventDescription = other.EventDescription();
m_strDeviceId = other.DeviceId();
m_strDeviceDescription = other.DeviceDescription();
m_dwDeviceType = other.DeviceType();
m_ulEventType = other.EventType();
m_ulReserved = other.Reserved();
m_EventHandlers = other.EventHandlers();
}
return *this;
}
GUID Event() const
{
return m_guidEvent;
}
CSimpleStringWide EventDescription() const
{
return m_strEventDescription;
}
CSimpleStringWide DeviceId() const
{
return m_strDeviceId;
}
CSimpleStringWide DeviceDescription() const
{
return m_strDeviceDescription;
}
DWORD DeviceType() const
{
return m_dwDeviceType;
}
ULONG EventType() const
{
return m_ulEventType;
}
ULONG Reserved() const
{
return m_ulReserved;
}
const CStiEventHandlerArray &EventHandlers() const
{
return m_EventHandlers;
}
};
#endif __EVNTPARM_H_INCLUDED