Доброго времени суток!
Есть зашифрованный файл (как расшифровать знаю) он на диске или CD-ROM. Хочется его открыть ActivX контролом, но тот, естественно, понимает только нешифрованные файлы, и в качестве аргумента при открытии берёт только имя файла. Помогите пл-з как бы это всё провернуть не создавая временных файлов?
Здравствуйте zdima, Вы писали:
Z>Доброго времени суток! Z>Есть зашифрованный файл (как расшифровать знаю) он на диске или CD-ROM. Хочется его открыть ActivX контролом, но тот, естественно, понимает только нешифрованные файлы, и в качестве аргумента при открытии берёт только имя файла. Помогите пл-з как бы это всё провернуть не создавая временных файлов?
Перехвати у него [Zw]{Create|Open}File или что он там использует.
Здравствуйте zdima, Вы писали:
Z>Здравствуйте vasketsov, Вы писали:
V>>Перехвати у него [Zw]{Create|Open}File или что он там использует.
Z>Это как?
Как перехватывать — писать не буду, спросите у Поиска или пряво у Рихтера.
Логика такая.
При открытии файла этим контролом надо его открыть самому и расшифровать в память, а потом возвращать на ReadFile/WriteFile/GetFileSize/.. не то, что на самом деле в файле хранится, а из своего.
А еще можно открыть проекцию файла и заставить контрол работать с ней, начиная от задания ее имени (секции — именованый объект, правда, парсер подсистемы Win32 ее имя не пропустит имхо) и кончая подменой хэндла. Но тут по полной программе CreateRemoteThread/ReadVirtualMemory/WriteVirtualMemory или еще ниже. Можно и в ТОМ процессе создать поток, который бы этим и занимался.
А еще можно открыть NamedPipe и отдать в контрол его (канала) имя; наверное, самый простой вариант, но не факт что будет работать из-за ряда ограничений.