Что рекомендуемый путь состоит в том, чтобы сцепить API Win32 для коммерческого приложения? [закрытый]

Для начала, Trim только удаляет символы с начала или конца строки . Во-вторых, необходимо оценить, если Вы действительно хотите удалить наступательные символы, или перестать работать быстро и позволить пользователю знать, что их имя файла недопустимо. Моим выбором является последний, но мой ответ должен, по крайней мере, показать Вам, как сделать вещи право И неправильный путь:

вопрос о StackOverflow, показывающий, как проверить, является ли данная строка именем правильного файла . Обратите внимание, что можно использовать regex от этого вопроса удалить символы с заменой регулярного выражения (если действительно необходимо сделать это).

8
задан 6 July 2009 в 17:13
поделиться

4 ответа

Что вы пытаетесь сделать? достаточно ли исправления таблицы импорта? я использовал вариант http://jpassing.wordpress.com/2008/01/06/using-import-address-table-hooking-for-testing/ для некоторых забавных побочных проектов дома .

1
ответ дан 5 December 2019 в 07:12
поделиться

Вы можете попробовать EasyHook, он пригодится. Однако нельзя исправить "общесистемные", для этого вам понадобится что-то вроде Proxy DLL.

http://www.codeplex.com/easyhook

0
ответ дан 5 December 2019 в 07:12
поделиться

Вы также можете попробовать NCodeHook lib ( http://newgre.net/ncodehook ), это бесплатно и мало.

3
ответ дан 5 December 2019 в 07:12
поделиться

Перехват API Win32 на самом деле невозможен в общесистемном смысле. Вы можете приблизить это, внедряя DLL в каждый процесс, а затем исправляя каждый процесс изнутри. Вы можете использовать исправление IAT (где вы исправляете вызывающий двоичный файл) или исправление в стиле обхода (где вы исправляете вызываемого).

Исправление вызывающего (исправление IAT) означает, что вам нужно перечислить каждую DLL, которая загружается в процесс и патчить каждый отдельно. Вам также потребуется подключить LoadLibrary , чтобы исправлять любые новые библиотеки DLL, которые загружаются на лету.

Исправление вызываемого (обходные пути) имеет то преимущество, что вам нужно исправить только одно местоположение для примените крючок ко всему процессу.

Вы должны вносить исправления для каждого процесса, даже если вы подключаете API из общих системных DLL; ОС будет вызывать копирование при записи, в результате чего, когда вы исправляете системную DLL, процессу предоставляется частная копия для исправления.

Внедрение DLL становится немного неприятным, и, опять же, есть несколько методов: AppInit_DLLs , который работает только для процессов, загружающих USER32.DLL (и имеет несколько новых ограничений в Vista и Windows 7), используя SetWindowsHookEx или используя CreateRemoteThread . Уровни целостности в Vista и Windows 7 затрудняют внедрение в процессы в масштабе всей системы. Ваше приложение должно быть запущено с правами администратора и с высоким уровнем целостности, чтобы иметь возможность успешно его реализовать.

Другой способ - подключить системные службы в режиме ядра. Это требует написания драйвера устройства, но в основном это метод, который Sysinternals Process Monitor использует (или, по крайней мере, однажды). Это проблема для 64-битных Vista и Win7 из-за PatchGuard и требований подписи драйверов. Вы можете отслеживать некоторые действия файловой системы с помощью драйверов фильтра файловой системы .

17
ответ дан 5 December 2019 в 07:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: