PDA

Просмотр полной версии : ReadProcessMemory и struct возвращает нулевое значение



X-rayboy
31.07.2012, 10:53
linkBaffs[0] - это количество элементов, где по struct TypeBaffs 18 байт в каждом.
linkBaffs[2] - это адрес, где читаем, проверено через MessegeBox указано правильное значение, проверено через ArtMoney
BufBaffs - это буфер, куда должно складываться массивом в формате struct TypeBaffs.

Класс public partial class Form1 : Form (часть)


WinAPI.TypeBaffs[] BufBaffs = new WinAPI.TypeBaffs[linkBaffs[0]];
//MessageBox.Show(BufBaffs.Length.ToString());
WinAPI.ReadProcessMemory( // Читаем данные объекта
proc.Handle,
linkBaffs[2],
BufBaffs,
linkBaffs[0] * 0x12,
out m_bytesRead
);


Класс WinAPI (часть)


[DllImport("Kernel32.dll", SetLastError = true)]
public static extern bool ReadProcessMemory(
IntPtr hProcess,
uint lpBaseAddress,
TypeBaffs[] lpBuffer,
uint nSize,
out uint lpNumberOfBytesRead
);
public struct TypeBaffs
{
public uint idSkillType;
public uint idSkill;
public uint id;
public uint idLevelType;
public ushort idLevel;
}
m_bytesRead - возвращает правильное чтение количества байт.

Итоговый результат ожидается в BufBaffs, но переменная хоть и массивом, но значения там все нулевые (например BufBaffs

[0].idSkillType). Непонятно в чем подвох ?

В то же время читая без struct
Пример


uint[] temp1 = new uint[2];
WinAPI.ReadProcessMemory( // Читаем указатели на персональные данные
proc.Handle,
temp[3] + 0x220,
temp1, 0x8,
out m_bytesRead
);
Итоговый результат достигает, но это когда значения одинаковые по типу.

Как достичь возврата НЕнулевого значения с struct?