| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Системное программирование и WinAPI > Access to open files? |
| Автор: Flyhigh 9.8.2005, 13:27 |
| Думал решить проблему доступа к файлам которые уже открыты другим процессом перехватом вызова CreateFileA, CreateFileW и поставить FILE_SHARED_READ. Не получилось Когда эксперементировал с MS Word'ом понял, что после открытия могут быть вызваны LockFile, LockFileEx сделал перехват и этих функций, убрал блокирование вообще - не помогло. Также убедился, что при открытии файла не используется SECURITY_INFORMATION. Если кто занимался таким, то может подскажет что надо сделать еще что-б получить этот треклятый доступ? |
| Автор: p0s0l 9.8.2005, 14:31 |
| Где-то арсенале Delphi я накатал небольшую функцию, которая позволяет читать/писать файлы, открытые монопольно (эксклюзивно), но работает она только под NT'шные системы + нужны административные права... Суть в том, что она обращается не к файлу, а к диску... В принципе, это не очень хороший способ... Всё-таки, правильнее делать через перехват функций... |
| Автор: p0s0l 9.8.2005, 14:48 | ||
| Также имеет смысл попробовать перехватывать NtCreateFile, NtOpenFile, NtLockFile... Добавлено @ 14:52
|
| Автор: Nastya 11.8.2005, 10:25 |
| А можно поинтересоваться для чего так извращаться ? |
| Автор: falcon785 12.8.2005, 11:50 |
| А ты уверен, что ядро ОС вообще даст такой доступ просто через WinAPI, если твой процесс пользовательского уровня, а управление разделяемыми ресурсами, в частности файлами, осуществляется на уровне ядра? |
| Автор: Гость_man 18.8.2005, 15:06 |
| способы в порядке нарастания сложности (читай: "увеличения массы топора для заточки карандашей"): 1. DuplicateHandle (MapViewOfFile в случае мап-файлов) 2. Внедрение в процесс и чтение из файла (типа "я свой, дайте с файликом повозиться") 3. Чтение секторов с диска 4. Использования драйвера для первых двух случаев у меня есть утилита готовая (проверял на Outlook.pst и mssql\master.dbf) вопрос модератору: можно как-нить восстановить мой аккаунт старый man2002ua? или хоть грохнуть его, я пересоздам. |
| Автор: Flyhigh 18.8.2005, 16:02 | ||
Расскажи плиз поподробней об этом случае. Ты имеешь ввиду запустить свой поток в процессе и потом унаследовать handle файла? |
| Автор: Гость_man 18.8.2005, 16:45 |
| авжешь. Основная проблема - как найти дескриптор файла, захваченного приложением ( NtQuerysystemInformation ). Потом внедренный поток может сделать дубликат дескриптора или использовать оригинальный дескриптор (последнее очень стремно, т.к. процесс может в это же время задумать поиграться с этим файлом тоже) |