Здравствуйте, BK, Вы писали:
BK>Что сильно медленно работает?
BK>BK>Я делал так
BK>MEMORY_BASIC_INFORMATION MBI;
BK> DWORD dwNumByte;
BK> SYSTEM_INFO sInfo;
BK> GetSystemInfo(&sInfo);
BK> PVOID pvAddress =sInfo.lpMinimumApplicationAddress;
BK> while( pvAddress < sInfo.lpMaximumApplicationAddress)
BK> {
BK> dwNumByte = VirtualQueryEx(hProcess,pvAddress,&MBI,sizeof(MBI) );
BK> if(dwNumByte != sizeof(MBI) )
BK> {
BK> //Error
BK> }
BK> pvAddress = (PVOID) ( (DWORD)MBI.BaseAddress + MBI.RegionSize);
BK> if( MEM_COMMIT != MBI.State ) continue;
BK> DWORD dwNumberOfBytesRead;
BK> void* pdwBuf = 0;
BK> pdwBuf= new BYTE[MBI.RegionSize];
BK> if(!pdwBuf)
BK> {
BK> // error at alloc memory
BK> }
BK> BOOL b=FALSE;
BK> b= ReadProcessMemory(
BK> hProcess, // handle to the process whose memory is read
BK> MBI.BaseAddress, // address to start reading
BK> pdwBuf,// address of buffer to place read data
BK> MBI.RegionSize,//iCount, // number of bytes to read
BK> &dwNumberOfBytesRead // address of number of bytes read
BK> );
BK>
Если нашёл необходимую строку, то как взять адрес? MBI.BaseAddress+i(где i смещение начала искомой строки) даёт не тот адрес который в действительности.