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.
 
 
 
 
 
 

305 lines
10 KiB

//*********************************************************************
//* Microsoft Windows **
//* Copyright(c) Microsoft Corp., 1992 **
//*********************************************************************
#define STRICT // Use strict handle types
//
// NT uses DBG=1 for its debug builds.
// Do the appropriate mapping here.
//
#if DBG
#define DEBUG 1
#endif
#ifndef RC_INVOKED
#include <nt.h>
#include <ntrtl.h>
#include <nturtl.h>
#endif
#include <windows.h> // Windows 3.1 (internal)
#include <commctrl.h>
#include <comctrlp.h>
#include <prsht.h>
#include <commdlg.h>
#include <shellapi.h>
#include <regstr.h>
#include <sec32api.h>
#include <htmlhelp.h>
#include "memory.h"
#include "user.h"
#include "treeview.h"
#include "policy.h"
#include "view.h"
#include "strings.h"
#include "dlgcodes.h"
#include "strids.h"
#include "dlgids.h"
#pragma intrinsic (memset)
#pragma intrinsic (memcpy)
// Defines
#define REGBUFLEN 255
#define MAXSTRLEN 2048
#define SMALLBUF 48
#define USERNAMELEN 260 // big enough for netware
#define MEDIUMBUF 1024 // random buffer size
#define HELPBUFSIZE 4096
#define FILEHISTORY_COUNT 4 // # of last files remembered on file menu
#define WM_FINISHINIT WM_USER + 0x00
extern HINSTANCE ghInst; // app instance
extern HWND hwndMain; // main window
extern HWND hwndUser; // user listbox
extern CLASSLIST gClassList;
extern TCHAR szSmallBuf[SMALLBUF]; // global small buffer for general use
extern TCHAR szDatFilename[MAX_PATH+1]; // name of active .DAT file
extern TCHAR szDlgModeUserName[USERNAMELEN+1]; // user name for dialog mode operation
extern TCHAR *pbufTemplates; //Buffer containing list of all active template files
extern HGLOBAL hBufTemplates;
extern DWORD dwBufTemplates;
extern BOOL fNetworkInstalled;
extern BOOL g_bWinnt;
#define ERROR_ALREADY_DISPLAYED 0xFFFF
#define ARRAYSIZE(a) (sizeof(a)/sizeof(a[0]))
// Functions in POLEDIT.C
BOOL InitApplication(HANDLE);
BOOL InitInstance(HANDLE, int);
LRESULT CALLBACK About (HWND, UINT, WPARAM, LPARAM);
// Functions in MAIN.C
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
// Functions in MEMORY.C
BOOL FreeTable(TABLEENTRY * pTableEntry);
BOOL InitializeRootTables(VOID);
VOID FreeRootTables(VOID);
// Functions in PARSE.C
UINT ParseTemplateFile(HWND hWnd,HANDLE hFile,LPTSTR pszFileName);
// Functions in TREEVIEW.C
BOOL RefreshTreeView(POLICYDLGINFO * pdi,HWND hwndTree,TABLEENTRY * pTableEntry,
HGLOBAL hUser);
BOOL InitImageLists(VOID);
VOID FreeImageLists(VOID);
UINT GetImageIndex(DWORD dwType,BOOL fExpanded,BOOL fEnabled);
BOOL SetTreeRootItem(HWND hwndPolicy,USERHDR * pUserHdr);
VOID SetStatusText(TCHAR * pszText);
VOID GetStatusText(TCHAR * pszText,UINT cbText);
BOOL IsSelectedItemChecked(HWND hwndTree);
// Functions in TREECTRL.C
BOOL OnTreeNotify(HWND hwndParent,HWND hwndTree,NM_TREEVIEW *pntv);
// Functions in LISTCTRL.C
BOOL OnListNotify(HWND hwndParent,HWND hwndList,NM_LISTVIEW *pnlv);
HWND CreateListControl(HWND hwndApp);
VOID DestroyListControl(HWND hwndList);
VOID UpdateListControlPlacement(HWND hwndApp,HWND hwndList);
BOOL OnProperties(HWND hwndParent,HWND hwndList);
// Functions in POLICY.C
BOOL DoPolicyDlg(HWND hwndOwner,HGLOBAL hUser);
BOOL SetPolicyState(HWND hDlg,TABLEENTRY * pTableEntry,UINT uState);
// Functions in SETTINGS.c
LRESULT CALLBACK ClipWndProc(HWND hWnd,UINT message,WPARAM wParam,
LPARAM lParam);
BOOL CreateSettingsControls(HWND hwndParent,SETTINGS * pSettings,BOOL fEnabled);
BOOL ProcessSettingsControls(HWND hwndOwner,DWORD dwValidate);
VOID FreeSettingsControls(HWND hwndOwner);
BOOL EnableSettingsControls(HWND hDlg,BOOL fEnable);
BOOL SetVariableLengthData(HGLOBAL hUser,UINT nDataIndex,TCHAR * pchData,
DWORD cbData);
// dwValidate values for ProcessSettingsControls
#define PSC_NOVALIDATE 0
#define PSC_VALIDATESILENT 1
#define PSC_VALIDATENOISY 2
// Functions in USER.C
HGLOBAL AddUser(HWND hwndList,TCHAR * szName,DWORD dwType);
BOOL CloneUser(HGLOBAL hUser);
BOOL CopyUser(HGLOBAL hUserSrc,HGLOBAL hUserDst);
BOOL RemoveUser(HWND hwndList,UINT nIndex,BOOL fMarkDeleted);
BOOL FreeUser(HGLOBAL hUser);
BOOL RemoveAllUsers(HWND hwndList);
BOOL AddDefaultUsers(HWND hwndList);
BOOL GetUserHeader(HGLOBAL hUser,USERHDR * pUserHdr);
UINT GetUserImageIndex(DWORD dwUserType);
BOOL AllocTemplateTable(VOID);
VOID FreeTemplateTable(VOID);
BOOL AddDeletedUser(USERHDR * pUserHdr);
USERHDR * GetDeletedUser(UINT nIndex);
VOID ClearDeletedUserList(VOID);
VOID MapUserName(TCHAR * szUserName,TCHAR * szMappedName);
VOID UnmapUserName(TCHAR * szMappedName,TCHAR * szUserName,BOOL fUser);
// Functions in ADD.C
BOOL DoAddUserDlg(HWND hwndApp,HWND hwndList);
BOOL DoAddGroupDlg(HWND hwndApp,HWND hwndList);
BOOL DoAddComputerDlg(HWND hwndApp,HWND hwndList);
HGLOBAL FindUser(HWND hwndList,TCHAR * pszName,DWORD dwType);
// Functions in REMOVE.C
BOOL OnRemove(HWND hwndApp,HWND hwndList);
// Functions in LOAD.C
BOOL LoadFile(TCHAR * pszFilename,HWND hwndApp,HWND hwndList,BOOL fDisplayErrors);
BOOL LoadFromRegistry(HWND hwndApp,HWND hwndList,BOOL fDisplayErrors);
// Functions in SAVE.C
BOOL SaveFile(TCHAR * pszFilename,HWND hwndApp,HWND hwndList);
BOOL SaveToRegistry(HWND hwndApp,HWND hwndList);
// Functions in FILECMD.C
BOOL OnOpen(HWND hwndApp,HWND hwndList);
BOOL OnOpen_W(HWND hwndApp,HWND hwndList,TCHAR * pszFilename);
BOOL OnNew(HWND hwndApp,HWND hwndList);
BOOL OnSave(HWND hwndApp,HWND hwndList);
BOOL OnSaveAs(HWND hwndApp,HWND hwndList);
BOOL OnClose(HWND hwndApp,HWND hwndList);
BOOL QueryForSave(HWND hwndApp,HWND hwndList);
UINT CreateHiveFile(TCHAR * pszFilename);
BOOL OnOpenTemplate(HWND hwndOwner,HWND hwndApp);
BOOL OnOpenRegistry(HWND hwndApp,HWND hwndList,BOOL fDisplayErrors);
VOID PrependValueName(TCHAR * pszValueName,DWORD dwFlags,TCHAR * pszNewValueName,
UINT cbNewValueName);
// Functions in REGISTRY.C
BOOL RestoreStateFromRegistry(HWND hWnd);
BOOL SaveStateToRegistry(HWND hWnd);
VOID LoadFileMenuShortcuts(HMENU hMenu);
VOID SaveFileMenuShortcuts(HMENU hMenu);
// Functions in INFMGR.C
BOOL GetATemplateFile(HWND hWnd);
UINT LoadTemplates(HWND hWnd);
UINT LoadTemplateFile(HWND hWnd,TCHAR * szFilename);
UINT LoadTemplatesFromDlg(HWND hWnd);
UINT PrepareToLoadTemplates();
VOID UnloadTemplates(VOID);
DWORD GetDefaultTemplateFilename(HWND hWnd,TCHAR * szFilename,UINT cbFilename);
// Functions in VIEW.C
VOID EnableMenuItems(HWND hwndApp,DWORD dwState);
VOID SetTitleBar(HWND hwndApp,TCHAR * szFilename);
BOOL ReplaceMenuItem(HWND hWnd,UINT idOld,UINT idNew,UINT idResourceTxt);
VOID AddFileShortcut(HMENU hMenu,TCHAR * pszNewFilename);
VOID SetStatusItemCount(HWND hwndList);
VOID SetViewType(HWND hwndList,DWORD dwView);
VOID CheckViewItem(HWND hwndApp,DWORD dwView);
VOID SetNewView(HWND hwndApp,HWND hwndList,DWORD dwNewView);
// Functions in REGUTIL.C
UINT WriteRegistryDWordValue(HKEY hkeyRoot,TCHAR * pszKeyName,TCHAR * pszValueName,
DWORD dwValue);
UINT ReadRegistryDWordValue(HKEY hkeyRoot,TCHAR * pszKeyName,TCHAR * pszValueName,
DWORD * pdwValue);
UINT WriteRegistryStringValue(HKEY hkeyRoot,TCHAR * pszKeyName,TCHAR * pszValueName,
TCHAR * pszValue, BOOL bExpandable);
UINT ReadRegistryStringValue(HKEY hkeyRoot,TCHAR * pszKeyName,TCHAR * pszValueName,
TCHAR * pszValue,UINT cbValue);
UINT DeleteRegistryValue(HKEY hkeyRoot,TCHAR * pszKeyName,TCHAR * pszValueName);
LONG MyRegDeleteKey(HKEY hkeyRoot,LPTSTR pszSubkey);
LONG MyRegLoadKey(HKEY hKey, LPCTSTR lpSubKey, LPTSTR lpFile);
LONG MyRegUnLoadKey(HKEY hKey, LPCTSTR lpSubKey);
LONG MyRegSaveKey(HKEY hKey, LPCTSTR lpSubKey);
// Functions in OPTIONS.C
BOOL OnTemplateOptions(HWND hwndApp);
// Functions in COPY.C
BOOL OnCopy(HWND hwndApp,HWND hwndList);
BOOL OnPaste(HWND hwndApp,HWND hwndList);
BOOL CanCopy(HWND hwndList);
BOOL CanPaste(HWND hwndList);
UINT GetClipboardUserType(VOID);
// Functions in CONNECT.C
BOOL OnConnect(HWND hwndOwner,HWND hwndList);
BOOL OnDisconnect(HWND hwndOwner);
BOOL RemoteConnect(HWND hwndOwner,TCHAR * pszComputerName,BOOL fDisplayError);
// Functions in LISTBOX.C
VOID ShowListbox(HWND hParent,HGLOBAL hUser,SETTINGS * pSettings,UINT uDataIndex);
// Functions in GROUPPRI.C
BOOL AddGroupPriEntry(TCHAR * pszGroupName);
BOOL RemoveGroupPriEntry(TCHAR * pszGroupName);
UINT LoadGroupPriorityList(HKEY hKeyPriority,HKEY hkeyGroup);
UINT SaveGroupPriorityList(HKEY hKey);
VOID FreeGroupPriorityList( VOID );
BOOL OnGroupPriority(HWND hWnd);
// Functions in UTIL.C
BOOL EnableDlgItem(HWND hDlg,UINT uID,BOOL fEnable);
BOOL IsDlgItemEnabled(HWND hDlg,UINT uID);
int MsgBox(HWND hWnd,UINT nResource,UINT uIcon,UINT uButtons);
int MsgBoxSz(HWND hWnd,LPTSTR szText,UINT uIcon,UINT uButtons);
int MsgBoxParam(HWND hWnd,UINT nResource,TCHAR * szReplaceText,UINT uIcon,UINT uButtons);
LONG AddListboxItem(HWND hDlg,int idControl,TCHAR * szItem);
LONG GetListboxItemText(HWND hDlg,int idControl,UINT nIndex,TCHAR * szText);
LONG SetListboxItemData(HWND hDlg,int idControl,UINT nIndex,LPARAM dwData);
LONG GetListboxItemData(HWND hDlg,int idControl,UINT nIndex);
LONG SetListboxSelection(HWND hDlg,int idControl,UINT nIndex);
LONG GetListboxSelection(HWND hDlg,int idControl);
TCHAR * ResizeBuffer(TCHAR *pBuf,HGLOBAL hBuf,DWORD dwNeeded,DWORD * pdwCurSize);
LPTSTR LoadSz(UINT idString,LPTSTR lpszBuf,UINT cbBuf);
DWORD RoundToDWord(DWORD dwSize);
DWORD ListView_GetItemParm( HWND hwnd, int i );
BOOL StringToNum(TCHAR *szStr,UINT * pnVal);
VOID DisplayStandardError(HWND hwndOwner,TCHAR * pszParam,UINT uMsgID,UINT uErr);
extern DWORD dwAppState;
extern DWORD dwCmdLineFlags;
extern DWORD dwDlgRetCode;
extern TCHAR szAppName[];
// App state bits in dwAppState
#define AS_FILELOADED 0x0001
#define AS_FILEDIRTY 0x0002
#define AS_FILEHASNAME 0x0004
#define AS_CANREMOVE 0x0008
#define AS_CANOPENTEMPLATE 0x0010
#define AS_CANHAVEDOCUMENT 0x0020
#define AS_POLICYFILE 0x0040
#define AS_LOCALREGISTRY 0x0080
#define AS_REMOTEREGISTRY 0x0100
// command line flags
#define CLF_DIALOGMODE 0x0001
#define CLF_USETEMPLATENAME 0x0002
#define CLF_USEPOLICYFILENAME 0x0004
#define CLF_USEWORKSTATIONNAME 0x0008
#define CLF_USEUSERNAME 0x0010
#define COMPUTERNAMELEN 20 // big enough for 20-digit SPX address
extern HKEY hkeyVirtHLM; // virtual HKEY_LOCAL_MACHINE
extern HKEY hkeyVirtHCU; // virtual HKEY_CURRENT_USER
extern UINT nDeletedUsers;
// Useful macros
#define GETNAMEPTR(x) ((TCHAR *) x + x->uOffsetName)
#define GETKEYNAMEPTR(x) ((TCHAR *) x + x->uOffsetKeyName)
#define GETVALUENAMEPTR(x) ((TCHAR *) x + x->uOffsetValueName)
#define GETOBJECTDATAPTR(x) ((TCHAR *) x + x->uOffsetObjectData)
#ifdef DEBUG
extern CHAR szDebugOut[];
#endif