Из внешнего процесса у вас есть правильный подход.Однако, если вы ищете строку, вам, вероятно, нет дела до определенных областей (например, исполняемой памяти), поэтому вы можете исключить их из области поиска.Скорее всего, вас действительно интересуют только PAGE_READONLY
и PAGE_READWRITE
.
. Вы должны читать память как можно большими блоками с помощью ReadProcessMemory ().Основным узким местом будет дисковый ввод-вывод (от подкачки), и с этим мало что можно поделать.Многопоточность ускоряет его, потому что тогда вы будете «буферизировать чтение», обрабатывая предыдущее чтение.
Если вам действительно нужна скорость, правильный способ сделать это не через внешний процессты делаешь прямо сейчас.Вы должны внедрить DLL, чтобы иметь прямой доступ к пространству виртуальной памяти процесса.
В вашем алгоритме поиска вы также можете делать маленькие хитрости.Например, если вы знаете, что строка всегда размещается в 4-байтовом выравнивании, вы можете просто искать их.Наибольшее ускорение вы получите от многопоточности и / или внедрения DLL.