зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1503538 Part 2/5: Move AutoVirtualProtect to a shared header r=aklotz
AutoVirtualProtect will be useful for following patches. This moves it out of DllBlocklistWin.cpp and into WinHeaderOnlyUtils.h so it can be shared. Differential Revision: https://phabricator.services.mozilla.com/D13197 --HG-- extra : moz-landing-system : lando
This commit is contained in:
Родитель
d6d1ff2060
Коммит
183288850c
|
@ -306,47 +306,6 @@ static NTSTATUS NTAPI patched_NtMapViewOfSection(
|
|||
|
||||
namespace mozilla {
|
||||
|
||||
class MOZ_RAII AutoVirtualProtect final {
|
||||
public:
|
||||
AutoVirtualProtect(void* aAddress, size_t aLength, DWORD aProtFlags,
|
||||
HANDLE aTargetProcess = nullptr)
|
||||
: mAddress(aAddress),
|
||||
mLength(aLength),
|
||||
mTargetProcess(aTargetProcess),
|
||||
mPrevProt(0),
|
||||
mError(WindowsError::CreateSuccess()) {
|
||||
if (!::VirtualProtectEx(aTargetProcess, aAddress, aLength, aProtFlags,
|
||||
&mPrevProt)) {
|
||||
mError = WindowsError::FromLastError();
|
||||
}
|
||||
}
|
||||
|
||||
~AutoVirtualProtect() {
|
||||
if (mError.IsFailure()) {
|
||||
return;
|
||||
}
|
||||
|
||||
::VirtualProtectEx(mTargetProcess, mAddress, mLength, mPrevProt,
|
||||
&mPrevProt);
|
||||
}
|
||||
|
||||
explicit operator bool() const { return mError.IsSuccess(); }
|
||||
|
||||
WindowsError GetError() const { return mError; }
|
||||
|
||||
AutoVirtualProtect(const AutoVirtualProtect&) = delete;
|
||||
AutoVirtualProtect(AutoVirtualProtect&&) = delete;
|
||||
AutoVirtualProtect& operator=(const AutoVirtualProtect&) = delete;
|
||||
AutoVirtualProtect& operator=(AutoVirtualProtect&&) = delete;
|
||||
|
||||
private:
|
||||
void* mAddress;
|
||||
size_t mLength;
|
||||
HANDLE mTargetProcess;
|
||||
DWORD mPrevProt;
|
||||
WindowsError mError;
|
||||
};
|
||||
|
||||
LauncherVoidResult InitializeDllBlocklistOOP(HANDLE aChildProcess) {
|
||||
mozilla::CrossProcessDllInterceptor intcpt(aChildProcess);
|
||||
intcpt.Init(L"ntdll.dll");
|
||||
|
|
|
@ -361,6 +361,47 @@ inline WindowsErrorResult<bool> DoPathsPointToIdenticalFile(
|
|||
return id1 == id2;
|
||||
}
|
||||
|
||||
class MOZ_RAII AutoVirtualProtect final {
|
||||
public:
|
||||
AutoVirtualProtect(void* aAddress, size_t aLength, DWORD aProtFlags,
|
||||
HANDLE aTargetProcess = nullptr)
|
||||
: mAddress(aAddress),
|
||||
mLength(aLength),
|
||||
mTargetProcess(aTargetProcess),
|
||||
mPrevProt(0),
|
||||
mError(WindowsError::CreateSuccess()) {
|
||||
if (!::VirtualProtectEx(aTargetProcess, aAddress, aLength, aProtFlags,
|
||||
&mPrevProt)) {
|
||||
mError = WindowsError::FromLastError();
|
||||
}
|
||||
}
|
||||
|
||||
~AutoVirtualProtect() {
|
||||
if (mError.IsFailure()) {
|
||||
return;
|
||||
}
|
||||
|
||||
::VirtualProtectEx(mTargetProcess, mAddress, mLength, mPrevProt,
|
||||
&mPrevProt);
|
||||
}
|
||||
|
||||
explicit operator bool() const { return mError.IsSuccess(); }
|
||||
|
||||
WindowsError GetError() const { return mError; }
|
||||
|
||||
AutoVirtualProtect(const AutoVirtualProtect&) = delete;
|
||||
AutoVirtualProtect(AutoVirtualProtect&&) = delete;
|
||||
AutoVirtualProtect& operator=(const AutoVirtualProtect&) = delete;
|
||||
AutoVirtualProtect& operator=(AutoVirtualProtect&&) = delete;
|
||||
|
||||
private:
|
||||
void* mAddress;
|
||||
size_t mLength;
|
||||
HANDLE mTargetProcess;
|
||||
DWORD mPrevProt;
|
||||
WindowsError mError;
|
||||
};
|
||||
|
||||
} // namespace mozilla
|
||||
|
||||
#endif // mozilla_WinHeaderOnlyUtils_h
|
||||
|
|
Загрузка…
Ссылка в новой задаче