Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

143 lines
5.5 KiB

//+----------------------------------------------------------------------------
//
// File: customaction.h
//
// Module: CMAK.EXE
//
// Synopsis: Header file for the CustomActionList and CustomActionListEnumerator
// classes used by CMAK to handle its custom actions.
//
// Copyright (c) 2000 Microsoft Corporation
//
// Author: quintinb Created 02/26/00
//
//+----------------------------------------------------------------------------
#include "conact.h"
//
// We display the flags to the user in a different order than the flags were created. Thus we have to arrays to
// map between the display order and the actual order and vice versa.
//
const int c_iExecutionIndexToFlagsMap[c_iNumCustomActionExecutionStates] = {ALL_CONNECTIONS, ALL_DIALUP, ALL_TUNNEL, DIRECT_ONLY, DIALUP_ONLY};
const int c_iExecutionFlagsToIndexMap[c_iNumCustomActionExecutionStates] = {0, 3, 1, 4, 2};
//
// Enum for Connect Action Types
//
const int c_iNumCustomActionTypes = 9;
enum CustomActionTypes
{
PREINIT = 0,
PRECONNECT = 1,
PREDIAL = 2,
PRETUNNEL = 3,
ONCONNECT = 4,
ONINTCONNECT = 5,
ONDISCONNECT = 6,
ONCANCEL = 7,
ONERROR = 8,
ALL = -1
};
struct CustomActionListItem
{
TCHAR szDescription[MAX_PATH+1];
TCHAR szProgram[MAX_PATH+1];
TCHAR szFunctionName[MAX_PATH+1];
LPTSTR pszParameters;
BOOL bIncludeBinary;
BOOL bBuiltInAction;
BOOL bTempDescription;
CustomActionTypes Type;
DWORD dwFlags;
CustomActionListItem* Next;
};
class CustomActionList
{
//
// This enumerator class is used to enumerate
// the data in the Custom Action List class.
// This allows the enumerator to have access to
// the private data of CustomActionList but
// controls how the user of this class accesses
// that data.
//
friend class CustomActionListEnumerator;
private:
//
// Array of Linked lists to hold the custom actions
//
CustomActionListItem* m_CustomActionHash[c_iNumCustomActionTypes];
//
// Array of string pointers to hold the custom action type strings, plus
// the special All type string pointer.
//
TCHAR* m_ActionTypeStrings[c_iNumCustomActionTypes];
TCHAR* m_pszAllTypeString;
//
// Array of string pointers to hold the CMS section names for each type
// of custom action. Note that these strings are const TCHAR* const and
// shouldn't be free-ed.
//
TCHAR* m_ActionSectionStrings[c_iNumCustomActionTypes];
//
// Array of string pointers to hold the custom action execution state
// strings. These are added to the combo box on the Add/Edit custom
// action dialog to allow the user to pick when a custom action is
// executed
//
TCHAR* m_ExecutionStrings[c_iNumCustomActionExecutionStates];
//
// Functions internal to the class
//
HRESULT ParseCustomActionString(LPTSTR pszStringToParse, CustomActionListItem* pCustomAction, TCHAR* pszShortServiceName);
HRESULT Find(HINSTANCE hInstance, LPCTSTR pszDescription, CustomActionTypes Type, CustomActionListItem** ppItem, CustomActionListItem** ppFollower);
HRESULT EnsureActionTypeStringsLoaded(HINSTANCE hInstance);
BOOL IsCmDl(CustomActionListItem* pItem);
public:
CustomActionList();
~CustomActionList();
HRESULT ReadCustomActionsFromCms(HINSTANCE hInstance, TCHAR* pszCmsFile, TCHAR* pszShortServiceName);
HRESULT WriteCustomActionsToCms(TCHAR* pszCmsFile, TCHAR* pszShortServiceName, BOOL bUseTunneling);
HRESULT Add(HINSTANCE hInstance, CustomActionListItem* pCustomAction, LPCTSTR pszShortServiceName);
HRESULT Edit(HINSTANCE hInstance, CustomActionListItem* pOldCustomAction, CustomActionListItem* pNewCustomAction, LPCTSTR pszShortServiceName);
HRESULT GetExistingActionData(HINSTANCE hInstance, LPCTSTR pszDescription, CustomActionTypes Type, CustomActionListItem** ppCustomAction);
HRESULT Delete(HINSTANCE hInstance, TCHAR* pszDescription, CustomActionTypes Type);
HRESULT MoveUp(HINSTANCE hInstance, TCHAR* pszDescription, CustomActionTypes Type);
HRESULT MoveDown(HINSTANCE hInstance, TCHAR* pszDescription, CustomActionTypes Type);
HRESULT AddCustomActionTypesToComboBox(HWND hDlg, UINT uCtrlId, HINSTANCE hInstance, BOOL bUseTunneling, BOOL bAddAll);
HRESULT AddCustomActionsToListView(HWND hListView, HINSTANCE hInstance, CustomActionTypes Type, BOOL bUseTunneling, int iItemToSelect, BOOL bTypeInSecondCol);
HRESULT GetTypeFromTypeString(HINSTANCE hInstance, TCHAR* pszTypeString, CustomActionTypes* pType);
HRESULT GetTypeStringFromType(HINSTANCE hInstance, CustomActionTypes Type, TCHAR** ppszTypeString);
HRESULT AddExecutionTypesToComboBox(HWND hDlg, UINT uCtrlId, HINSTANCE hInstance, BOOL bUseTunneling);
HRESULT MapIndexToFlags(int iIndex, DWORD* pdwFlags);
HRESULT MapFlagsToIndex(DWORD dwFlags, int* piIndex);
HRESULT FillInTempDescription(CustomActionListItem* pCustomAction);
HRESULT GetListPositionAndBuiltInState(HINSTANCE hInstance, CustomActionListItem* pItem, BOOL* pbFirstInList, BOOL* pbLastInList, BOOL *pIsBuiltIn);
HRESULT AddOrRemoveCmdl(HINSTANCE hInstance, BOOL bAddCmdl, BOOL bForVpn);
};
class CustomActionListEnumerator
{
private:
int m_iCurrentList;
CustomActionListItem* m_pCurrentListItem;
CustomActionList* m_pActionList;
public:
CustomActionListEnumerator(CustomActionList* pActionListToWorkFrom);
// ~CustomActionListEnumerator(); // currently not needed
void Reset();
HRESULT GetNextIncludedProgram(TCHAR* pszProgram, DWORD dwBufferSize);
};