+ fix: NP3 installed version: no write access locking on programs dir (.ini redirection)

This commit is contained in:
Rainer Kottenhoff 2020-03-13 00:46:41 +01:00
parent 21684aed8d
commit 0d39bf7749
6 changed files with 62 additions and 32 deletions

View File

@ -1 +1 @@
6
1

View File

@ -1 +1 @@
312
313

View File

@ -75,7 +75,7 @@ constexpr bool SI_Success(const SI_Error rc) noexcept {
// of complete file to preserve integrety of any transaction
// ----------------------------------------------------------------------------
HANDLE AcquireFileLock(LPCWSTR lpIniFilePath, OVERLAPPED& rOvrLpd)
HANDLE AcquireWriteFileLock(LPCWSTR lpIniFilePath, OVERLAPPED& rOvrLpd)
{
HANDLE hFile = CreateFile(lpIniFilePath,
GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE,
@ -89,6 +89,20 @@ HANDLE AcquireFileLock(LPCWSTR lpIniFilePath, OVERLAPPED& rOvrLpd)
// ----------------------------------------------------------------------------
HANDLE AcquireReadFileLock(LPCWSTR lpIniFilePath, OVERLAPPED& rOvrLpd)
{
HANDLE hFile = CreateFile(lpIniFilePath,
GENERIC_READ, FILE_SHARE_READ,
nullptr, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, nullptr);
DWORD const flags = LOCKFILE_EXCLUSIVE_LOCK;
bool const bLocked = LockFileEx(hFile, flags, 0, MAXDWORD, 0, &rOvrLpd);
return (bLocked ? hFile : INVALID_HANDLE_VALUE);
}
// ----------------------------------------------------------------------------
bool ReleaseFileLock(HANDLE hFile, OVERLAPPED& rOvrLpd)
{
bool bUnLocked = true;
@ -116,7 +130,7 @@ extern "C" BOOL LoadIniFile(LPCWSTR lpIniFilePath)
s_INI.SetSpaces(s_bSetSpaces);
s_INI.SetMultiLine(s_bUseMultiLine);
s_INI_Hndl = AcquireFileLock(lpIniFilePath, s_OvrLpd);
s_INI_Hndl = AcquireReadFileLock(lpIniFilePath, s_OvrLpd);
if (s_INI_Hndl == INVALID_HANDLE_VALUE) {
return false;
}
@ -316,7 +330,7 @@ extern "C" size_t IniFileGetString(LPCWSTR lpFilePath, LPCWSTR lpSectionName, LP
CSimpleIni Ini(s_bIsUTF8, s_bUseMultiKey, s_bUseMultiLine);
OVERLAPPED ovrLpd = { 0 };
HANDLE hFile = AcquireFileLock(lpFilePath, ovrLpd);
HANDLE hFile = AcquireReadFileLock(lpFilePath, ovrLpd);
if (hFile == INVALID_HANDLE_VALUE) {
StringCchCopyW(lpReturnedString, cchReturnedString, lpDefault);
return (size_t)lstrlen(lpReturnedString);
@ -344,7 +358,7 @@ extern "C" BOOL IniFileSetString(LPCWSTR lpFilePath, LPCWSTR lpSectionName, LPCW
Ini.SetSpaces(s_bSetSpaces);
OVERLAPPED ovrLpd = { 0 };
HANDLE hFile = AcquireFileLock(lpFilePath, ovrLpd);
HANDLE hFile = AcquireWriteFileLock(lpFilePath, ovrLpd);
if (hFile == INVALID_HANDLE_VALUE) {
return false;
}
@ -370,7 +384,7 @@ extern "C" int IniFileGetInt(LPCWSTR lpFilePath, LPCWSTR lpSectionName, LPCWSTR
CSimpleIni Ini(s_bIsUTF8, s_bUseMultiKey, s_bUseMultiLine);
OVERLAPPED ovrLpd = { 0 };
HANDLE hFile = AcquireFileLock(lpFilePath, ovrLpd);
HANDLE hFile = AcquireReadFileLock(lpFilePath, ovrLpd);
if (hFile == INVALID_HANDLE_VALUE) {
return iDefault;
}
@ -396,7 +410,7 @@ extern "C" BOOL IniFileSetInt(LPCWSTR lpFilePath, LPCWSTR lpSectionName, LPCWSTR
Ini.SetSpaces(s_bSetSpaces);
OVERLAPPED ovrLpd = { 0 };
HANDLE hFile = AcquireFileLock(lpFilePath, ovrLpd);
HANDLE hFile = AcquireWriteFileLock(lpFilePath, ovrLpd);
if (hFile == INVALID_HANDLE_VALUE) {
return false;
}
@ -419,7 +433,7 @@ extern "C" BOOL IniFileGetBool(LPCWSTR lpFilePath, LPCWSTR lpSectionName, LPCWST
CSimpleIni Ini(s_bIsUTF8, s_bUseMultiKey, s_bUseMultiLine);
OVERLAPPED ovrLpd = { 0 };
HANDLE hFile = AcquireFileLock(lpFilePath, ovrLpd);
HANDLE hFile = AcquireReadFileLock(lpFilePath, ovrLpd);
if (hFile == INVALID_HANDLE_VALUE) {
return bDefault;
}
@ -445,7 +459,7 @@ extern "C" BOOL IniFileSetBool(LPCWSTR lpFilePath, LPCWSTR lpSectionName, LPCWST
Ini.SetSpaces(s_bSetSpaces);
OVERLAPPED ovrLpd = { 0 };
HANDLE hFile = AcquireFileLock(lpFilePath, ovrLpd);
HANDLE hFile = AcquireWriteFileLock(lpFilePath, ovrLpd);
if (hFile == INVALID_HANDLE_VALUE) {
return false;
}
@ -469,7 +483,7 @@ extern "C" BOOL IniFileDelete(LPCWSTR lpFilePath, LPCWSTR lpSectionName, LPCWSTR
Ini.SetSpaces(s_bSetSpaces);
OVERLAPPED ovrLpd = { 0 };
HANDLE hFile = AcquireFileLock(lpFilePath, ovrLpd);
HANDLE hFile = AcquireWriteFileLock(lpFilePath, ovrLpd);
if (hFile == INVALID_HANDLE_VALUE) {
return false;
}
@ -492,7 +506,7 @@ extern "C" BOOL IniFileIterateSection(LPCWSTR lpFilePath, LPCWSTR lpSectionName,
CSimpleIni Ini(s_bIsUTF8, s_bUseMultiKey, s_bUseMultiLine);
OVERLAPPED ovrLpd = { 0 };
HANDLE hFile = AcquireFileLock(lpFilePath, ovrLpd);
HANDLE hFile = AcquireReadFileLock(lpFilePath, ovrLpd);
if (hFile == INVALID_HANDLE_VALUE) {
return false;
}
@ -585,14 +599,15 @@ int CreateIniFile()
}
}
else {
OVERLAPPED ovrLpd = { 0 };
HANDLE hFile = AcquireFileLock(g_wchIniFile, ovrLpd);
HANDLE hFile = CreateFile(g_wchIniFile,
GENERIC_READ, FILE_SHARE_READ,
nullptr, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, nullptr);
if (hFile == INVALID_HANDLE_VALUE) {
return result;
}
DWORD dwFSHigh = 0UL;
dwFileSize = GetFileSize(hFile, &dwFSHigh);
ReleaseFileLock(hFile, ovrLpd);
CloseHandle(hFile);
}
if ((dwFileSize == 0) && (dwFileSize != INVALID_FILE_SIZE)) {

View File

@ -3,7 +3,7 @@
<assemblyIdentity
name="Notepad3"
processorArchitecture="*"
version="5.20.312.6"
version="5.20.313.1"
type="win32"
/>
<description>Notepad3 RC3</description>

View File

@ -89,7 +89,7 @@ constexpr bool SI_Success(const SI_Error rc) noexcept {
// of complete file to preserve integrety of any transaction
// ----------------------------------------------------------------------------
HANDLE AcquireFileLock(LPCWSTR lpIniFilePath, OVERLAPPED& rOvrLpd)
HANDLE AcquireWriteFileLock(LPCWSTR lpIniFilePath, OVERLAPPED& rOvrLpd)
{
HANDLE hFile = CreateFile(lpIniFilePath,
GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE,
@ -103,6 +103,20 @@ HANDLE AcquireFileLock(LPCWSTR lpIniFilePath, OVERLAPPED& rOvrLpd)
// ----------------------------------------------------------------------------
HANDLE AcquireReadFileLock(LPCWSTR lpIniFilePath, OVERLAPPED& rOvrLpd)
{
HANDLE hFile = CreateFile(lpIniFilePath,
GENERIC_READ, FILE_SHARE_READ,
nullptr, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, nullptr);
DWORD const flags = LOCKFILE_EXCLUSIVE_LOCK;
bool const bLocked = LockFileEx(hFile, flags, 0, MAXDWORD, 0, &rOvrLpd);
return (bLocked ? hFile : INVALID_HANDLE_VALUE);
}
// ----------------------------------------------------------------------------
bool ReleaseFileLock(HANDLE hFile, OVERLAPPED& rOvrLpd)
{
bool bUnLocked = true;
@ -130,7 +144,7 @@ extern "C" bool LoadIniFile(LPCWSTR lpIniFilePath)
s_INI.SetSpaces(s_bSetSpaces);
s_INI.SetMultiLine(s_bUseMultiLine);
s_INI_Hndl = AcquireFileLock(lpIniFilePath, s_OvrLpd);
s_INI_Hndl = AcquireReadFileLock(lpIniFilePath, s_OvrLpd);
if (s_INI_Hndl == INVALID_HANDLE_VALUE) {
return false;
}
@ -330,7 +344,7 @@ extern "C" size_t IniFileGetString(LPCWSTR lpFilePath, LPCWSTR lpSectionName, LP
CSimpleIni Ini(s_bIsUTF8, s_bUseMultiKey, s_bUseMultiLine);
OVERLAPPED ovrLpd = { 0 };
HANDLE hFile = AcquireFileLock(lpFilePath, ovrLpd);
HANDLE hFile = AcquireReadFileLock(lpFilePath, ovrLpd);
if (hFile == INVALID_HANDLE_VALUE) {
StringCchCopyW(lpReturnedString, cchReturnedString, lpDefault);
return StringCchLenW(lpReturnedString, cchReturnedString);
@ -358,7 +372,7 @@ extern "C" bool IniFileSetString(LPCWSTR lpFilePath, LPCWSTR lpSectionName, LPCW
Ini.SetSpaces(s_bSetSpaces);
OVERLAPPED ovrLpd = { 0 };
HANDLE hFile = AcquireFileLock(lpFilePath, ovrLpd);
HANDLE hFile = AcquireWriteFileLock(lpFilePath, ovrLpd);
if (hFile == INVALID_HANDLE_VALUE) {
return false;
}
@ -384,7 +398,7 @@ extern "C" int IniFileGetInt(LPCWSTR lpFilePath, LPCWSTR lpSectionName, LPCWSTR
CSimpleIni Ini(s_bIsUTF8, s_bUseMultiKey, s_bUseMultiLine);
OVERLAPPED ovrLpd = { 0 };
HANDLE hFile = AcquireFileLock(lpFilePath, ovrLpd);
HANDLE hFile = AcquireReadFileLock(lpFilePath, ovrLpd);
if (hFile == INVALID_HANDLE_VALUE) {
return iDefault;
}
@ -410,7 +424,7 @@ extern "C" bool IniFileSetInt(LPCWSTR lpFilePath, LPCWSTR lpSectionName, LPCWSTR
Ini.SetSpaces(s_bSetSpaces);
OVERLAPPED ovrLpd = { 0 };
HANDLE hFile = AcquireFileLock(lpFilePath, ovrLpd);
HANDLE hFile = AcquireWriteFileLock(lpFilePath, ovrLpd);
if (hFile == INVALID_HANDLE_VALUE) {
return false;
}
@ -433,7 +447,7 @@ extern "C" bool IniFileGetBool(LPCWSTR lpFilePath, LPCWSTR lpSectionName, LPCWST
CSimpleIni Ini(s_bIsUTF8, s_bUseMultiKey, s_bUseMultiLine);
OVERLAPPED ovrLpd = { 0 };
HANDLE hFile = AcquireFileLock(lpFilePath, ovrLpd);
HANDLE hFile = AcquireReadFileLock(lpFilePath, ovrLpd);
if (hFile == INVALID_HANDLE_VALUE) {
return bDefault;
}
@ -459,7 +473,7 @@ extern "C" bool IniFileSetBool(LPCWSTR lpFilePath, LPCWSTR lpSectionName, LPCWST
Ini.SetSpaces(s_bSetSpaces);
OVERLAPPED ovrLpd = { 0 };
HANDLE hFile = AcquireFileLock(lpFilePath, ovrLpd);
HANDLE hFile = AcquireWriteFileLock(lpFilePath, ovrLpd);
if (hFile == INVALID_HANDLE_VALUE) {
return false;
}
@ -483,7 +497,7 @@ extern "C" bool IniFileDelete(LPCWSTR lpFilePath, LPCWSTR lpSectionName, LPCWSTR
Ini.SetSpaces(s_bSetSpaces);
OVERLAPPED ovrLpd = { 0 };
HANDLE hFile = AcquireFileLock(lpFilePath, ovrLpd);
HANDLE hFile = AcquireWriteFileLock(lpFilePath, ovrLpd);
if (hFile == INVALID_HANDLE_VALUE) {
return false;
}
@ -506,7 +520,7 @@ extern "C" bool IniFileIterateSection(LPCWSTR lpFilePath, LPCWSTR lpSectionName,
CSimpleIni Ini(s_bIsUTF8, s_bUseMultiKey, s_bUseMultiLine);
OVERLAPPED ovrLpd = { 0 };
HANDLE hFile = AcquireFileLock(lpFilePath, ovrLpd);
HANDLE hFile = AcquireReadFileLock(lpFilePath, ovrLpd);
if (hFile == INVALID_HANDLE_VALUE) {
return false;
}
@ -790,16 +804,17 @@ extern "C" bool CreateIniFile()
}
}
else {
OVERLAPPED ovrLpd = { 0 };
HANDLE hFile = AcquireFileLock(Globals.IniFile, ovrLpd);
HANDLE hFile = CreateFile(Globals.IniFile,
GENERIC_READ, FILE_SHARE_READ,
nullptr, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, nullptr);
if (hFile == INVALID_HANDLE_VALUE) {
Globals.dwLastError = GetLastError();
MsgBoxLastError(L"Accessing Settings-File failed!", Globals.dwLastError);
MsgBoxLastError(L"Read Access to Settings-File failed!", Globals.dwLastError);
return result;
}
DWORD dwFSHigh = 0UL;
dwFileSize = GetFileSize(hFile, &dwFSHigh);
ReleaseFileLock(hFile, ovrLpd);
CloseHandle(hFile);
}
if ((dwFileSize == 0) && (dwFileSize != INVALID_FILE_SIZE)) {

View File

@ -8,8 +8,8 @@
#define SAPPNAME "Notepad3"
#define VERSION_MAJOR 5
#define VERSION_MINOR 20
#define VERSION_REV 312
#define VERSION_BUILD 6
#define VERSION_REV 313
#define VERSION_BUILD 1
#define SCINTILLA_VER 432
#define ONIGURUMA_REGEX_VER 6.9.4
#define UCHARDET_VER 2018.09.27