2015-10-04 58 views
1

此行不會在我的代碼工作,現在這裏是代碼和錯誤訪問其他進程內存

uint PROCESS_ALL_ACCESS = (DELETE | READ_CONTROL | WRITE_DAC | WRITE_OWNER | SYNCHRONIZE | END); 

字段初始化不能尊敬的非靜態字段

這裏是我做了這個文章來自:http://blackandodd.blogspot.com/2012/12/c-read-and-write-process-memory-in.html

public class MAin 
{ 

    [DllImport("kernel32.dll")] 
    public static extern int OpenProcess(uint dwDesiredAccess, bool bInheritHandle, int dwProcessId); 

    [DllImport("kernel32.dll")] 
    public static extern bool ReadProcessMemory(int hProcess, int lpBaseAddress, byte[] buffer, int size, int lpNumberOfBytesRead); 

    [DllImport("kernel32.dll")] 
    public static extern bool WriteProcessMemory(int hProcess, int lpBaseAddress, byte[] buffer, int size, int lpNumberOfBytesWritten); 

    uint DELETE = 0x00010000; 
    uint READ_CONTROL = 0x00020000; 
    uint WRITE_DAC = 0x00040000; 
    uint WRITE_OWNER = 0x00080000; 
    uint SYNCHRONIZE = 0x00100000; 
    uint END = 0xFFF; //if you have Windows XP or Windows Server 2003 you must change this to 0xFFFF 
    uint PROCESS_ALL_ACCESS = (DELETE | READ_CONTROL | WRITE_DAC | WRITE_OWNER | SYNCHRONIZE | END); 



    public void OnLoad(){ 

     Console.WriteLine (""); 

     Process[] p = Process.GetProcessesByName("notepad"); 

     int processHandle = OpenProcess(PROCESS_ALL_ACCESS, false, p[0].Id); 

    } 


    public byte[] ReadMemory(int adress, int processSize, int processHandle) { 
     byte[] buffer = new byte[processSize]; 
     ReadProcessMemory(processHandle, adress, buffer, processSize, 0); 
     return buffer; 
    } 

    public void WriteMemory(int adress, byte[] processBytes, int processHandle) { 
     WriteProcessMemory(processHandle, adress, processBytes, processBytes.Length, 0); 
    } 

    public int GetObjectSize(object TestObject) { 
     BinaryFormatter bf = new BinaryFormatter(); 
     MemoryStream ms = new MemoryStream(); 
     byte[] Array; 
     bf.Serialize(ms, TestObject); 
     Array = ms.ToArray(); 
     return Array.Length; 
    } 
} 

回答

1

變化的定義(uint DELETE和所有的其他人)const uint DELETE,這將讓你和借鑑e作爲表達的價值。

const uint DELETE = 0x00010000; 
const uint READ_CONTROL = 0x00020000; 
const uint WRITE_DAC = 0x00040000; 
const uint WRITE_OWNER = 0x00080000; 
const uint SYNCHRONIZE = 0x00100000; 
const uint END = 0xFFF; //if you have Windows XP or Windows Server 2003 you must change this to 0xFFFF 
const uint PROCESS_ALL_ACCESS = (DELETE | READ_CONTROL | WRITE_DAC | WRITE_OWNER | SYNCHRONIZE | END);