В программе есть SysListView32, я внедряю в программу свою дллку и пытаюсь прочитать этот ListView, нахожу его хендл, потом читаю следующей процедурой Код (Text): DisplayFileName proc hList:dword LOCAL lvi:LV_ITEM LOCAL szBuff[256]:BYTE LOCAL count:dword invoke SendMessage,hList,LVM_GETITEMCOUNT,0,0 test eax,eax jz exit dec eax mov count,eax next: push count pop lvi.iItem mov lvi.iSubItem, 1 mov lvi.imask, LVIF_TEXT lea eax, szBuff mov lvi.pszText, eax mov lvi.cchTextMax, 256 invoke SendMessage, hList, LVM_GETITEM, 0, addr lvi invoke MessageBox, NULL, addr szBuff,0, MB_OK dec count cmp count,0 jnz next exit: ret DisplayFileName endp Проблемма вот в чём, когда эта процедура вызывается из DllEntry она нормально читает список, но стоит вызвать её гдето в другом месте, например в обработчике перехваченой функции она выдаёт пустые масаджбоксы, самое главное количество месаджбоксов соответствует количеству элементов ListView, тоесть процедура выполняется правильно но вот текст почему то не читается, ещё он так же не читается если эту процедуру запустить из DllEntry в потоке(CreateThread) но есть запустить опять же из DllEntry но с использованием CreateRemoteThread,-1,... то будет работать, но если запустить вторым способом(CreateRemoteThread) из обработчика перехвата то опять выдаёт пустые масаджбоксы =( Я так понимаю это либо какаято защита либо дело в превилегиях потока, что это может быть?
При использовании LVM_GETITEM, буфер LVITEM должен быть в адресном пространстве того же процесса, которому этот ListView пренадлежит, а LVM_GETITEMCOUNT отрабатывает всегда правильно потому, что результат возвращается в регистре.
да какой эррор? в структуре указатель на текст ноль! выполняется в контексте процесса которому пренадлежит листвиев, яж писал