88 |
|
private Process m_ReadProcess = null; |
89 |
|
|
90 |
|
//SafeWaitHandle handle; |
91 |
< |
private static IntPtr m_hProcess = IntPtr.Zero; |
92 |
< |
|
91 |
> |
private static IntPtr handle = IntPtr.Zero; |
92 |
> |
SafeWaitHandle m_hProcess; |
93 |
|
public void OpenProcess() |
94 |
|
{ |
95 |
|
try |
104 |
|
| ProcessAccessType.PROCESS_VM_WRITE |
105 |
|
| ProcessAccessType.PROCESS_VM_OPERATION; |
106 |
|
//m_hProcess = ProcessMemoryReaderApi.OpenProcess((uint)access, 1, (uint)m_ReadProcess.Id); |
107 |
< |
m_hProcess = ProcessMemoryReaderApi.OpenProcess((uint)access, 1, (uint)m_ReadProcess.Id); |
107 |
> |
handle = ProcessMemoryReaderApi.OpenProcess((uint)access, 1, (uint)m_ReadProcess.Id); |
108 |
> |
m_hProcess = new SafeWaitHandle(handle, false); |
109 |
|
} |
110 |
|
catch (SEHException ex) |
111 |
|
{ |
124 |
|
{ |
125 |
|
try |
126 |
|
{ |
127 |
< |
SafeWaitHandle handle = new SafeWaitHandle(m_ReadProcess.Handle, false); |
128 |
< |
if (handle.IsInvalid) { return; } |
129 |
< |
if (handle.IsClosed) { return; } |
130 |
< |
handle.Close(); |
131 |
< |
handle = null; |
132 |
< |
//m_hProcess = IntPtr.Zero; |
127 |
> |
//if (handle.IsInvalid) { return; } |
128 |
> |
//if (handle.IsClosed) { return; } |
129 |
> |
m_hProcess.Close(); |
130 |
> |
m_hProcess.Dispose(); |
131 |
> |
m_hProcess = null; |
132 |
> |
handle = IntPtr.Zero; |
133 |
> |
m_ReadProcess = null; |
134 |
|
//string stack_trace = System.Environment.StackTrace; |
135 |
|
//int iRetValue; |
136 |
|
//iRetValue = ProcessMemoryReaderApi.CloseHandle(m_hProcess); |
299 |
|
uint size = 1024 * 128; |
300 |
|
for (uint j = MemoryAddress; j < bytesToRead; j += size) |
301 |
|
{ |
302 |
< |
ProcessMemoryChunk mem = new ProcessMemoryChunk(m_ReadProcess, (IntPtr)j, (int)size); |
303 |
< |
byte[] bigMem = mem.Read(); |
304 |
< |
if (this.OnBytesRead != null) |
305 |
< |
this.OnBytesRead.Invoke(new OnBytesReadEventArgs(this, UserState, bigMem, j, bytesToRead)); |
306 |
< |
bigMem = null; |
302 |
> |
using (ProcessMemoryChunk mem = new ProcessMemoryChunk(m_ReadProcess, (IntPtr)j, (int)size)) |
303 |
> |
{ |
304 |
> |
byte[] bigMem = mem.Read(); |
305 |
> |
if (this.OnBytesRead != null) |
306 |
> |
this.OnBytesRead.Invoke(new OnBytesReadEventArgs(this, UserState, bigMem, j, bytesToRead)); |
307 |
> |
bigMem = null; |
308 |
> |
} |
309 |
|
} |
306 |
– |
|
310 |
|
} |
311 |
|
public void ReadProcessMemoryAtOnce(uint MemoryAddress, uint bytesToRead, out int bytesRead, out byte[] data) |
312 |
|
{ |
316 |
|
List<byte> buffer_list = new List<byte>(); |
317 |
|
for (uint j = MemoryAddress; j < bytesToRead; j += size) |
318 |
|
{ |
319 |
< |
ProcessMemoryChunk mem = new ProcessMemoryChunk(m_ReadProcess, (IntPtr)j, (int)size); |
320 |
< |
byte[] bigMem = mem.Read(); |
321 |
< |
foreach (byte b in bigMem) { buffer_list.Add(b); } |
322 |
< |
bigMem = null; |
319 |
> |
using (ProcessMemoryChunk mem = new ProcessMemoryChunk(m_ReadProcess, (IntPtr)j, (int)size)) |
320 |
> |
{ |
321 |
> |
byte[] bigMem = mem.Read(); |
322 |
> |
foreach (byte b in bigMem) { buffer_list.Add(b); } |
323 |
> |
bigMem = null; |
324 |
> |
} |
325 |
|
} |
326 |
|
bytesRead = buffer_list.Count; |
327 |
|
data = new byte[bytesToRead]; |
368 |
|
buffer_list.RemoveAt(buffer_list.Count-1); |
369 |
|
} |
370 |
|
|
371 |
< |
ProcessMemoryReader.ProcessMemoryReaderApi.ReadProcessMemory(m_ReadProcess.Handle, (IntPtr)_MemoryAddress, buffer, alignment, out _bytesRead); |
371 |
> |
ProcessMemoryReader.ProcessMemoryReaderApi.ReadProcessMemory(handle, (IntPtr)_MemoryAddress, buffer, alignment, out _bytesRead); |
372 |
|
int LastError = Marshal.GetLastWin32Error(); |
373 |
|
if (LastError != ResultWin32.ERROR_SUCCESS) |
374 |
|
{ |
420 |
|
{ |
421 |
|
UIntPtr _ptrBytesWritten = UIntPtr.Zero; |
422 |
|
byte[] buffer = new byte[] { bytesToWrite[i] }; |
423 |
< |
ProcessMemoryReaderApi.WriteProcessMemory(m_ReadProcess.Handle, (IntPtr)_MemoryAddress, buffer, (uint)buffer.Length, out _ptrBytesWritten); |
423 |
> |
ProcessMemoryReaderApi.WriteProcessMemory(handle, (IntPtr)_MemoryAddress, buffer, (uint)buffer.Length, out _ptrBytesWritten); |
424 |
|
_MemoryAddress++; |
425 |
|
_bytesWritten++; |
426 |
|
} |
526 |
|
{ |
527 |
|
byte[] bitData = BitConverter.GetBytes(value); |
528 |
|
UIntPtr ptrBytesWritten; |
529 |
< |
ProcessMemoryReaderApi.WriteProcessMemory(m_ReadProcess.Handle, (IntPtr)address, bitData, (uint)bitData.Length, out ptrBytesWritten); |
529 |
> |
ProcessMemoryReaderApi.WriteProcessMemory(handle, (IntPtr)address, bitData, (uint)bitData.Length, out ptrBytesWritten); |
530 |
|
if (ptrBytesWritten.ToUInt32() == 0) |
531 |
|
return false; |
532 |
|
byte check = 0; |
540 |
|
{ |
541 |
|
byte[] bitData = BitConverter.GetBytes(value); |
542 |
|
UIntPtr ptrBytesWritten; |
543 |
< |
ProcessMemoryReaderApi.WriteProcessMemory(m_ReadProcess.Handle, (IntPtr)address, bitData, (uint)bitData.Length, out ptrBytesWritten); |
543 |
> |
ProcessMemoryReaderApi.WriteProcessMemory(handle, (IntPtr)address, bitData, (uint)bitData.Length, out ptrBytesWritten); |
544 |
|
if (ptrBytesWritten.ToUInt32() == 0) |
545 |
|
return false; |
546 |
|
sbyte check = 0; |
554 |
|
{ |
555 |
|
byte[] bitData = BitConverter.GetBytes(value); |
556 |
|
UIntPtr ptrBytesWritten; |
557 |
< |
ProcessMemoryReaderApi.WriteProcessMemory(m_ReadProcess.Handle, (IntPtr)address, bitData, (uint)bitData.Length, out ptrBytesWritten); |
557 |
> |
ProcessMemoryReaderApi.WriteProcessMemory(handle, (IntPtr)address, bitData, (uint)bitData.Length, out ptrBytesWritten); |
558 |
|
if (ptrBytesWritten.ToUInt32() == 0) |
559 |
|
return false; |
560 |
|
ushort check = 0; |
568 |
|
{ |
569 |
|
byte[] bitData = BitConverter.GetBytes(value); |
570 |
|
UIntPtr ptrBytesWritten; |
571 |
< |
ProcessMemoryReaderApi.WriteProcessMemory(m_ReadProcess.Handle, (IntPtr)address, bitData, (uint)bitData.Length, out ptrBytesWritten); |
571 |
> |
ProcessMemoryReaderApi.WriteProcessMemory(handle, (IntPtr)address, bitData, (uint)bitData.Length, out ptrBytesWritten); |
572 |
|
if (ptrBytesWritten.ToUInt32() == 0) |
573 |
|
return false; |
574 |
|
short check = 0; |
582 |
|
{ |
583 |
|
byte[] bitData = BitConverter.GetBytes(value); |
584 |
|
UIntPtr ptrBytesWritten; |
585 |
< |
ProcessMemoryReaderApi.WriteProcessMemory(m_ReadProcess.Handle, (IntPtr)address, bitData, (uint)bitData.Length, out ptrBytesWritten); |
585 |
> |
ProcessMemoryReaderApi.WriteProcessMemory(handle, (IntPtr)address, bitData, (uint)bitData.Length, out ptrBytesWritten); |
586 |
|
if (ptrBytesWritten.ToUInt32() == 0) |
587 |
|
return false; |
588 |
|
uint check = 0; |
596 |
|
{ |
597 |
|
byte[] bitData = BitConverter.GetBytes(value); |
598 |
|
UIntPtr ptrBytesWritten; |
599 |
< |
ProcessMemoryReaderApi.WriteProcessMemory(m_ReadProcess.Handle, (IntPtr)address, bitData, (uint)bitData.Length, out ptrBytesWritten); |
599 |
> |
ProcessMemoryReaderApi.WriteProcessMemory(handle, (IntPtr)address, bitData, (uint)bitData.Length, out ptrBytesWritten); |
600 |
|
if (ptrBytesWritten.ToUInt32() == 0) |
601 |
|
return false; |
602 |
|
int check = 0; |
610 |
|
{ |
611 |
|
byte[] bitData = BitConverter.GetBytes(value); |
612 |
|
UIntPtr ptrBytesWritten; |
613 |
< |
ProcessMemoryReaderApi.WriteProcessMemory(m_ReadProcess.Handle, (IntPtr)address, bitData, (uint)bitData.Length, out ptrBytesWritten); |
613 |
> |
ProcessMemoryReaderApi.WriteProcessMemory(handle, (IntPtr)address, bitData, (uint)bitData.Length, out ptrBytesWritten); |
614 |
|
if (ptrBytesWritten.ToUInt32() == 0) |
615 |
|
return false; |
616 |
|
ulong check = 0; |
624 |
|
{ |
625 |
|
byte[] bitData = BitConverter.GetBytes(value); |
626 |
|
UIntPtr ptrBytesWritten; |
627 |
< |
ProcessMemoryReaderApi.WriteProcessMemory(m_ReadProcess.Handle, (IntPtr)address, bitData, (uint)bitData.Length, out ptrBytesWritten); |
627 |
> |
ProcessMemoryReaderApi.WriteProcessMemory(handle, (IntPtr)address, bitData, (uint)bitData.Length, out ptrBytesWritten); |
628 |
|
if (ptrBytesWritten.ToUInt32() == 0) |
629 |
|
return false; |
630 |
|
long check = 0; |
645 |
|
int bytesRead; |
646 |
|
uint size = sizeof(byte); |
647 |
|
byte[] bitData = new byte[size]; |
648 |
< |
ProcessMemoryReader.ProcessMemoryReaderApi.ReadProcessMemory(m_ReadProcess.Handle, (IntPtr)address, bitData, size, out bytesRead); |
648 |
> |
ProcessMemoryReader.ProcessMemoryReaderApi.ReadProcessMemory(handle, (IntPtr)address, bitData, size, out bytesRead); |
649 |
|
if (bytesRead == 0) |
650 |
|
return false; |
651 |
|
value = bitData[0]; |
667 |
|
int bytesRead; |
668 |
|
uint size = sizeof(sbyte); |
669 |
|
byte[] bitData = new byte[size]; |
670 |
< |
ProcessMemoryReader.ProcessMemoryReaderApi.ReadProcessMemory(m_ReadProcess.Handle, (IntPtr)address, bitData, size, out bytesRead); |
670 |
> |
ProcessMemoryReader.ProcessMemoryReaderApi.ReadProcessMemory(handle, (IntPtr)address, bitData, size, out bytesRead); |
671 |
|
if (bytesRead == 0) |
672 |
|
return false; |
673 |
|
value = Convert.ToSByte(bitData[0]); |
689 |
|
int bytesRead; |
690 |
|
uint size = sizeof(ushort); |
691 |
|
byte[] bitData = new byte[size]; |
692 |
< |
ProcessMemoryReader.ProcessMemoryReaderApi.ReadProcessMemory(m_ReadProcess.Handle, (IntPtr)address, bitData, size, out bytesRead); |
692 |
> |
ProcessMemoryReader.ProcessMemoryReaderApi.ReadProcessMemory(handle, (IntPtr)address, bitData, size, out bytesRead); |
693 |
|
if (bytesRead == 0) |
694 |
|
return false; |
695 |
|
value = BitConverter.ToUInt16(bitData, 0); |
711 |
|
int bytesRead; |
712 |
|
uint size = sizeof(short); |
713 |
|
byte[] bitData = new byte[size]; |
714 |
< |
ProcessMemoryReader.ProcessMemoryReaderApi.ReadProcessMemory(m_ReadProcess.Handle, (IntPtr)address, bitData, size, out bytesRead); |
714 |
> |
ProcessMemoryReader.ProcessMemoryReaderApi.ReadProcessMemory(handle, (IntPtr)address, bitData, size, out bytesRead); |
715 |
|
if (bytesRead == 0) |
716 |
|
return false; |
717 |
|
value = BitConverter.ToInt16(bitData, 0); |
733 |
|
int bytesRead; |
734 |
|
uint size = sizeof(uint); |
735 |
|
byte[] bitData = new byte[size]; |
736 |
< |
ProcessMemoryReader.ProcessMemoryReaderApi.ReadProcessMemory(m_ReadProcess.Handle, (IntPtr)address, bitData, size, out bytesRead); |
736 |
> |
ProcessMemoryReader.ProcessMemoryReaderApi.ReadProcessMemory(handle, (IntPtr)address, bitData, size, out bytesRead); |
737 |
|
if (bytesRead == 0) |
738 |
|
return false; |
739 |
|
value = BitConverter.ToUInt32(bitData, 0); |
755 |
|
int bytesRead; |
756 |
|
uint size = sizeof(int); |
757 |
|
byte[] bitData = new byte[size]; |
758 |
< |
ProcessMemoryReader.ProcessMemoryReaderApi.ReadProcessMemory(m_ReadProcess.Handle, (IntPtr)address, bitData, size, out bytesRead); |
758 |
> |
ProcessMemoryReader.ProcessMemoryReaderApi.ReadProcessMemory(handle, (IntPtr)address, bitData, size, out bytesRead); |
759 |
|
if (bytesRead == 0) |
760 |
|
return false; |
761 |
|
value = BitConverter.ToInt32(bitData, 0); |
777 |
|
int bytesRead; |
778 |
|
uint size = sizeof(ulong); |
779 |
|
byte[] bitData = new byte[size]; |
780 |
< |
ProcessMemoryReader.ProcessMemoryReaderApi.ReadProcessMemory(m_ReadProcess.Handle, (IntPtr)address, bitData, size, out bytesRead); |
780 |
> |
ProcessMemoryReader.ProcessMemoryReaderApi.ReadProcessMemory(handle, (IntPtr)address, bitData, size, out bytesRead); |
781 |
|
if (bytesRead == 0) |
782 |
|
return false; |
783 |
|
value = BitConverter.ToUInt64(bitData, 0); |
799 |
|
int bytesRead; |
800 |
|
uint size = sizeof(long); |
801 |
|
byte[] bitData = new byte[size]; |
802 |
< |
ProcessMemoryReader.ProcessMemoryReaderApi.ReadProcessMemory(m_ReadProcess.Handle, (IntPtr)address, bitData, size, out bytesRead); |
802 |
> |
ProcessMemoryReader.ProcessMemoryReaderApi.ReadProcessMemory(handle, (IntPtr)address, bitData, size, out bytesRead); |
803 |
|
if (bytesRead == 0) |
804 |
|
return false; |
805 |
|
value = BitConverter.ToInt64(bitData, 0); |