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.
 
 
 
 
 
 

244 lines
11 KiB

//+---------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1997.
//
// File: C M D T A B L E . H
//
// Contents: Command-table code -- determines which menu options are
// available by the selection count, among other criteria
//
// Notes:
//
// Author: jeffspr 28 Jan 1998
//
//----------------------------------------------------------------------------
#pragma once
#include "ncperms.h"
//---[ Constants ]------------------------------------------------------------
#define CMIDM_SEPARATOR 0xffffffff
typedef enum tagNETCON_MEDIATYPE_BM
{
NBM_ANY = 0xFFFFFFFF,
NBM_NOMEDIATYPE = 0,
NBM_MNC_WIZARD = 0x80000000,
NBM_HNW_WIZARD = 0x40000000,
NBM_INCOMING= 1 << NCM_NONE,
NBM_DIRECT = 1 << NCM_DIRECT,
NBM_ISDN = 1 << NCM_ISDN,
NBM_LAN = 1 << NCM_LAN,
NBM_PHONE = 1 << NCM_PHONE,
NBM_TUNNEL = 1 << NCM_TUNNEL,
NBM_PPPOE = 1 << NCM_PPPOE,
NBM_BRIDGE = 1 << NCM_BRIDGE,
NBM_SHAREDACCESSHOST_LAN = 1 << NCM_SHAREDACCESSHOST_LAN,
NBM_SHAREDACCESSHOST_RAS = 1 << NCM_SHAREDACCESSHOST_RAS,
NBM_ISLANTYPE = NBM_LAN | NBM_BRIDGE,
NBM_ISRASTYPE = NBM_ISDN | NBM_DIRECT | NBM_PHONE | NBM_TUNNEL | NBM_PPPOE,
NBM_ISCONNECTIONTYPE = NBM_ISLANTYPE | NBM_ISRASTYPE,
NBM_NOTWIZARD = ~(NBM_MNC_WIZARD | NBM_HNW_WIZARD)
} NETCON_MEDIATYPE_BM;
typedef enum tagNETCON_STATUS_BM
{
NBS_ANY = 0xFFFFFFFF,
NBS_NONE = 0,
NBS_DISCONNECTED = 1 << NCS_DISCONNECTED,
NBS_CONNECTING = 1 << NCS_CONNECTING,
NBS_CONNECTED = 1 << NCS_CONNECTED,
NBS_DISCONNECTING = 1 << NCS_DISCONNECTING,
NBS_HARDWARE_NOT_PRESENT = 1 << NCS_HARDWARE_NOT_PRESENT,
NBS_HARDWARE_DISABLED = 1 << NCS_HARDWARE_DISABLED,
NBS_HARDWARE_MALFUNCTION = 1 << NCS_HARDWARE_MALFUNCTION,
NBS_MEDIA_DISCONNECTED = 1 << NCS_MEDIA_DISCONNECTED,
NBS_AUTHENTICATING = 1 << NCS_AUTHENTICATING,
NBS_AUTHENTICATION_SUCCEEDED= 1 << NCS_AUTHENTICATION_SUCCEEDED,
NBS_AUTHENTICATION_FAILED = 1 << NCS_AUTHENTICATION_FAILED,
NBS_INVALID_ADDRESS = 1 << NCS_INVALID_ADDRESS,
NBS_CREDENTIALS_REQUIRED = 1 << NCS_CREDENTIALS_REQUIRED,
NBS_NOT_DISCONNECTED = NBS_ANY & ~NBS_DISCONNECTED,
NBS_NOT_DISCONNECT = NBS_CONNECTED | NBS_MEDIA_DISCONNECTED | NBS_INVALID_ADDRESS | NBS_AUTHENTICATING | NBS_AUTHENTICATION_SUCCEEDED | NBS_AUTHENTICATION_FAILED | NBS_CREDENTIALS_REQUIRED,
NBS_HW_ISSUE = NBS_HARDWARE_NOT_PRESENT | NBS_HARDWARE_DISABLED | NBS_HARDWARE_MALFUNCTION,
NBS_IS_CONNECTED = NBS_CONNECTED | NBS_AUTHENTICATION_SUCCEEDED | NBS_AUTHENTICATION_FAILED | NBS_AUTHENTICATING | NBS_CREDENTIALS_REQUIRED
} NETCON_STATUS_BM;
const DWORD64 NBPERM_NewConnectionWizard = 1 << NCPERM_NewConnectionWizard;
const DWORD64 NBPERM_Statistics = 1 << NCPERM_Statistics;
const DWORD64 NBPERM_AddRemoveComponents = 1 << NCPERM_AddRemoveComponents;
const DWORD64 NBPERM_RasConnect = 1 << NCPERM_RasConnect;
const DWORD64 NBPERM_LanConnect = 1 << NCPERM_LanConnect;
const DWORD64 NBPERM_DeleteConnection = 1 << NCPERM_DeleteConnection;
const DWORD64 NBPERM_DeleteAllUserConnection = 1 << NCPERM_DeleteAllUserConnection;
const DWORD64 NBPERM_RenameConnection = 1 << NCPERM_RenameConnection;
const DWORD64 NBPERM_RenameMyRasConnection = 1 << NCPERM_RenameMyRasConnection;
const DWORD64 NBPERM_ChangeBindState = 1 << NCPERM_ChangeBindState;
const DWORD64 NBPERM_AdvancedSettings = 1 << NCPERM_AdvancedSettings;
const DWORD64 NBPERM_DialupPrefs = 1 << NCPERM_DialupPrefs;
const DWORD64 NBPERM_LanChangeProperties = 1 << NCPERM_LanChangeProperties;
const DWORD64 NBPERM_RasChangeProperties = 1 << NCPERM_RasChangeProperties;
const DWORD64 NBPERM_LanProperties = 1 << NCPERM_LanProperties;
const DWORD64 NBPERM_RasMyProperties = 1 << NCPERM_RasMyProperties;
const DWORD64 NBPERM_RasAllUserProperties = 1 << NCPERM_RasAllUserProperties;
const DWORD64 NBPERM_ShowSharedAccessUi = 1 << NCPERM_ShowSharedAccessUi;
const DWORD64 NBPERM_AllowAdvancedTCPIPConfig = 1 << NCPERM_AllowAdvancedTCPIPConfig;
const DWORD64 NBPERM_OpenConnectionsFolder = 1 << NCPERM_OpenConnectionsFolder;
const DWORD64 NBPERM_PersonalFirewallConfig = 1 << NCPERM_PersonalFirewallConfig;
const DWORD64 NBPERM_AllowNetBridge_NLA = 1 << NCPERM_AllowNetBridge_NLA;
const DWORD64 NBPERM_ICSClientApp = 1 << NCPERM_ICSClientApp;
const DWORD64 NBPERM_EnDisComponentsAllUserRas = 1 << NCPERM_EnDisComponentsAllUserRas;
const DWORD64 NBPERM_EnDisComponentsMyRas = 1 << NCPERM_EnDisComponentsMyRas;
const DWORD64 NBPERM_ChangeMyRasProperties = 1 << NCPERM_ChangeMyRasProperties;
const DWORD64 NBPERM_ChangeAllUserRasProperties = 1 << NCPERM_ChangeAllUserRasProperties;
const DWORD64 NBPERM_RenameLanConnection = 1 << NCPERM_RenameLanConnection;
const DWORD64 NBPERM_RenameAllUserRasConnection = 1 << NCPERM_RenameAllUserRasConnection;
const DWORD64 NBPERM_IpcfgOperation = 1 << NCPERM_IpcfgOperation;
const DWORD64 NBPERM_Repair = 1 << NCPERM_Repair;
const DWORD64 NBPERM_Always = 0x00000000;
typedef enum tagNB_MENUVALID
{
NCWHEN_ANYSELECT = 0xFFFFFFFF,
NCWHEN_TOPLEVEL = 1,
NCWHEN_ONESELECT = 2,
NCWHEN_MULTISELECT = 4,
NCWHEN_TOPLEVEL_DISREGARD_ITEM = 8,
NCWHEN_SOMESELECT = NCWHEN_ONESELECT | NCWHEN_MULTISELECT
} NB_MENUVALID;
typedef enum tagNCCS_STATE
{
NCCS_ENABLED = 1,
NCCS_DISABLED = 2,
NCCS_NOTSHOWN = 3
} NCCS_STATE;
typedef enum tagNCCS_CHECKED_STATE
{
NCCS_UNCHECKED = 0,
NCCS_CHECKED = 1
} NCCS_CHECKED_STATE;
typedef enum tagNB_REMOVEDISABLE
{
NB_NO_FLAGS = 0x0,
NB_NEGATE_VIS_NBM_MATCH = 0x1,
NB_NEGATE_VIS_NBS_MATCH = 0x2,
NB_NEGATE_VIS_CHAR_MATCH = 0x4,
NB_NEGATE_VIS_PERMS_MATCH = 0x8,
NB_NEGATE_ACT_NBM_MATCH = 0x10,
NB_NEGATE_ACT_NBS_MATCH = 0x20,
NB_NEGATE_ACT_CHAR_MATCH = 0x40,
NB_NEGATE_ACT_PERMS_MATCH = 0x80,
NB_VERB = 0x100,
NB_FLAG_ON_TOPMENU = 0x1000,
NB_TOPLEVEL_PERM = 0x2000, // perms only
NB_REMOVE_IF_NOT_MATCH = 0x4000, // perms only
NB_REMOVE_TOPLEVEL_ITEM = 0x8000, // applies to top-level items only. WARNING: Permanent effect.
// Use this only for something that cannot change inside the same user session.
NB_REVERSE_TOPLEVEL_ITEM = 0x10000, // applies to top-level items only. WARNING: Permanent effect.
// Use this only for something that cannot change inside the same user session.
NB_NEGATE_NBM_MATCH = NB_NEGATE_VIS_NBM_MATCH | NB_NEGATE_ACT_NBM_MATCH,
NB_NEGATE_NBS_MATCH = NB_NEGATE_VIS_NBS_MATCH | NB_NEGATE_ACT_NBS_MATCH,
NB_NEGATE_CHAR_MATCH = NB_NEGATE_VIS_CHAR_MATCH | NB_NEGATE_ACT_CHAR_MATCH,
NB_NEGATE_PERMS_MATCH = NB_NEGATE_VIS_PERMS_MATCH | NB_NEGATE_ACT_PERMS_MATCH
} NB_REMOVEDISABLE;
struct CMDCHKENTRY
{
int iCommandId; // Associated command ID
bool fCurrentlyChecked; // Is this menu item already checked?
bool fNewCheckState; // What's the new check state?
};
// If this function returns S_FALSE it's an indication it didn't change the state.
typedef HRESULT (HrEnableDisableCB)(
IN const CConFoldEntry& cfe,
IN BOOL fMultiSelect,
IN int iCommandId,
OUT NCCS_STATE& nccs
);
// If this function returns S_FALSE it's an indication to use Default string
typedef HRESULT (HrCustomMenuStringCB)(
IN const CConFoldEntry& cfe,
IN int iCommandId,
OUT LPDWORD pdwResourceId
);
// Implementations of HrEnableDisableCB/HrCustomMenuStringCB
//HrEnableDisableCB HrDisableForIncomingClients;
HrEnableDisableCB HrCanRenameConnection;
HrEnableDisableCB HrCanShowProperties;
HrEnableDisableCB HrIsBridgeSupported;
HrEnableDisableCB HrIsHomeNewWizardSupported;
HrEnableDisableCB HrIsTroubleShootSupported;
HrEnableDisableCB HrIsMediaWireless;
HrEnableDisableCB HrIsNCWSupported;
struct COMMANDENTRY
{
int iCommandId;
DWORD dwDefaultPriority; // The highest item that's visible+active will be the default. 0 item will never be selected.
DWORD dwValidWhen; // NB_MENUVALID flags
DWORD dwFlags; // NB_REMOVEDISABLE flags (disabled unless specified in this flags - then removed).
HrEnableDisableCB *pfnHrEnableDisableCB; // Callback function. Return S_FALSE to leave alone
HrCustomMenuStringCB *pfnHrCustomMenuStringCB; // Callback function. Return S_FALSE/E_ to leave alone, or S_OK with a dwResourceID
DWORD dwMediaTypeVisible; // NETCON_MEDIATYPE_BM flags
DWORD dwMediaTypeActive; // NETCON_MEDIATYPE_BM flags
DWORD dwStatusVisible; // NETCON_STATUS_BM flags
DWORD dwStatusActive; // NETCON_STATUS_BM flags
DWORD dwCharacteristicsVisible; // NCCF_ flags
DWORD dwCharacteristicsActive; // NCCF_ flags
};
struct COMMANDPERMISSIONSENTRY
{
int iCommandId;
DWORD dwMediaType;
DWORD dwCharacteristicsActive;
DWORD dwFlags; // NB_REMOVEDISABLE flags (disabled unless specified in this flags - then removed).
DWORD64 dwPermissionsActive; // e.g. NBPERM_NewConnectionWizard - NBPERM_Always for always enabled
NCPERM_APPLY_TO ncpAppliesTo;
};
struct SFVCOMMANDMAP
{
int iSFVCommandId;
int iCommandId;
};
extern COMMANDENTRY g_cteCommandMatrix[];
extern const DWORD g_cteCommandMatrixCount;
//---[ Prototypes ]-----------------------------------------------------------
HRESULT HrBuildMenu(IN OUT HMENU &hMenu, IN BOOL fVerbsOnly, IN PCONFOLDPIDLVEC& cfpl, IN DWORD idCmdFirst);
HRESULT HrUpdateMenu(IN OUT HMENU &hMenu, IN PCONFOLDPIDLVEC& cfpl, IN DWORD idCmdFirst);
HRESULT HrAssertTwoMenusEqual(HMENU hMenu1, HMENU hMenu2, UINT idCmdFirst, BOOL bIgnoreFlags, BOOL fPopupAsserts);
HRESULT HrAssertMenuStructuresValid(HWND hwndOwner);
HRESULT HrGetCommandState(IN const PCONFOLDPIDLVEC& cfpl, IN const DWORD dwCmdID, OUT NCCS_STATE& nccs, OUT LPDWORD dwResourceId, IN DWORD cteHint = 0xffffffff, IN DWORD dwOverrideFlag = 0);
BOOL HasPermissionToRenameConnection(const PCONFOLDPIDL& pcfp);
HRESULT HrSetConnectDisconnectMenuItem(
const PCONFOLDPIDLVEC& apidlSelected,
HMENU hmenu,
INT idCmdFirst);