|
|
/****************************** Module Header ******************************\
* Module Name: clmt.h * * Copyright (c) 1985 - 1999, Microsoft Corporation * * Cross Language Migration Tool, main header file * \***************************************************************************/ #ifndef CLMT_H
#define CLMT_H
#include <nt.h>
#include <ntrtl.h>
#include <nturtl.h>
#include <ntlsa.h>
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <userenv.h>
#include <userenvp.h>
#include <setupapi.h>
#include <regstr.h>
#include <shlwapi.h>
#include <shlobj.h>
#include <shlobjp.h>
#include <string.h>
#include <Sddl.h>
#include <assert.h>
#include <tchar.h>
#include <lm.h>
#include <resource.h>
#include <locale.h>
#include <iadmw.h>
#include <sfcapip.h>
#include <Aclapi.h>
#include <aclui.h>
#ifndef NOT_USE_SAFE_STRING
#define STRSAFE_LIB
#include <strsafe.h>
#endif
typedef struct _REG_STRING_REPLACE { DWORD nNumOfElem; DWORD cchUserName; LPTSTR szUserNameLst; DWORD cchSearchString; LPTSTR lpSearchString; //Orignal Multi-String
DWORD cchReplaceString; LPTSTR lpReplaceString; //Replaced Multi-String
DWORD cchAttribList; //String Attribute
LPDWORD lpAttrib; //String Attribute
DWORD cchFullStringList; LPTSTR lpFullStringList; DWORD cchMaxStrLen; //Max String Length in search and replac strings
} REG_STRING_REPLACE, *PREG_STRING_REPLACE;
typedef struct value_list { VALENT ve; METADATA_RECORD md; LPTSTR lpPre_valuename; DWORD val_type; DWORD val_attrib; struct value_list *pvl_next; } VALLIST, *PVALLIST;
typedef struct str_list { LPTSTR lpstr; struct str_list *pst_prev; struct str_list *pst_next; } STRLIST, *PSTRLIST;
//struc used for folder renaming
typedef struct { int id; // CSIDL_ value
LPCTSTR pszIdInString; int idsDefault; // string id of default folder name name
LPCTSTR pszValueName; // reg key (not localized)
} FOLDER_INFO;
typedef struct _PROFILE { DWORD dwFlags; DWORD dwInternalFlags; DWORD dwUserPreference; HANDLE hTokenUser; HANDLE hTokenClient; LPTSTR lpUserName; LPTSTR lpProfilePath; LPTSTR lpRoamingProfile; LPTSTR lpDefaultProfile; LPTSTR lpLocalProfile; LPTSTR lpPolicyPath; LPTSTR lpServerName; HKEY hKeyCurrentUser; FILETIME ftProfileLoad; FILETIME ftProfileUnload; LPTSTR lpExclusionList; } USERPROFILE, *LPPROFILE;
// Structure of translation table to map <root key string> to <HKEY value>
typedef struct _STRING_TO_DATA { TCHAR String[MAX_PATH]; HKEY Data; } STRING_TO_DATA, *PSTRING_TO_DATA;
typedef struct _DENIED_ACE_LIST { DWORD dwAclSize; ACCESS_DENIED_ACE *pace; LPTSTR lpObjectName; struct _DENIED_ACE_LIST *previous; struct _DENIED_ACE_LIST *next; } DENIED_ACE_LIST, *LPDENIED_ACE_LIST;
//our main version is 1.0 and then followed by build number(Major/Minor)
//used in res.rc
#define VER_FILEVERSION 1,0,50,01
#define VER_FILEVERSION_STR "1.0.0050.1"
//used in INF file to specify the file/folder move type
#define TYPE_DIR_MOVE 0 //move a folder
#define TYPE_FILE_MOVE 1 //move a file
#define TYPE_SFPFILE_MOVE 2 //move a file which is system protected
//used in INF file to specify registry rename type
#define TYPE_VALUE_RENAME 0 //rename registry data renaming
#define TYPE_VALUENAME_RENAME 1 //rename registry name renaming
#define TYPE_KEY_RENAME 2 //rename registry key renaming
#define TYPE_SERVICE_MOVE 3 //rename a service name
//our inf file name
#define CLMTINFFILE TEXT("clmt.inf")
//section name in the inf file listed user/group account we need to rename
#define USERGRPSECTION TEXT("UserGrp.ObjectRename")
//string buffer size for multisz string
#define MULTI_SZ_BUF_DELTA 3*1024
#define DWORD_BUF_DELTA 1024
//following are section (or part of) constants
#define SHELL_FOLDER_PREFIX TEXT("ShellFolder.")
#define SHELL_FOLDER_REGISTRY TEXT("Registry")
#define SHELL_FOLDER_FOLDER TEXT("Folder")
#define SHELL_FOLDER_LONGPATH_TEMPLATE TEXT("LongPathNameTemplate")
#define SHELL_FOLDER_SHORTPATH_TEMPLATE TEXT("ShortPathNameTemplate")
// registry value name for
// HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList
#define PROFILES_DIRECTORY TEXT("ProfilesDirectory")
#define DEFAULT_USER TEXT("Default User")
//out backup direcory name(located in %windir%\$CLMT_BACKUP$
//used for saving files that we need to delete and also the INF file
#define CLMT_BACKUP_DIR TEXT("$CLMT_BACKUP$")
//registry key for we created for saving our tools running status
//it's in HKEY_LOCAL_MACHINE\SYSTEM\System\CrossLanguageMigration
#define CLMT_REGROOT TEXT("System\\CrossLanguageMigration")
#define CLMT_RUNNING_STATUS TEXT("InProgress")
#define CLMT_OriginalInstallLocale TEXT("OriginalInstallLocale")
//Flag used to specify what the current running status
#define CLMT_DOMIG 0x01 // we are doing migration
#define CLMT_UNDO_PROGRAM_FILES 0x02 // we are undoing %programfiles% changes
#define CLMT_UNDO_APPLICATION_DATA 0x04 // we are undoing %userprofile%application data changes
#define CLMT_UNDO_ALL 0x08 // we are undoing what we changed
#define CLMT_CURE_PROGRAM_FILES 0x10 // create symbolic link between english and localized folder
// for those folder that will affect functionality(eg.%programfiles%)
#define CLMT_REMINDER 0x20 // reminder user to convert to NTFS....
#define CLMT_CLEANUP_AFTER_UPGRADE 0x40 // cleaning up the machine after upgrade to .NET
#define CLMT_CURE_ALL 0x80 // create symbolic link between english and localized folder for all folders we changed
#define CLMT_CURE_AND_CLEANUP 0x100 // This to enable /CURE and /FINAL to run independently on machine with FAT
#define CLMT_DOMIG_DONE (0xFF00 | CLMT_DOMIG) // migration is done
#define CLMT_UNDO_PROGRAM_FILES_DONE (0xFF00 | CLMT_UNDO_PROGRAM_FILES) //undoing %programfiles%
#define CLMT_UNDO_APPLICATION_DATA_DONE (0xFF00 | CLMT_UNDO_APPLICATION_DATA) //undoing %userprofile%application data is done
#define CLMT_UNDO_ALL_DONE (0xFF00 | CLMT_UNDO_ALL)//undoing what we changed is done
// Constants used to keep track of machine state
#define CLMT_STATE_ORIGINAL 1 // Original Win2K machine
#define CLMT_STATE_PROGRAMFILES_UNDONE 10 // CLMT'ed machine is undone the program files operation
#define CLMT_STATE_APPDATA_UNDONE 11 // CLMT'ed machine is undone the application data operation
#define CLMT_STATE_MIGRATION_DONE 100 // Machine has been CLMT'ed
#define CLMT_STATE_UPGRADE_DONE 200 // CLMT'ed machine has been Upgraded to .NET
#define CLMT_STATE_PROGRAMFILES_CURED 400 // Machine has been CLMT'ed and Hardlink is created
#define CLMT_STATE_FINISH 800 // .NET machine has been cleaned up by CLMT
// Constants used to identify status of CLM tool
#define CLMT_STATUS_ANALYZING_SYSTEM 0
#define CLMT_STATUS_MODIFYING_SYSTEM 1
// Constants used by lstrXXX functions
#define LSTR_EQUAL 0
// Calcalate array size (in number of elements)
#define ARRAYSIZE(s) (sizeof(s) / (sizeof(s[0])))
// Macro used by CompareString() API
#define LOCALE_ENGLISH MAKELCID(MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US), SORT_DEFAULT)
// Macros for heap memory management
#define MEMALLOC(cb) HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, cb)
#define MEMFREE(pv) HeapFree(GetProcessHeap(), 0, pv);
#define MEMREALLOC(pv, cb) HeapReAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, pv, cb)
// Locale ID constants
#define LCID_SWEDISH 0x041d
#define LCID_PORTUGUESE_BRAZILIAN 0x0416
#define LCID_PORTUGUESE_STANDARD 0x0816
#define LCID_HUNGARIAN 0x040e
#define LCID_CZECH 0x0405
#define LCID_TURKISH 0x041f
//Private CSIDL used in shell folder renaming
#define CSIDL_LOCAL_SETTINGS 0x7f
#define CSIDL_COMMON_ACCESSORIES 0x7e
#define CSIDL_ACCESSORIES 0x7d
#define CSIDL_USER_PROFILE 0x7c
#define CSIDL_PROFILES_DIRECTORY 0x7b
#define CSIDL_PF_ACCESSORIES 0x7a
#define CSIDL_COMMON_ACCESSORIES_ACCESSIBILITY 0x79
#define CSIDL_COMMON_ACCESSORIES_ENTERTAINMENT 0x78
#define CSIDL_COMMON_ACCESSORIES_SYSTEM_TOOLS 0x77
#define CSIDL_COMMON_ACCESSORIES_COMMUNICATIONS 0x76
#define CSIDL_COMMON_ACCESSORIES_MS_SCRIPT_DEBUGGER 0x75
#define CSIDL_COMMON_WINDOWSMEDIA 0x74
#define CSIDL_COMMON_COVERPAGES 0x73
#define CSIDL_COMMON_RECEIVED_FAX 0x72
#define CSIDL_COMMON_SENT_FAX 0x71
#define CSIDL_COMMON_FAX 0x70
#define CSIDL_FAVORITES_LINKS 0x6e
#define CSIDL_FAVORITES_MEDIA 0x6d
#define CSIDL_ACCESSORIES_ACCESSIBILITY 0x6c
#define CSIDL_ACCESSORIES_SYSTEM_TOOLS 0x6b
#define CSIDL_ACCESSORIES_ENTERTAINMENT 0x6a
#define CSIDL_ACCESSORIES_COMMUNICATIONS 0x69
#define CSIDL_ACCESSORIES_COMMUNICATIONS_HYPERTERMINAL 0x68
#define CSIDL_COMMON_ACCESSORIES_GAMES 0x67
#define CSIDL_QUICKLAUNCH 0x66
#define CSIDL_COMMON_COMMONPROGRAMFILES_SERVICES 0x65
#define CSIDL_COMMON_PROGRAMFILES_ACCESSARIES 0x64
#define CSIDL_COMMON_PROGRAMFILES_WINNT_ACCESSARIES 0x63
#define CSIDL_USERNAME_IN_USERPROFILE 0x62
#define CSIDL_UAM_VOLUME 0x61
#define CSIDL_COMMON_SHAREDTOOLS_STATIONERY 0x60
#define CSIDL_NETMEETING_RECEIVED_FILES 0x5f
#define CSIDL_COMMON_NETMEETING_RECEIVED_FILES 0x5e
#define CSIDL_COMMON_ACCESSORIES_COMMUNICATIONS_FAX 0x5d
#define CSIDL_FAX_PERSONAL_COVER_PAGES 0x5c
#define CSIDL_FAX 0x5b
#define USER_SHELL_FOLDER TEXT("Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\User Shell Folders")
#define c_szDot TEXT(".")
#define c_szDotDot TEXT("..")
#define c_szStarDotStar TEXT("*.*")
#define TEXT_WINSTATION_KEY TEXT("SYSTEM\\CurrentControlSet\\Control\\Terminal Server\\WinStations")
#define TEXT_RUN_KEY TEXT("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run")
#define TEXT_CLMT_RUN_VALUE TEXT("CLMT")
//Type specify registr change used in regfind.c and ReplaceValueSettings in utils.c
#define REG_CHANGE_VALUENAME 1
#define REG_CHANGE_VALUEDATA 2
#define REG_CHANGE_KEYNAME 4
#define MAXDOMAINLENGTH MAX_PATH
#define CONSTANT_REG_VALUE_DATA_RENAME 0 //indicates Registry Value Data Rename
#define CONSTANT_REG_VALUE_NAME_RENAME 1 //indicates Registry Value Name Rename
#define CONSTANT_REG_KEY_RENAME 2 //indicates Registry Key Rename
#define REG_PERSYS_UPDATE TEXT("REG.Update.Sys")
#define REG_PERUSER_UPDATE_PREFIX TEXT("REG.Update.")
#define APPLICATION_DATA_METABASE TEXT("$MetaBase")
#define PROFILE_PATH_READ 0
#define PROFILE_PATH_WRITE 1
#define DS_OBJ_PROPERTY_UPDATE TEXT("DS_OBJ_PROPERTY_UPDATE")
#define FOLDER_CREATE_HARDLINK TEXT("Folder.HardLink")
#define FOLDER_UPDATE_HARDLINK TEXT("Folder.HardLink.UPDATE")
#define TEXT_SERVICE_STATUS_SECTION TEXT("Services.ConfigureStatus")
#define TEXT_SERVICE_STATUS_CLEANUP_SECTION TEXT("Services.ConfigureStatus.Cleanup")
#define TEXT_SERVICE_STARTUP_SECTION TEXT("Services.ConfigureStartupType")
#define TEXT_SERVICE_STARTUP_CLEANUP_SECTION TEXT("Services.ConfigureStartupType.Cleanup")
#ifdef __cplusplus
extern "C" { #endif
//global variables declartion, see detail in globals.c
extern HINSTANCE ghInst; extern TCHAR g_szToDoINFFileName[MAX_PATH]; extern DWORD g_dwKeyIndex; extern HINF g_hInfDoItem; extern FOLDER_INFO c_rgFolderInfo[]; extern REG_STRING_REPLACE g_StrReplaceTable,g_StrReplaceTablePerUser; extern BOOL g_bBeforeMig; extern DWORD g_dwRunningStatus; extern BOOL g_fRunWinnt32; extern BOOL g_fNoAppChk; extern BOOL g_fUseInf; extern TCHAR g_szInfFile[MAX_PATH]; extern HINF g_hInf; extern HANDLE g_hMutex; extern HANDLE g_hInstance ; extern HANDLE g_hInstDll; extern TCHAR g_szChangeLog[MAX_PATH]; extern DWORD g_dwIndex; extern LPDENIED_ACE_LIST g_DeniedACEList;
//BUGBUG xiaoz
static TCHAR g_cszProfileImagePath[] = TEXT("ProfileImagePath"); static TCHAR g_cszProfileList[] = TEXT("Software\\Microsoft\\Windows NT\\CurrentVersion\\ProfileList");
//
//From regfind.c
//
HRESULT RegistryAnalyze(HKEY,LPTSTR,LPTSTR,PREG_STRING_REPLACE,LPTSTR,DWORD,LPTSTR,BOOL);
//
//From iis.cpp
//
HRESULT MetabaseAnalyze (LPTSTR,PREG_STRING_REPLACE,BOOL); HRESULT SetMetabaseValue (LPCTSTR, LPCTSTR, DWORD, LPCTSTR); HRESULT BatchUpateIISMetabase(HINF, LPTSTR); HRESULT MigrateMetabaseSettings(HINF);
//
// From Utils.c
//
HRESULT ConstructUIReplaceStringTable(LPTSTR, LPTSTR,PREG_STRING_REPLACE); HRESULT Sz2MultiSZ(IN OUT LPTSTR, IN TCHAR); HRESULT AddHardLinkEntry(LPTSTR, LPTSTR, LPTSTR, LPTSTR, LPTSTR,LPTSTR); HRESULT GetSharePath(LPTSTR, LPTSTR, PDWORD); HRESULT FRSUpdate(); HRESULT Ex2000Update(); LONG SDBCleanup(OUT LPTSTR, IN DWORD, OUT LPBOOL); HRESULT SetProtectedRenamesFlag(BOOL); HRESULT DoCriticalWork (); HRESULT IsNTFS(IN LPTSTR, OUT BOOL*); HRESULT IsSysVolNTFS(OUT BOOL*); HRESULT CreateAdminsSd( PSECURITY_DESCRIPTOR*); int MyStrCmpIW(LPCWSTR, LPCWSTR ); int MyStrCmpIA(LPCSTR, LPCSTR ); #ifdef UNICODE
#define MyStrCmpI MyStrCmpIW
#else
#define MyStrCmpI MyStrCmpIA
#endif // !UNICODE
HRESULT ReconfigureServiceStartType(IN LPCTSTR,IN DWORD,IN DWORD,IN DWORD) ; HRESULT AddExtraQuoteEtc(LPTSTR,LPTSTR*); HRESULT CopyMyselfTo(LPTSTR); HRESULT SetRunOnceValue (IN LPCTSTR,IN LPCTSTR); HRESULT SetRunValue(LPCTSTR, LPCTSTR); HRESULT LogMachineInfo(); BOOL StopService(IN LPCTSTR pServiceName,IN DWORD dwMaxWait); HRESULT GetSIDFromName(IN LPTSTR,OUT PSID *); BOOL ConcatenatePaths (LPTSTR, LPCTSTR, UINT); UINT StrToUInt (LPTSTR); BOOL INIFile_ChangeSectionName (LPCTSTR, LPCTSTR, LPCTSTR); BOOL INIFile_IsSectionExist(LPCTSTR, LPCTSTR); void IntToString (DWORD, LPTSTR); UINT GetInstallLocale (VOID); BOOL IsDirExisting (LPTSTR); LONG IsDirExisting2(LPTSTR, PBOOL); BOOL IsFileFolderExisting (LPTSTR); BOOL RenameDirectory (LPTSTR, LPTSTR); HRESULT UpdateINFFilePerUser(LPCTSTR, LPCTSTR, LPCTSTR, BOOL); HRESULT UpdateINFFileSys(LPTSTR); HRESULT MyMoveDirectory(LPTSTR,LPTSTR,BOOL,BOOL,BOOL,DWORD); HRESULT GetInfFilePath(LPTSTR, SIZE_T); HRESULT GetInfFromResource(LPCTSTR); BOOL ReplaceString(LPCTSTR, LPCTSTR, LPCTSTR, LPTSTR, size_t, LPCTSTR, LPCTSTR, LPDWORD, BOOL); BOOL IsStrInMultiSz(LPCTSTR,LPCTSTR); BOOL MultiSzSubStr(LPTSTR,LPTSTR); DWORD MultiSzLen(LPCTSTR); LPCTSTR MultiSzTok(LPCTSTR); BOOL CmpMultiSzi(LPCTSTR,LPCTSTR); LPTSTR GetStrInMultiSZ(DWORD, LPCTSTR); DWORD StrNumInMultiSZ(LPCTSTR, LPCTSTR); HRESULT GetSetUserProfilePath(LPCTSTR,LPTSTR,size_t,UINT,UINT); void ReStartSystem(UINT); int DoMessageBox(HWND, UINT, UINT, UINT); HRESULT StringMultipleReplacement(LPCTSTR,LPCTSTR,LPCTSTR,LPTSTR,size_t); BOOL Str2KeyPath(LPTSTR,PHKEY,LPTSTR*); BOOL HKey2Str(HKEY, LPTSTR,size_t); HRESULT MyMoveFile(LPCTSTR, LPCTSTR, BOOL, BOOL); BOOL AppendSzToMultiSz(IN LPCTSTR,IN OUT LPTSTR *,IN OUT PDWORD); BOOL AddItemToStrRepaceTable(LPTSTR,LPTSTR,LPTSTR,LPTSTR,DWORD,PREG_STRING_REPLACE); void PrintMultiSz(LPTSTR); BOOL StringValidationCheck(LPCTSTR, LPCTSTR, LPCTSTR, LPCTSTR, LPDWORD, DWORD); BOOL ReverseStrCmp(LPCTSTR, LPCTSTR); BOOL ReplaceMultiMatchInString(LPTSTR, LPTSTR, size_t, DWORD, PREG_STRING_REPLACE, LPDWORD, BOOL); BOOL ComputeLocalProfileName(LPCTSTR, LPCTSTR, LPTSTR, size_t, UINT); void UpdateProgress(); BOOL IsAdmin(); HRESULT ReplaceValueSettings (LPTSTR, LPTSTR, DWORD, LPTSTR, DWORD, PREG_STRING_REPLACE, PVALLIST*, LPTSTR, BOOL); LPTSTR ReplaceSingleString (LPTSTR, DWORD, PREG_STRING_REPLACE, LPTSTR, LPDWORD, BOOL); DWORD AddNodeToList (PVALLIST, PVALLIST*); DWORD RemoveValueList (PVALLIST*); DWORD GetMaxStrLen (PREG_STRING_REPLACE); BOOL DoesUserHavePrivilege(PTSTR); BOOL EnablePrivilege(PTSTR,BOOL); BOOL UnProtectSFPFiles(LPTSTR,LPDWORD); HRESULT MyGetShortPathName(LPCTSTR,LPCTSTR,LPCTSTR,LPTSTR,DWORD); BOOL Str2KeyPath2(LPCTSTR, PHKEY, LPCTSTR*); DWORD Str2REG(LPCTSTR); BOOL GetBackupDir(LPCTSTR,LPTSTR, size_t,BOOL); HRESULT ReplaceCurrentControlSet(LPTSTR); HRESULT AddRegKeyRename(LPTSTR, LPTSTR, LPTSTR, LPTSTR); HRESULT AddRegValueRename(LPTSTR, LPTSTR, LPTSTR, LPTSTR, LPTSTR, DWORD, DWORD, LPTSTR); HRESULT AddFolderRename(LPTSTR, LPTSTR,DWORD, LPTSTR); DWORD GetMaxMatchNum (LPTSTR,PREG_STRING_REPLACE); HRESULT InfGenerateStringsSection(LPCTSTR, LPTSTR, SIZE_T); HRESULT InfCopySectionWithPrefix(LPCTSTR, LPCTSTR, LPCTSTR, LPCTSTR); HRESULT MultiSZ2String(IN LPTSTR, IN TCHAR,OUT LPTSTR *); DWORD MultiSZNumOfString(IN LPTSTR ); void FreePointer(void *); HRESULT GetCLMTStatus(PDWORD pdwRunStatus); HRESULT SetCLMTStatus(DWORD dwRunStatus); HRESULT GetSavedInstallLocale(LCID *plcid); HRESULT SaveInstallLocale(void); HRESULT MultiSZ2String(IN LPTSTR, IN TCHAR,OUT LPTSTR *); DWORD MultiSZNumOfString(IN LPTSTR ); void BoostMyPriority(void); HRESULT SetInstallLocale(LCID); HRESULT MyCreateHardLink(LPCTSTR, LPCTSTR); BOOL CreateSymbolicLink(LPTSTR,LPTSTR,BOOL); BOOL GetSymbolicLink(LPTSTR, LPTSTR, DWORD);
HRESULT MergeDirectory(LPCTSTR, LPCTSTR); BOOL CALLBACK DoCriticalDlgProc(HWND, UINT, WPARAM, LPARAM); HRESULT RenameRegRoot (LPCTSTR, LPTSTR, DWORD, LPCTSTR, LPCTSTR); DWORD AdjustRegSecurity (HKEY, LPCTSTR, LPCTSTR, BOOL); HRESULT GetFirstNTFSDrive(LPTSTR, DWORD); HRESULT DuplicateString(LPTSTR *, LPDWORD, LPCTSTR); HRESULT DeleteDirectory(LPCTSTR); HRESULT MyDeleteFile(LPCTSTR); HRESULT GetDCInfo(PBOOL, LPTSTR, PDWORD); VOID RemoveSubString(LPTSTR, LPCTSTR);
//
//utils2.cpp
//
BOOL IsServiceRunning(LPCTSTR); HRESULT AddNeedUpdateLnkFile(LPTSTR, PREG_STRING_REPLACE); HRESULT UpdateSecurityTemplates(LPTSTR, PREG_STRING_REPLACE); HRESULT BatchFixPathInLink(HINF hInf,LPTSTR lpszSection); HRESULT RenameRDN(LPTSTR, LPTSTR, LPTSTR); HRESULT PropertyValueHelper(LPTSTR, LPTSTR, LPTSTR*, LPTSTR); HRESULT BatchINFUpdate(HINF);
//
//From table.c
//
BOOL InitStrRepaceTable(void); void DeInitStrRepaceTable(void);
//
// From loopuser.c
//
#ifdef STRICT
typedef HRESULT (CALLBACK *USERENUMPROC)(HKEY,LPTSTR,LPTSTR,LPTSTR); #else // !STRICT
typedef FARPROC USERENUMPROC; #endif // !STRICT
BOOL LoopUser(USERENUMPROC);
//
// From user.c
//
#ifdef STRICT
typedef HRESULT (CALLBACK *PROFILEENUMPROC)(LPCTSTR, LPCTSTR); #else // !STRICT
typedef FARPROC PROFILEENUMPROC; #endif // !STRICT
HRESULT EnumUserProfile(PROFILEENUMPROC); HRESULT AnalyzeMiscProfilePathPerUser(LPCTSTR, LPCTSTR); HRESULT ResetMiscProfilePathPerUser(LPCTSTR, LPCTSTR); LPTSTR ReplaceLocStringInPath(LPCTSTR, BOOL); HRESULT GetFQDN(LPTSTR, LPTSTR, LPTSTR *);
//
// From inf.c
//
HRESULT UpdateDSObjProp(HINF, LPTSTR); HRESULT FinalUpdateRegForUser(HKEY, LPTSTR, LPTSTR, LPTSTR); HRESULT UpdateRegPerUser(HKEY, LPTSTR, LPTSTR,LPTSTR); BOOL LnkFileUpdate(LPTSTR); BOOL SecTempUpdate(LPTSTR); HRESULT StopServices(HINF); HRESULT RegUpdate(HINF hInf, HKEY hKey , LPTSTR lpszUsersid); BOOL LookUpStringInTable(PSTRING_TO_DATA, LPCTSTR, PHKEY); HRESULT UsrGrpAndDoc_and_SettingsRename(HINF,BOOL); HRESULT EnsureDoItemInfFile(LPTSTR,size_t); HRESULT INFCreateHardLink(HINF,LPTSTR,BOOL); HRESULT FolderMove(HINF, LPTSTR,BOOL); HRESULT ResetServiceStatus(LPCTSTR, DWORD, DWORD); HRESULT AnalyzeServicesStartUp(HINF, LPCTSTR); HRESULT AnalyzeServicesStatus(HINF, LPCTSTR); HRESULT ResetServicesStatus(HINF, LPCTSTR); HRESULT ResetServicesStartUp(HINF, LPCTSTR); VOID DoServicesAnalyze(); HRESULT INFVerifyHardLink(HINF,LPTSTR);
//
//From DLL.C
//
BOOL DoMigPerSystem (VOID); HRESULT MigrateShellPerUser(HKEY, LPCTSTR, LPCTSTR,LPTSTR); LONG DoMig(DWORD); BOOL InitGlobals(DWORD);
//
//From Registry.C
//
LONG MyRegSetDWValue(HKEY, LPCTSTR, LPCTSTR, LPCTSTR); LONG RegResetValue(HKEY, LPCTSTR, LPCTSTR, DWORD, LPCTSTR, LPCTSTR, DWORD, LPCTSTR); LONG RegResetValueName(HKEY, LPCTSTR, LPCTSTR, LPCTSTR, LPCTSTR); LONG RegResetKeyName(HKEY, LPCTSTR, LPCTSTR, LPCTSTR); LONG RegGetValue(HKEY,LPTSTR,LPTSTR,LPDWORD,LPBYTE,LPDWORD); LONG RegRenameValueName(HKEY, LPCTSTR, LPCTSTR); LONG SetRegistryValue(HKEY, LPCTSTR, LPCTSTR, DWORD, LPBYTE, DWORD); LONG GetRegistryValue(HKEY, LPCTSTR, LPCTSTR, LPBYTE, LPDWORD); HRESULT MigrateRegSchemesPerSystem(HINF); HRESULT MigrateRegSchemesPerUser(HKEY, LPCTSTR, LPCTSTR, LPCTSTR); LONG My_QueryValueEx(HKEY, LPCTSTR, LPDWORD, LPDWORD, LPBYTE, LPDWORD); HRESULT SetSectionName (LPTSTR, LPTSTR *); HRESULT ReadFieldFromContext(PINFCONTEXT, LPWSTR[], DWORD, DWORD);
//
//From enumfile.c
//
typedef FARPROC ENUMPROC;
#ifdef STRICT
typedef BOOL (CALLBACK *FILEENUMPROC)(LPTSTR); #else // !STRICT
typedef FARPROC FILEENUMPROC; #endif // !STRICT
BOOL MyEnumFiles(LPTSTR, LPTSTR, FILEENUMPROC);
//
//for log.c
//
typedef enum { dlNone = 0, dlPrint, dlFail, dlError, dlWarning, dlInfo
} DEBUGLEVEL;
typedef struct _LOG_REPORT { DWORD dwMsgNum; DWORD dwFailNum; DWORD dwErrNum; DWORD dwWarNum; DWORD dwInfNum; } LOG_REPORT;
#define DEBUG_SPEW
extern FILE *pLogFile; extern LOG_REPORT g_LogReport;
//define debug area
#define DEBUG_ALL 0x0
#define DEBUG_APPLICATION 0x10
#define DEBUG_REGISTRY 0x20
#define DEBUG_SHELL 0x30
#define DEBUG_PROFILE 0x40
#define DEBUG_INF_FILE 0x80
#define APPmsg (DEBUG_APPLICATION | dlPrint)
#define APPfail (DEBUG_APPLICATION | dlFail)
#define APPerr (DEBUG_APPLICATION | dlError)
#define APPwar (DEBUG_APPLICATION | dlWarning)
#define APPinf (DEBUG_APPLICATION | dlInfo)
#define REGmsg (DEBUG_REGISTRY | dlPrint)
#define REGfail (DEBUG_REGISTRY | dlFail)
#define REGerr (DEBUG_REGISTRY | dlError)
#define REGwar (DEBUG_REGISTRY | dlWarning)
#define REGinf (DEBUG_REGISTRY | dlInfo)
#define SHLmsg (DEBUG_SHELL | dlPrint)
#define SHLfail (DEBUG_SHELL | dlFail)
#define SHLerr (DEBUG_SHELL | dlError)
#define SHLwar (DEBUG_SHELL | dlWarning)
#define SHLinf (DEBUG_SHELL | dlInfo)
#define PROmsg (DEBUG_PROFILE | dlPrint)
#define PROfail (DEBUG_PROFILE | dlFail)
#define PROerr (DEBUG_PROFILE | dlError)
#define PROwar (DEBUG_PROFILE | dlWarning)
#define PROinf (DEBUG_PROFILE | dlInfo)
#define INFmsg (DEBUG_INF_FILE | dlPrint)
#define INFfail (DEBUG_INF_FILE | dlFail)
#define INFerr (DEBUG_INF_FILE | dlError)
#define INFwar (DEBUG_INF_FILE | dlWarning)
#define INFinf (DEBUG_INF_FILE | dlInfo)
#define DPF DebugPrintfEx
#define LOG_FILE_NAME TEXT("\\debug\\clmt.log")
void DebugPrintfEx(DWORD dwDetail, LPWSTR pszFmt, ...); HRESULT InitDebugSupport(DWORD); void CloseDebug(void); HRESULT InitChangeLog(VOID); HRESULT AddFileChangeLog(DWORD, LPCTSTR, LPCTSTR); HRESULT AddServiceChangeLog(LPCTSTR, DWORD, DWORD); HRESULT AddUserNameChangeLog(LPCTSTR, LPCTSTR); BOOL GetUserNameChangeLog(LPCTSTR, LPTSTR, DWORD);
//
// From shell.c
//
HRESULT DoShellFolderRename(HINF, HKEY, LPTSTR); HRESULT FixFolderPath(INT, HKEY ,HINF, LPTSTR, BOOL );
//
// From criteria.c
//
BOOL CheckSystemCriteria(VOID); HRESULT CheckCLMTStatus(LPDWORD, LPDWORD, PUINT); HRESULT CLMTGetMachineState(LPDWORD); HRESULT CLMTSetMachineState(DWORD); BOOL IsNT5(VOID); BOOL IsDotNet(VOID); BOOL IsNEC98(VOID); BOOL IsIA64(VOID); BOOL IsDomainController(VOID); BOOL IsOnTSClient(VOID); BOOL IsTSInstalled(VOID); BOOL IsTSConnectionEnabled(VOID); BOOL IsTSServiceRunning(VOID); BOOL IsOtherSessionOnTS(VOID); BOOL IsUserOKWithCheckUpgrade(VOID); HRESULT DisableWinstations(DWORD, LPDWORD); BOOL DisplayTaskList(); INT ShowStartUpDialog(); BOOL IsOneInstance(VOID); BOOL CheckAdminPrivilege(VOID); VOID ShowReadMe();
//
// From aclmgmt.cpp
//
DWORD AdjustObjectSecurity (LPTSTR, SE_OBJECT_TYPE, BOOL); HRESULT IsObjectAccessiablebyLocalSys( LPTSTR lpObjectName, SE_OBJECT_TYPE ObjectType, PBOOL pbCanAccess);
//
// From outlook.cpp
//
HRESULT UpdatePSTpath(HKEY, LPTSTR, LPTSTR, LPTSTR, PREG_STRING_REPLACE);
//
// From config16.c
//
BOOL Remove16bitFEDrivers(void);
#ifdef __cplusplus
} // extern "C"
#endif
#endif
|