Пример драйвера диска 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);

Другие вопросы по тегам