Windows - скачать файл по требованию, когда FileNotFound в файловой системе? - PullRequest
0 голосов
/ 14 ноября 2011

Я хочу установить своего рода «крючок» в Windows (должен работать только на Windows Server 2008 R2 и более поздних версиях), который, когда я запрашиваю файл на диске, а его там нет, затем запрашивает его с веб-сервера икэширует его локально.

Файлы являются неизменяемыми и имеют уникальные имена файлов.

Приложение, которое пытается открыть эти файлы, написано на C и просто открывает файл, используя операционную систему обычным способом.Скажем, он вызывает OpenFile с просьбой c:\scripts\1234.12.script, и тогда он просто откроет его как обычно.Если затем он запрашивает c:\scripts\1234.13.script, а это не так, то мой хук в операционной системе затем отправляется и запрашивает файл у моего веб-сервиса, загружает его, а затем возвращает этот файл таким, каким он был там все время.

Я бы предпочел написать это как процесс пользовательского режима (я никогда не писал драйвер для Windows), он должен запускаться только тогда, когда файлы не найдены в определенной папке, и я предпочел бы, если это возможно, написать егона управляемом языке (C # было бы идеально).Файлы имеют небольшой размер (<50 КБ), а веб-служба работает быстро, а интернет-соединение закрывается, поэтому я не ожидаю, что загрузка файла займет больше секунды. </p>

У меня вопрос - где я могуначать искать информацию об этом?И если кто-нибудь делал что-то подобное - знаете ли вы, какие у меня есть варианты (например, можно ли это сделать в C #?)?

Ответы [ 2 ]

1 голос
/ 14 ноября 2011

Вам потребуется создать драйвер фильтра файловой системы в режиме ядра, который будет перехватывать запросы на открытие таких файлов и «подделывать» эти файлы.Должен сказать, что это очень сложная задача даже для разработки драйверов.Наш продукт CallbackFilter сможет решить вашу проблему, однако механизм «подделки» файлов еще не готов (мы планируем эту функцию для CallbackFilter 3).До тех пор я не знаю каких-либо решений в пользовательском режиме (честно говоря, и решений в режиме ядра), которые бы решали вашу проблему.

Если вы можете изменить папку, к которой обращается приложение, то высоздайте виртуальную файловую систему и сопоставьте ее с буквой диска или папкой на диске NTFS.Из виртуальной файловой системы вы можете направлять большинство запросов на / с реального диска, а если файл не существует, вы можете загрузить файл и кэшировать его.Другой наш продукт, Callback File System , позволяет вам делать то, что я описал в пользовательском режиме.Если у вас есть одноразовое задание, которое вам нужно выполнить, и у вас нет на него бюджета, свяжитесь с нами в любом случае, и, возможно, мы сможем найти какое-то решение.Также существует решение с открытым исходным кодом с аналогичной (но не настолько всеобъемлющей) функциональностью под названием Dokan, но я не буду комментировать его качество.

0 голосов
/ 15 ноября 2011

Вы также можете попробовать Dokan , это с открытым исходным кодом, и вы можете проверить дискуссионную группу на вопрос и руководства.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...