Доступ к одному и тому же ресурсу при перезагрузке в Windows

Я запишу что-нибудь в файл/память непосредственно перед выключением системы или службой. При следующем перезапуске системы возможен ли доступ к тому же файлу или к той же памяти на диске до загрузки файловой системы? Фактическое требование таково: у нас есть драйвер, который находится между драйверами уровня тома и драйвером файловой системы... в той части кода драйвера я хочу получить доступ к некоторой памяти или файлу.

Спасибо и с уважением,
Кальвин


person rplusg    schedule 31.07.2009    source источник


Ответы (2)


Логично здесь прочитать/записать это в реестр, если он не слишком велик. Есть ли причина, по которой вы не хотите использовать реестр?

Если вам нужен доступ к большим данным, и вы пишете фильтр тома или устройства и не можете полагаться на функции ZwOpen/Read/Write/Close в ядре, можно было бы создать файл в пользовательском режиме, получить его имя устройства и цепочку кластера. и сохранить их в реестре. При следующей загрузке вы можете получить устройство и кластеры из реестра и выполнить на них прямой ввод-вывод.

person KIV    schedule 31.07.2009
comment
да, данные намного больше 12 МБ (думаю, регистр может хранить только 12), кроме того, ни один клиент не соглашается использовать весь свой реестр. - person rplusg; 31.07.2009
comment
Затем создайте файл размером 12 МБ, получите цепочку кластеров и используйте ее. - person KIV; 31.07.2009
comment
Спасибо за ответ, я попробую, любой пример псевдокода поможет намного лучше... - person rplusg; 03.08.2009
comment
Как в пользовательском режиме, так и в режиме ядра (где вы предпочитаете) вы можете инициализировать хранилище данных следующим образом: 1. Создайте файл на загрузочном диске FS 2. Измените его размер до 12 МБ (заполните 12 МБ нулями или используйте API для установки размера файла) 3. Используя FSCTL_GET_RETRIEVAL_POINTERS, получите информацию о распределении 4. Сохраните эту информацию о распределении в реестре Вы можете использовать хранилище данных следующим образом: 1. Считайте информацию о распределении из реестра 2. Создайте простые функции чтения/записи, которые записывают на физический диск, используя информацию о кластере из реестра, надеюсь, это поможет - person KIV; 03.08.2009

Поскольку вы хотите получить к нему доступ до загрузки файловой системы, моя первая мысль — выделить и использовать блок дискового пространства на жестком диске вне файловой системы. Вы можете создать скрытый мини-раздел на диске и использовать низкоуровневые команды ввода-вывода для чтения и записи данных.

Это обычная задача в мире встроенных систем, и мы часто реализуем ее, добавляя в систему какое-либо энергонезависимое запоминающее устройство (флеш-память, DRAM с батарейным питанием и т. д.) и считывая и записывая на это устройство. Поскольку у вас, вероятно, нет такого же уровня контроля над доступным оборудованием, как у разработчиков встраиваемых систем, самым близким аналогом, который я могу придумать, было бы резервирование фрагмента пространства на физическом диске, с которого вы можете читать без необходимости монтировать как файловая система. Выделенный мини-раздел может работать лучше всего, потому что, если вы знаете его размер, вы можете рассматривать его как один большой буфер прямого доступа и избежать проблем с именами файлов, файловыми системами и т. д.

person bta    schedule 31.07.2009