Don't use System.Environment APIs

pull/359/head
NextTurn 2018-12-03 00:00:00 +08:00
parent cff7360118
commit c32d17c21b
No known key found for this signature in database
GPG Key ID: 17A0D50ADDE1A0C4
1 changed files with 18 additions and 18 deletions

View File

@ -60,9 +60,7 @@ 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( return SearchEnvironmentVariable(
processHandle, processHandle,
@ -71,7 +69,7 @@ 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)));
} }
if (IsWow64Process(processHandle, out int isWow64) == 0 || isWow64 == 0) if (Is64BitOSWhen32BitProcess(Process.GetCurrentProcess().Handle) && !Is64BitOSWhen32BitProcess(processHandle))
{ {
return SearchEnvironmentVariable( return SearchEnvironmentVariable(
processHandle, processHandle,
@ -79,7 +77,6 @@ namespace winsw.Plugins.RunawayProcessKiller
GetEnvironmentAddressWow64(processHandle), GetEnvironmentAddressWow64(processHandle),
(handle, address, buffer, size) => NtWow64ReadVirtualMemory64(handle, address, buffer, size)); (handle, address, buffer, size) => NtWow64ReadVirtualMemory64(handle, address, buffer, size));
} }
}
return SearchEnvironmentVariable( return SearchEnvironmentVariable(
processHandle, processHandle,
@ -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)