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,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)