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.
148 lines
3.6 KiB
148 lines
3.6 KiB
/*++
|
|
|
|
Copyright (c) 2000 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
CorrectPathChangesBase.cpp
|
|
|
|
Abstract:
|
|
Several paths were changed between Win9x and WinNT. This routine defines
|
|
the CorrectPathChangesBase routines that is called with a Win9x path and returns
|
|
the corresponding WinNT path.
|
|
|
|
History:
|
|
|
|
03-Mar-00 robkenny Converted CorrectPathChanges.cpp to this class.
|
|
08/14/2001 robkenny Inserted inside the ShimLib namespace.
|
|
|
|
--*/
|
|
#pragma once
|
|
|
|
#include "ShimHook.h"
|
|
#include "ShimLib.h"
|
|
#include "CharVector.h"
|
|
|
|
|
|
namespace ShimLib
|
|
{
|
|
|
|
class StringPairW
|
|
{
|
|
public:
|
|
WCHAR lpOld[MAX_PATH];
|
|
DWORD dwLenOld;
|
|
|
|
WCHAR lpNew[MAX_PATH];
|
|
DWORD dwLenNew;
|
|
|
|
StringPairW(const WCHAR * lpszOld, const WCHAR * lpszNew)
|
|
{
|
|
dwLenOld = wcslen(lpszOld);
|
|
SafeStringCopyW(lpOld, MAX_PATH, lpszOld, dwLenOld + 1);
|
|
dwLenNew = wcslen(lpszNew);
|
|
SafeStringCopyW(lpNew, MAX_PATH, lpszNew, dwLenNew + 1);
|
|
}
|
|
};
|
|
|
|
class EnvironmentValues : public VectorT<StringPairW>
|
|
{
|
|
protected:
|
|
BOOL bInitialized;
|
|
|
|
public:
|
|
EnvironmentValues();
|
|
~EnvironmentValues();
|
|
|
|
void Initialize();
|
|
|
|
WCHAR * ExpandEnvironmentValueW(const WCHAR * lpOld);
|
|
char * ExpandEnvironmentValueA(const char * lpOld);
|
|
|
|
void AddEnvironmentValue(const WCHAR * lpOld, const WCHAR * lpNew);
|
|
|
|
enum eAddNameEnum
|
|
{
|
|
eIgnoreName = 0,
|
|
eAddName = 1,
|
|
};
|
|
enum eAddNoDLEnum
|
|
{
|
|
eIgnoreNoDL = 0,
|
|
eAddNoDL = 1,
|
|
};
|
|
|
|
void AddAll_CSIDL();
|
|
void Add_Variants(const WCHAR * lpEnvName, const WCHAR * lpEnvValue, eAddNameEnum eName, eAddNoDLEnum eNoDL);
|
|
void Add_CSIDL(const WCHAR * lpEnvName, int nFolder, eAddNameEnum eName, eAddNoDLEnum eNoDL);
|
|
};
|
|
|
|
class CorrectPathChangesBase
|
|
{
|
|
protected:
|
|
|
|
EnvironmentValues * lpEnvironmentValues;
|
|
DWORD dwKnownPathFixesCount;
|
|
StringPairW * lpKnownPathFixes;
|
|
|
|
BOOL bInitialized;
|
|
BOOL bEnabled;
|
|
|
|
CRITICAL_SECTION csCritical;
|
|
|
|
protected:
|
|
virtual void InitializeCorrectPathChanges();
|
|
virtual void InitializePathFixes();
|
|
virtual void InitializeEnvironmentValuesW();
|
|
|
|
void AddEnvironmentValue(const WCHAR * lpOld, const WCHAR * lpNew);
|
|
void InsertPathChangeW( const WCHAR * lpOld, const WCHAR * lpNew);
|
|
|
|
void EnterCS();
|
|
void LeaveCS();
|
|
|
|
public:
|
|
CorrectPathChangesBase();
|
|
virtual ~CorrectPathChangesBase();
|
|
|
|
virtual WCHAR * ExpandEnvironmentValueW(const WCHAR * lpOld);
|
|
virtual char * ExpandEnvironmentValueA(const char * lpOld);
|
|
|
|
virtual void AddPathChangeW(const WCHAR * lpOld, const WCHAR * lpNew);
|
|
|
|
virtual void AddCommandLineA(const char * lpCommandLine );
|
|
virtual void AddCommandLineW(const WCHAR * lpCommandLine );
|
|
|
|
virtual void AddFromToPairW(const WCHAR * lpFromToPair );
|
|
|
|
virtual char * CorrectPathAllocA(const char * str);
|
|
virtual WCHAR * CorrectPathAllocW(const WCHAR * str);
|
|
|
|
inline void Enable(BOOL enable);
|
|
};
|
|
|
|
|
|
/*++
|
|
Enable (or disable if value is FALSE) changing of paths.
|
|
--*/
|
|
inline void CorrectPathChangesBase::Enable(BOOL isEnabled)
|
|
{
|
|
bEnabled = isEnabled;
|
|
}
|
|
|
|
// Typical path fixes
|
|
class CorrectPathChangesUser : public CorrectPathChangesBase
|
|
{
|
|
protected:
|
|
virtual void InitializePathFixes();
|
|
};
|
|
|
|
// Typical path fixes, moving user directories to All Users
|
|
class CorrectPathChangesAllUser : public CorrectPathChangesUser
|
|
{
|
|
protected:
|
|
|
|
virtual void InitializePathFixes();
|
|
};
|
|
|
|
}; // end of namespace ShimLib
|