Пример драйвера диска Microsoft RAM - идеи для решения проблем с доступом?
Мне удалось скомпилировать и установить пример драйвера диска Microsoft RAM (VS2013 с WDK 8.1 - также с использованием примеров драйверов WDK 8.1).
В файле readme говорится, что после установки вы можете использовать RAM-диск из командной строки администратора. Вероятно, та же проблема, что и здесь: https://superuser.com/questions/344577/how-to-access-ramdisk-drive-from-non-admin-user-account-on-windows-xp
Ответом, приведенным в этой теме, я добавил этот код в функцию RamDiskEvtDeviceAdd:
status = WdfDeviceInitAssignSDDLString(DeviceInit,
&SDDL_DEVOBJ_SYS_ALL_ADM_RWX_WORLD_RWX_RES_RWX);
if (!NT_SUCCESS(status)) {
return status;
}
Это должно добавить права RWX для администратора, мира и зарезервированных учетных записей.
Теперь обычный пользователь может получить доступ к диску и скопировать файлы на оперативную память. Это также видно и доступно в проводнике (Windows 7). Но я все еще не могу удалить файлы (даже не администратор). Первая подсказка сообщает вам, что для удаления файлов требуются права администратора. Если вы подтвердите это приглашение, появится второе: "Для внесения изменений в этот файл требуются разрешения от каждого пользователя".
При просмотре свойств дисковода нет вкладки безопасности, которая позволяла бы вам проверять или предоставлять какие-либо права. Поэтому я думаю, что какой-то дескриптор безопасности отсутствует.
Я уже пытался заглянуть в другие реализации RAM-дисков, но они, вероятно, написаны с разными моделями драйверов (не WDF), которые в этом аспекте работают совершенно по-разному.
Я также пытался получить больше информации, изучая страницы MSDN относительно WDF, но не смог найти что-то полезное.
Некоторые люди могут спросить: почему бы вам не использовать работающее решение для оперативной памяти? Но актуальная проблема заключается в создании драйвера диска, который можно настроить для создания ошибок ввода-вывода по требованию. Аналогично этому решению для Linux: http://www.scylladb.com/2016/02/16/fault-injection-filesystem-software-testing/
Поэтому я подумал, что использование простого драйвера RAM-диска может быть хорошим началом. Любые комментарии, как исправить проблемы с правами на удаление, приветствуются.
1 ответ
У меня такая же проблема. Это мое решение:
DECLARE_CONST_UNICODE_STRING (MY_SDDL_STRING, L "D: P (A;; GA;;; SY) (A;; GA;;; BA) (A;; GA;;; WD) (A;; GA;;; RC)");
status = WdfDeviceInitAssignSDDLString (DeviceInit, & MY_SDDL_STRING);