mirror of https://github.com/tongzx/nt5src
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.
545 lines
18 KiB
545 lines
18 KiB
/**********************************************************************/
|
|
/** 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_
|
|
|