0 / 0 / 0
Регистрация: 21.03.2015
Сообщений: 29
|
||||||
1 | ||||||
Отслеживание закрытия файла процессом, запущенным через CreateProcess23.07.2015, 18:18. Показов 5959. Ответов 49
Метки нет (Все метки)
Доброго времени суток!
Возникла нетривиальная(на мой взгляд) задачка: Открываем какой нибудь файл через какую нибудь программу(условно говоря file.docx с помощью MS Word) и нужно отследить закрытие этого файла. Запуск осуществляю с помощью CreateProcess, а именно:
Но есть одно но. Если при этом будет запущен ещё какой либо файл (например something.docx), то он запустится в том же процессе и в таком случае при закрытии отслеживаемого файла, процесс останется. И я не смогу своевременно отреагировать на его закрытие Вопрос в том можно ли как то отследить закрытие конкретного файла в программе?? Или же можно запустить процесс выполнения программы так, что бы при выполнении других файлов такого типа, они выполнялись в другом процессе?? Помогите пожалуйста(
0
|
23.07.2015, 18:18 | |
Ответы с готовыми решениями:
49
Как дождаться закрытия файла другим процессом/потоком Получить список dll, используемых запущенным процессом Отслеживание создания файлов чужим процессом Отслеживание закрытия программы. |
0 / 0 / 0
Регистрация: 21.03.2015
Сообщений: 29
|
||||||
09.09.2015, 12:23 [ТС] | 21 | |||||
Путь к Dll поменял на
Через монитор ресурсов смотрю связанные модули с процессом WINWORD.EXE, HookDll.dll там нет(( В чём ещё может быть проблема?
0
|
Ушел с форума
|
|
09.09.2015, 12:26 | 22 |
Где код ?
Писать в корень системного диска могут только администраторы и система. Может, дело еще в этом ?
0
|
0 / 0 / 0
Регистрация: 21.03.2015
Сообщений: 29
|
||||||||||||||||
09.09.2015, 12:41 [ТС] | 23 | |||||||||||||||
1. Путь к dll заменил на:
3. MessageBox из dll убрал 4. в Dll путь к логу поменял на: C:\\Temp\\temp.txt Код из dll всё равно не отрабатывает(Файл temp.txt не создаётся). Смотрю через монитор ресурсов связанные модули с процессом WINWORD.EXE, в списке нет моей dll(( В чём ещё может быть проблема? Полный код:
DLL:
0
|
Ушел с форума
|
||||||
09.09.2015, 12:58 | 24 | |||||
VirtualAlloc(Ex) и WriteProcessMemory работают с количеством байт.
wcslen возвращает количество символов. Правильно так:
0
|
0 / 0 / 0
Регистрация: 21.03.2015
Сообщений: 29
|
|
09.09.2015, 14:27 [ТС] | 25 |
Убежденный, Переделал на количество байт и всё равно dll не отработала((
Может я ещё где то допустил ошибку?
0
|
Ушел с форума
|
|
09.09.2015, 15:59 | 26 |
И снова спрошу: где код (последняя версия) ?
0
|
0 / 0 / 0
Регистрация: 21.03.2015
Сообщений: 29
|
|||||||||||
09.09.2015, 16:15 [ТС] | 27 | ||||||||||
Убежденный,
DLL:
0
|
Ушел с форума
|
|
09.09.2015, 16:31 | 28 |
А функция injectDLL вообще вызывается ?
И что-то мне кажется, все эти манипуляции с CreateToolhelp32Snapshot и поиском kernel32 лишены смысла. Все равно поток с CreateRemoteThread не запустится, пока не прогрузится kernel32 и все остальные статически прилинкованные dll-ки. Короче, в данном случае можно звать injectDLL сразу после успешного вызова CreateProcessW.
0
|
0 / 0 / 0
Регистрация: 21.03.2015
Сообщений: 29
|
||||||
09.09.2015, 16:50 [ТС] | 29 | |||||
injectDLL - вызывается, заходил туда отладчиком.
Удалил все махинации с CreateToolhelp32Snapshot и прочим. На результат никак не повлияло.
0
|
Ушел с форума
|
|
09.09.2015, 17:23 | 30 |
Как на счет проверить, что возвращают функции VirtualAllocEx, WriteVirtualMemory,
GetProcAddress и CreateRemoteThread ?
0
|
0 / 0 / 0
Регистрация: 21.03.2015
Сообщений: 29
|
||||||
09.09.2015, 17:56 [ТС] | 31 | |||||
Убежденный, проставил проверки. Всё корректно отрабатывает до конца, в консоль выводится только 2 сообщения последних строк injectDll(Injected thread id: threadId for pid: processId " и FINISH INJECT соответственно)
0
|
Ушел с форума
|
|
09.09.2015, 17:59 | 32 |
0
|
0 / 0 / 0
Регистрация: 21.03.2015
Сообщений: 29
|
||||||
09.09.2015, 18:19 [ТС] | 33 | |||||
Код из DLL не выполняется. под фразой "всё корректно отрабатывает до конца" я имел ввиду что все функции возвращают не нулевые значения и программа отрабатывает до конца
DLL
0
|
Ушел с форума
|
|
09.09.2015, 18:34 | 35 |
А ты уверен, что MS Office, который запускается из CreateProcessW,
может писать в C:\Windows\Temp ? У меня в эту папку без прав администратора даже заглянуть нельзя...
0
|
0 / 0 / 0
Регистрация: 21.03.2015
Сообщений: 29
|
|
09.09.2015, 18:39 [ТС] | 36 |
Через монитор ресурсов нашёл свою Dll в списке связанных модулей с процессом WINWORD.EXE. Но почему не отрабатывает DllMain из моей DLL? (не создаётся файл "C:\\Temp\\temp.txt")
Добавлено через 39 секунд Там папка c:\Temp\
0
|
09.09.2015, 21:27 | 38 |
Попробовал натравить свою поделку на Winword.exe (ver.2003). У меня лог нормально создается в c:\temp.
Может стоит последовать рекомендациям из моей темы и проверить каждую деталь.
0
|
0 / 0 / 0
Регистрация: 21.03.2015
Сообщений: 29
|
||||||
10.09.2015, 10:54 [ТС] | 39 | |||||
Написал создание файла используя CreateFile и WriteFile, вот только MessageBox не показывает сообщения, даже из первой строки DllMain, printf тоже. Поэтому мне кажется что код DLL совсем не отрабатывает. Мб Dll нужно компилировать с каким нибудь до ключом?(Использую VS 2015)
Да. существует. Word у меня 2013 версии. А в итоге в чём была Ваша ошибка? Dll:
0
|
10.09.2015, 11:41 | 40 |
Не имею понятия, о какой ошибке (моей) идет речь. У меня все нормально.
Укажите разрядность Вашего MS Office и версию ОС. Если найду время, попробую на нем.
0
|
10.09.2015, 11:41 | |
10.09.2015, 11:41 | |
Помогаю со студенческими работами здесь
40
Отслеживание закрытия программы Отслеживание закрытия диалога Отслеживание закрытия стороннего приложения Отслеживание закрытия формы javafx Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |