mirror of
https://github.com/rizonesoft/Notepad3.git
synced 2026-06-11 21:03:05 +08:00
+ fix: NP3 installed version: no write access locking on programs dir (.ini redirection)
This commit is contained in:
parent
21684aed8d
commit
0d39bf7749
@ -1 +1 @@
|
||||
6
|
||||
1
|
||||
|
||||
@ -1 +1 @@
|
||||
312
|
||||
313
|
||||
|
||||
@ -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)) {
|
||||
|
||||
@ -3,7 +3,7 @@
|
||||
<assemblyIdentity
|
||||
name="Notepad3"
|
||||
processorArchitecture="*"
|
||||
version="5.20.312.6"
|
||||
version="5.20.313.1"
|
||||
type="win32"
|
||||
/>
|
||||
<description>Notepad3 RC3</description>
|
||||
|
||||
@ -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)) {
|
||||
|
||||
@ -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
|
||||
|
||||
Loading…
Reference in New Issue
Block a user