Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > Access to open files?


Автор: Flyhigh 9.8.2005, 13:27
Думал решить проблему доступа к файлам которые уже открыты другим процессом перехватом вызова CreateFileA, CreateFileW и поставить FILE_SHARED_READ. Не получилось smile

Когда эксперементировал с 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
Цитата(Flyhigh @ 9.8.2005, 13:27)
Думал решить проблему доступа к файлам которые уже открыты другим процессом перехватом вызова CreateFileA, CreateFileW и поставить FILE_SHARED_READ. Не получилось
Почему не получилось ? Должно в принципе работать... Для теста вначале протестируй (перехватывай CreateFile) на своём же приложении, которое открывает файл монопольно...

Автор: Nastya 11.8.2005, 10:25
А можно поинтересоваться для чего так извращаться ? smile

Автор: 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
Цитата
2. Внедрение в процесс и чтение из файла (типа "я свой, дайте с файликом повозиться")

Расскажи плиз поподробней об этом случае. Ты имеешь ввиду запустить свой поток в процессе и потом унаследовать handle файла?

Автор: Гость_man 18.8.2005, 16:45
авжешь.
Основная проблема - как найти дескриптор файла, захваченного приложением ( NtQuerysystemInformation ).
Потом внедренный поток может сделать дубликат дескриптора или использовать оригинальный дескриптор (последнее очень стремно, т.к. процесс может в это же время задумать поиграться с этим файлом тоже) smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)