windows-nt/Source/XPSP1/NT/admin/netui/common/h/umx.h
2020-09-26 16:20:57 +08:00

546 lines
18 KiB
C

/**********************************************************************/
/** Microsoft Windows NT **/
/** Copyright(c) Microsoft Corp., 1992 **/
/**********************************************************************/
/*
umx.h
This file contains the common messages, manifests, types, and
structures used by User Manager Extensions.
NOTE: You must include windows.h and lmcons.h *before* this file.
FILE HISTORY:
JonN 19-Nov-1992 Created, templated from SMX spec
JonN 16-May-1996 Added GETCURFOCUS2
*/
#ifndef _UMX_H_
#define _UMX_H_
//
// This is the maximum length allowed for an extension menu item.
//
#define UME_MENU_TEXT_LEN 50
//
// This is the current version number of the extension interface.
// Version 0 is the original version (NT 3.x).
// Version 1 supports GETCURFOCUS2 (NT 4.x).
//
#define UME_VERSION 1
//
// These are the two listboxes in the User Manager main window.
//
#define UMS_LISTBOX_USERS 0
#define UMS_LISTBOX_GROUPS 1
//
// These are the messages sent from the extension to the
// User Manager application.
//
// UM_GETSELCOUNT
//
// Purpose - Retrieves the number of selected items in
// the specified listbox.
//
// wParam - Listbox index. This 0-based index specifies
// the listbox to query. For the User Manager,
// this may be either UMS_LISTBOX_USERS or
// UMS_LISTBOX_GROUPS.
//
// lParam - Points to a UMS_GETSELCOUNT structure.
//
// Returns - TRUE if successful, FALSE if unsuccessful.
//
//
// UM_GETUSERSEL[AW]
//
// Purpose - Retrieves a particular selection.
//
// wParam - Selection index. This 0-based index specifies
// the selected item to query. This is used here
// since the Users listbox is multiple-select.
//
// lParam - Points to a UMS_GETSEL[AW] structure.
//
// Returns - TRUE if successful, FALSE if unsuccessful.
//
//
// UM_GETGROUPSEL[AW]
//
// Purpose - Retrieves a particular selection.
//
// wParam - Selection index. This 0-based index specifies
// the selected item to query. This is useful
// for muliple-select listboxes. Since the Groups
// listbox is single-select, this value must always
// be zero.
//
// lParam - Points to a UMS_GETSEL[AW] structure.
//
// Returns - TRUE if successful, FALSE if unsuccessful.
//
//
// UM_GETCURFOCUS[AW][2]
//
// Purpose - Retrieves the current application focus.
// New clients should use version 2 when
// UMS_LOADMENU.dwVersion is 1 or greater.
//
// wParam - Must be zero.
//
// lParam - Points to a UMS_GETCURFOCUS[2] structure.
//
// Returns - TRUE if successful, FALSE if unsuccessful.
//
//
// UM_GETOPTIONS[2]
//
// Purpose - Retrieves the current option settings
//
// wParam - Must be zero.
//
// lParam - Points to a UMS_GETOPTIONS[2] structure.
//
// Returns - TRUE if successful, FALSE if unsuccessful.
//
#define UM_GETSELCOUNT (WM_USER + 1000)
#define UM_GETUSERSELA (WM_USER + 1001)
#define UM_GETUSERSELW (WM_USER + 1002)
#define UM_GETGROUPSELA (WM_USER + 1003)
#define UM_GETGROUPSELW (WM_USER + 1004)
#define UM_GETCURFOCUSA (WM_USER + 1005)
#define UM_GETCURFOCUSW (WM_USER + 1006)
#define UM_GETOPTIONS (WM_USER + 1007)
#define UM_GETOPTIONS2 (WM_USER + 1008)
#define UM_GETCURFOCUS2A (WM_USER + 1009)
#define UM_GETCURFOCUS2W (WM_USER + 1010)
#ifdef UNICODE
#define UM_GETUSERSEL UM_GETUSERSELW
#define UM_GETGROUPSEL UM_GETGROUPSELW
#define UM_GETCURFOCUS UM_GETCURFOCUSW
#define UM_GETCURFOCUS2 UM_GETCURFOCUS2W
#else // !UNICODE
#define UM_GETUSERSEL UM_GETUSERSELA
#define UM_GETGROUPSEL UM_GETGROUPSELA
#define UM_GETCURFOCUS UM_GETCURFOCUSA
#define UM_GETCURFOCUS2 UM_GETCURFOCUS2A
#endif // UNICODE
//
// These structures are used when the extension is
// communicating with the application.
//
//
// The UMS_LOADMENU[AW] structure is passed to the extension's
// UMELoadMenu[AW] entrypoint when the extension is loaded.
//
// dwVersion - On entry to UMELoadMenu[AW], this will
// contain the maximum extension version
// supported by the User Manager. If the
// extension supports a lower version, it
// should set this field appropriately before
// returning. The User Manager will use
// the returned value to determine the
// capabilities of the extension.
//
// Version 0 is the original version (NT 3.x).
// Version 1 supports GETCURFOCUS2.
//
// szMenuName - The name of the menu item that is to appear
// in the app's main menu. This value will also
// appear in the "Help On Extensions" submene and
// the "View" menu.
//
// hMenu - A valid HMENU for the popup-menu to be inserted
// into the app's main menu. Ownership of this
// handle transfers to the User Manager. The
// extension should *not* destroy this handle.
//
// szHelpFileName - The name of the help file associated with this
// extension. This file will be used for the
// "Help On Extensions" menu. This will also be
// used when the user presses [F1] while the
// extension's menu is dropped.
//
// dwMenuDelta - The User Manager will apply this delta
// to each menu ID present in hMenu. This is
// to prevent conflicts with other extension's
// menu IDs.
//
typedef struct _UMS_LOADMENUA
{
DWORD dwVersion;
CHAR szMenuName[UME_MENU_TEXT_LEN + 1];
HMENU hMenu;
CHAR szHelpFileName[MAX_PATH];
DWORD dwMenuDelta;
} UMS_LOADMENUA, * PUMS_LOADMENUA;
typedef struct _UMS_LOADMENUW
{
DWORD dwVersion;
WCHAR szMenuName[UME_MENU_TEXT_LEN + 1];
HMENU hMenu;
WCHAR szHelpFileName[MAX_PATH];
DWORD dwMenuDelta;
} UMS_LOADMENUW, * PUMS_LOADMENUW;
#ifdef UNICODE
#define UMS_LOADMENU UMS_LOADMENUW
#define PUMS_LOADMENU PUMS_LOADMENUW
#else // !UNICODE
#define UMS_LOADMENU UMS_LOADMENUA
#define PUMS_LOADMENU PUMS_LOADMENUA
#endif // UNICODE
#define UM_SELTYPE_USER 0x10
#define UM_SELTYPE_NORMALUSER 0x1 | UM_SELTYPE_USER
#define UM_SELTYPE_REMOTEUSER 0x2 | UM_SELTYPE_USER
#define UM_SELTYPE_GROUP 0x20
#define UM_SELTYPE_LOCALGROUP 0x4 | UM_SELTYPE_GROUP
#define UM_SELTYPE_GLOBALGROUP 0x8 | UM_SELTYPE_GROUP
//
// The UMS_GETSEL[AW] structure is filled in by the User Manager
// when it handles UM_GETUSERSEL[AW] or UM_GETGROUPSEL[AW] messages.
// This is used to return the current selection to the extension.
// Note that this structure contains pointers. The extension should not
// assume that these pointers will be valid forever, instead the
// extension should promptly copy these strings and use the copies.
//
// dwRID - The RID of the item. Note that the RID is not
// valid when the UMS_GETSEL describes a group.
//
// pchName - Will receive the name of the selected account.
//
// dwSelType - Will receive the account type mask associated
// with the account.
//
// pchName - Will receive the fullname of the selected account.
// Note that groups do not have fullnames.
//
// pchComment - Will receive the comment of the selected account.
//
typedef struct _UMS_GETSELA
{
DWORD dwRID;
LPSTR pchName;
DWORD dwSelType;
LPSTR pchFullName;
LPSTR pchComment;
} UMS_GETSELA, * PUMS_GETSELA;
typedef struct _UMS_GETSELW
{
DWORD dwRID;
LPWSTR pchName;
DWORD dwSelType;
LPWSTR pchFullName;
LPWSTR pchComment;
} UMS_GETSELW, * PUMS_GETSELW;
#ifdef UNICODE
#define UMS_GETSEL UMS_GETSELW
#define PUMS_GETSEL PUMS_GETSELW
#else // !UNICODE
#define UMS_GETSEL UMS_GETSELA
#define PUMS_GETSEL PUMS_GETSELA
#endif // UNICODE
//
// The UMS_GETSELCOUNT structure is filled in by the User Manager
// when it handles the UM_GETSELCOUNT message. This is used to
// return the number of selected items to the extension. This could
// be more than 1 for the user listbox.
//
// dwItems - The number of selected items in the listbox.
//
typedef struct _UMS_GETSELCOUNT
{
DWORD dwItems;
} UMS_GETSELCOUNT, * PUMS_GETSELCOUNT;
//
// The UMS_GETCURFOCUS structure is filled in by the User Manager
// when it handles the UM_GETCURFOCUS message. This is used to
// return the current focus of the User Manager application.
//
// UMS_GETCURFOCUS is outdated due to the change in server name length,
// use UMS_GETCURFOCUS2 when SMS_LOADMENU.dwVersion is 1 or greater.
//
// szFocus - The domain name or server name of the current
// focus. Server names can be distinguished
// by the leading backslashes, or by dwFocusType.
//
// dwFocusType - This is the type of focus, either
// UM_FOCUS_TYPE_DOMAIN (and szFocus is a domain name)
// UM_FOCUS_TYPE_WINNT (and szFocus is a server name)
// UM_FOCUS_TYPE_LM (and szFocus is a server name)
// UM_FOCUS_TYPE_UNKNOWN
//
// szFocusPDC - This is the PDC of the domain of focus, and is valid
// only if focus is set to UM_FOCUS_TYPE_DOMAIN.
//
// psidFocus - This points to the SID of the domain of focus. It
// may be NULL. Note that this pointer will not be
// valid forever, the extension should copy the SID
// immediately if it intends to use it.
//
#define UM_FOCUS_TYPE_DOMAIN 1
#define UM_FOCUS_TYPE_WINNT 2
#define UM_FOCUS_TYPE_LM 3
#define UM_FOCUS_TYPE_UNKNOWN 4
typedef struct _UMS_GETCURFOCUSA
{
CHAR szFocus[UNCLEN+1];
DWORD dwFocusType;
CHAR szFocusPDC[UNCLEN+1];
PVOID psidFocus; // actually a SID pointer
} UMS_GETCURFOCUSA, * PUMS_GETCURFOCUSA;
typedef struct _UMS_GETCURFOCUSW
{
WCHAR szFocus[UNCLEN+1];
DWORD dwFocusType;
WCHAR szFocusPDC[UNCLEN+1];
PVOID psidFocus; // actually a SID pointer
} UMS_GETCURFOCUSW, * PUMS_GETCURFOCUSW;
typedef struct _UMS_GETCURFOCUS2A
{
CHAR szFocus[MAX_PATH];
DWORD dwFocusType;
CHAR szFocusPDC[MAX_PATH];
PVOID psidFocus; // actually a SID pointer
} UMS_GETCURFOCUS2A, * PUMS_GETCURFOCUS2A;
typedef struct _UMS_GETCURFOCUS2W
{
WCHAR szFocus[MAX_PATH];
DWORD dwFocusType;
WCHAR szFocusPDC[MAX_PATH];
PVOID psidFocus; // actually a SID pointer
} UMS_GETCURFOCUS2W, * PUMS_GETCURFOCUS2W;
#ifdef UNICODE
#define UMS_GETCURFOCUS UMS_GETCURFOCUSW
#define PUMS_GETCURFOCUS PUMS_GETCURFOCUSW
#define UMS_GETCURFOCUS2 UMS_GETCURFOCUS2W
#define PUMS_GETCURFOCUS2 PUMS_GETCURFOCUS2W
#else // UNICODE
#define UMS_GETCURFOCUS UMS_GETCURFOCUSA
#define PUMS_GETCURFOCUS PUMS_GETCURFOCUSA
#define UMS_GETCURFOCUS2 UMS_GETCURFOCUS2A
#define PUMS_GETCURFOCUS2 PUMS_GETCURFOCUS2A
#endif // UNICODE
//
// The UMS_GETOPTIONS[2] structure is filled in by the User Manager
// when it handles the UM_GETOPTIONS[2] message. This is used to
// return the current option settings of the User Manager application.
//
// fSaveSettingsOnExit - Should User Manager settings be saved on exit?
//
// fConfirmation - Should permanent and/or dangerous actions be
// confirmed?
//
// fSortByFullName - Should the main user listbox be sorted by
// fullname rather than by user name?
//
// fMiniUserManager - (UMS_GETOPTIONS2 only) Is this the User Manager
// rather than the User Manager for Domains?
//
// fLowSpeedConnection - (UMS_GETOPTIONS2 only) Is the User Manager
// optimized for use across a slow network link?
//
typedef struct _UMS_GETOPTIONS
{
BOOL fSaveSettingsOnExit;
BOOL fConfirmation;
BOOL fSortByFullName;
} UMS_GETOPTIONS, * PUMS_GETOPTIONS;
typedef struct _UMS_GETOPTIONS2
{
BOOL fSaveSettingsOnExit;
BOOL fConfirmation;
BOOL fSortByFullName;
BOOL fMiniUserManager;
BOOL fLowSpeedConnection;
} UMS_GETOPTIONS2, * PUMS_GETOPTIONS2;
//
// These are the names of the extension entrypoints.
//
#define SZ_UME_UNLOADMENU "UMEUnloadMenu"
#define SZ_UME_INITIALIZEMENU "UMEInitializeMenu"
#define SZ_UME_REFRESH "UMERefresh"
#define SZ_UME_MENUACTION "UMEMenuAction"
#define SZ_UME_LOADMENUW "UMELoadMenuW"
#define SZ_UME_GETEXTENDEDERRORSTRINGW "UMEGetExtendedErrorStringW"
#define SZ_UME_CREATEW "UMECreateW"
#define SZ_UME_DELETEW "UMEDeleteW"
#define SZ_UME_RENAMEW "UMERenameW"
#define SZ_UME_LOADMENUA "UMELoadMenuA"
#define SZ_UME_GETEXTENDEDERRORSTRINGA "UMEGetExtendedErrorStringA"
#define SZ_UME_CREATEA "UMECreateA"
#define SZ_UME_DELETEA "UMEDeleteA"
#define SZ_UME_RENAMEA "UMERenameA"
#ifdef UNICODE
#define SZ_UME_LOADMENU SZ_UME_LOADMENUW
#define SZ_UME_GETEXTENDEDERRORSTRING SZ_UME_GETEXTENDEDERRORSTRINGW
#define SZ_UME_CREATE SZ_UME_CREATEW
#define SZ_UME_DELETE SZ_UME_DELETEW
#define SZ_UME_RENAME SZ_UME_RENAMEW
#else // !UNICODE
#define SZ_UME_LOADMENU SZ_UME_LOADMENUA
#define SZ_UME_GETEXTENDEDERRORSTRING SZ_UME_GETEXTENDEDERRORSTRINGA
#define SZ_UME_CREATE SZ_UME_CREATEA
#define SZ_UME_DELETE SZ_UME_DELETEA
#define SZ_UME_RENAME SZ_UME_RENAMEA
#endif // UNICODE
//
// Typedefs for the extension entrypoints.
//
typedef DWORD (PASCAL * PUMX_LOADMENUW)( HWND hWnd,
PUMS_LOADMENUW pumsload );
typedef DWORD (PASCAL * PUMX_LOADMENUA)( HWND hWnd,
PUMS_LOADMENUA pumsload );
typedef LPWSTR (PASCAL * PUMX_GETEXTENDEDERRORSTRINGW)( VOID );
typedef LPSTR (PASCAL * PUMX_GETEXTENDEDERRORSTRINGA)( VOID );
typedef VOID (PASCAL * PUMX_UNLOADMENU)( VOID );
typedef VOID (PASCAL * PUMX_INITIALIZEMENU)( VOID );
typedef VOID (PASCAL * PUMX_REFRESH)( HWND hwndParent );
typedef VOID (PASCAL * PUMX_MENUACTION)( HWND hwndParent,
DWORD dwEventId );
typedef VOID (PASCAL * PUMX_CREATEW)( HWND hwndParent,
PUMS_GETSELW pumsSelection );
typedef VOID (PASCAL * PUMX_CREATEA)( HWND hwndParent,
PUMS_GETSELA pumsSelection );
typedef VOID (PASCAL * PUMX_DELETEW)( HWND hwndParent,
PUMS_GETSELW pumsSelection );
typedef VOID (PASCAL * PUMX_DELETEA)( HWND hwndParent,
PUMS_GETSELA pumsSelection );
typedef VOID (PASCAL * PUMX_RENAMEW)( HWND hwndParent,
PUMS_GETSELW pumsSelection,
LPWSTR pchNewName );
typedef VOID (PASCAL * PUMX_RENAMEA)( HWND hwndParent,
PUMS_GETSELA pumsSelection,
LPSTR pchNewName );
#ifdef UNICODE
#define PUMX_LOADMENU PUMX_LOADMENUW
#define PUMX_GETEXTENDEDERRORSTRING PUMX_GETEXTENDEDERRORSTRINGW
#define PUMX_CREATE PUMX_CREATEW
#define PUMX_DELETE PUMX_DELETEW
#define PUMX_RENAME PUMX_RENAMEW
#else // !UNICODE
#define PUMX_LOADMENU PUMX_LOADMENUA
#define PUMX_GETEXTENDEDERRORSTRING PUMX_GETEXTENDEDERRORSTRINGA
#define PUMX_CREATE PUMX_CREATEA
#define PUMX_DELETE PUMX_DELETEA
#define PUMX_RENAME PUMX_RENAMEA
#endif // UNICODE
//
// Prototypes for the extension entrypoints.
//
DWORD PASCAL UMELoadMenuA( HWND hwndMessage,
PUMS_LOADMENUA pumsload );
DWORD PASCAL UMELoadMenuW( HWND hwndMessage,
PUMS_LOADMENUW pumsload );
LPSTR PASCAL UMEGetExtendedErrorStringA( VOID );
LPWSTR PASCAL UMEGetExtendedErrorStringW( VOID );
VOID PASCAL UMEUnloadMenu( VOID );
VOID PASCAL UMEInitializeMenu( VOID );
VOID PASCAL UMERefresh( HWND hwndParent );
VOID PASCAL UMEMenuAction( HWND hwndParent,
DWORD dwEventId );
VOID PASCAL UMECreateA( HWND hwndParent,
PUMS_GETSELA pumsSelection );
VOID PASCAL UMECreateW( HWND hwndParent,
PUMS_GETSELW pumsSelection );
VOID PASCAL UMEDeleteA( HWND hwndParent,
PUMS_GETSELA pumsSelection );
VOID PASCAL UMEDeleteW( HWND hwndParent,
PUMS_GETSELW pumsSelection );
VOID PASCAL UMERenameA( HWND hwndParent,
PUMS_GETSELA pumsSelection,
LPSTR pchNewName );
VOID PASCAL UMERenameW( HWND hwndParent,
PUMS_GETSELW pumsSelection,
LPWSTR pchNewName );
#endif // _UMX_H_