mirror of https://github.com/winsw/winsw
Don't use System.Environment APIs
parent
cff7360118
commit
c32d17c21b
|
@ -60,25 +60,22 @@ namespace winsw.Plugins.RunawayProcessKiller
|
||||||
|
|
||||||
private static unsafe string? ReadEnvironmentVariable(IntPtr processHandle, string variable)
|
private static unsafe string? ReadEnvironmentVariable(IntPtr processHandle, string variable)
|
||||||
{
|
{
|
||||||
if (Environment.Is64BitOperatingSystem)
|
if (IntPtr.Size == sizeof(long))
|
||||||
{
|
{
|
||||||
if (Environment.Is64BitProcess)
|
return SearchEnvironmentVariable(
|
||||||
{
|
processHandle,
|
||||||
return SearchEnvironmentVariable(
|
variable,
|
||||||
processHandle,
|
GetEnvironmentAddress64(processHandle).ToInt64(),
|
||||||
variable,
|
(handle, address, buffer, size) => NtReadVirtualMemory(handle, new IntPtr(address), buffer, new IntPtr(size)));
|
||||||
GetEnvironmentAddress64(processHandle).ToInt64(),
|
}
|
||||||
(handle, address, buffer, size) => NtReadVirtualMemory(handle, new IntPtr(address), buffer, new IntPtr(size)));
|
|
||||||
}
|
if (Is64BitOSWhen32BitProcess(Process.GetCurrentProcess().Handle) && !Is64BitOSWhen32BitProcess(processHandle))
|
||||||
|
{
|
||||||
if (IsWow64Process(processHandle, out int isWow64) == 0 || isWow64 == 0)
|
return SearchEnvironmentVariable(
|
||||||
{
|
processHandle,
|
||||||
return SearchEnvironmentVariable(
|
variable,
|
||||||
processHandle,
|
GetEnvironmentAddressWow64(processHandle),
|
||||||
variable,
|
(handle, address, buffer, size) => NtWow64ReadVirtualMemory64(handle, address, buffer, size));
|
||||||
GetEnvironmentAddressWow64(processHandle),
|
|
||||||
(handle, address, buffer, size) => NtWow64ReadVirtualMemory64(handle, address, buffer, size));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return SearchEnvironmentVariable(
|
return SearchEnvironmentVariable(
|
||||||
|
@ -88,6 +85,9 @@ namespace winsw.Plugins.RunawayProcessKiller
|
||||||
(handle, address, buffer, size) => NtReadVirtualMemory(handle, new IntPtr(address), buffer, new IntPtr(size)));
|
(handle, address, buffer, size) => NtReadVirtualMemory(handle, new IntPtr(address), buffer, new IntPtr(size)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static bool Is64BitOSWhen32BitProcess(IntPtr processHandle) =>
|
||||||
|
IsWow64Process(processHandle, out int isWow64) != 0 && isWow64 != 0;
|
||||||
|
|
||||||
private unsafe delegate int ReadMemoryCallback(IntPtr processHandle, long baseAddress, void* buffer, int bufferSize);
|
private unsafe delegate int ReadMemoryCallback(IntPtr processHandle, long baseAddress, void* buffer, int bufferSize);
|
||||||
|
|
||||||
private static unsafe string? SearchEnvironmentVariable(IntPtr processHandle, string variable, long address, ReadMemoryCallback reader)
|
private static unsafe string? SearchEnvironmentVariable(IntPtr processHandle, string variable, long address, ReadMemoryCallback reader)
|
||||||
|
|
Loading…
Reference in New Issue