Приветсвую всех! Возможен ли сабж? Не понимаю как это реализовать. Например, в экзешнике валяется текстовый файл (readme.txt ), который нужно запустить с помощью программы "по умолчанию" для данного расширения (может, с помощью notepad'a, а может, с помощью word'a), без сохранения файла на диск... Какая дикая мысль.. )))
запускать процесс программы с помошью которой ты собрался открывать этот файл, инжектится в неё, перехватывать OpenFile/CreateFile/GetFileSize/ReadFile/CreateFileMapping/MapViewOfFile итд. итп. и подсовывать свои данные не вызывая оригинальных обработчиков при попытке акцесса к файлу который ты открыть собираешься... первое, что пришло в голову, возможно есть и более оптимальные решения
Можно запустить то что требуется. Скопировать своё содержание в клиппорд и имитировать туда вставку. За кривоту способа не критикуйте))
Cr4sh Довольно непростой способ, тем более хотелось бы открывать файл программой "по умолчанию". asd Мне кажется, что это то, что надо. Щаз начну копать, если нетрудно, пособите комментами или ссылками якими...Спасибо. ЗЫ. Я надеюсь, туда не надо будет файловую систему внедрять? Честно говоря, понятия не имею как это делается, но интересно )))
зато самый надёжный, да и сложного я в нём ничего не вижу... программу по умолчанию для конкретного типа файлов можно узнать вызвав FindExecutable(), или найти в реестре вручную
Cr4sh Мне нужно об этом почитать. Думаю, что перехватывать OpenFile и CreateFile, в запускаемой программе, особого смысла не имеет, т.к. им передается только имя файла, которое будет в любом случае указывать на мой экзешник, а вот CreateFileMapping/MapViewOfFile ....Вобщем, спасибо за идею, буду смотреть.
Почему? Создавай процесс с параметром, где передавай имя txt файла(по-сути любой), т.е. в параметр lpCommandLine функции CreateProcess клади что-нибудь вроде "notepad.exe FakeFile.txt", при перехвате CreateFile смотри параметр lpFileName, если там "FakeFile.txt", то возвращай какой-нибудь фейковый Handle, допустим 0xDEADBEEF, после при срабатывании перехвата на ReadFile смотри что там в параметре hFile, если 0xDEADBEEF, то подсовывай свои данные в lpBuffer. Всё действительно достаточно просто.
W4FhLF Ага. Верно. Спасибо за подсказку. А что же там еще может быть, если я сам из экзешника собираюсь запустить процесс... PS Cr4sh,W4FhLF Ники у вас странные (в смысле непроизносимые). Шифруетесь ? )))
Aspire А что трудного запустить программу для файла по умолчанию , как писали, скопировать своё содержание в буффер обмена(клиппборд) и послать ей команду вставки(CTRL+V)? Или я что-то не допонимаю? Мож ось проще под это заточить?
wsd Видимо, в этом ничего сложного тоже нет, просто я такого никогда не делал, поэтому несовсем ясно представляю как это реализовать на ассемблере, а именно: скопировать содержимое в буфер обмена и послать ей комманду вставки. Тут видимо требуется всего лишь пара API функций, но я их еще не проходил )) (в этом плане мне ближе перехват). Скопировать содержимое в буффер - тут, наверное мне нужно почитать про функции Clipboard'a. Послать комманду вставки - как? Эмуляцией нажатия клавиш или нажатием пункта меню?
Aspire В MSDN это всё с лихвой описано. У клиппорда вообще мизерный апи. Посылать туда(что запустил) просто эмуляцию нажатия CTRL+V SendMessagge-ом он там как горячая клавиша сработает и вставится Ваше дело. Cr4sh,W4FhLF это лучшие вирусологи,троянщики и руткитчики и поэтому предлогали свою высшепилотажную технику. Но она тут не требуется. А ники у них действительно обычные. Успехов!
про клипбоард бред. хочу например открыть файл в проге, в которую нельзя из буфера вставлять. например формат pdf, или djvu, различные просмотрщики картинок тоже идет лесом. оптимум имхо через виртуальный диск.
n0name Он сначала упоминал тхт пдф джву и картинки(смотря в чём) конечно не прокатит а так твой вариант универсальней
n0name Ну и тогда, чтобы логично и красиво завершить данный топик, давайте кратенько рассмотрим алгоритм третьего предложенного варианта решения сабжа, тобишь создание виртуального диска. По первым двум вариантам, мне довольно доходчиво объяснили, можно даже в МСДН не заглядывать Про создание виртуального диска, я вообще ничего не знаю, поэтому рад буду узнать на какие функции обратить внимание.
wsd Поддерживаю. Драйвера я еще не начинал ломать ))) n0name Я понимаю, что краткость - сестра таланта, но только, наверное не в таком варианте