Я не могу себе представить, почему Microsoft выпустит образец ramdisk без установки своих разрешений, но они сделали ... так что по умолчанию это разрешения только для администратора.
Вам необходимо вызвать WdfDeviceInitAssignSDDLString() из RamDiskEvtDeviceAdd(), после вызова WdfDeviceInitAssignName() и перед вызовом WdfDeviceCreate(). Обратите внимание, что эта функция доступна только в том случае, если вы ссылаетесь на файл wdmsec.lib, который вам нужно добавить в файл "sources". И вы, вероятно, захотите использовать одну из строк определения ACL в wdmsec.h, хотя вы можете написать свою собственную, если хотите изучить ее структуру.
Другая проблема с примером драйвера Microsoft ramdisk заключается в том, что он не будет работать выше 32 МБ (на самом деле он будет работать только до 31,99 МБ), потому что код не обрабатывает переполнение 16-битного bootSector-> bsSectors; за пределами общего сектора 0x0000FFFF следует установить нулевое значение bootSector-> bsSectors и использовать вместо этого 32-разрядный bootSector-> bsHugeSectors.
Обратите внимание, что после исправления проблемы bootSector-> bsHugeSectors вы настраиваете себя на исчерпание невыгружаемой памяти ядра, если вы не будете осторожны ... хотя в большинстве случаев вы в безопасности до 96 МБ, поскольку в большинстве (современных) В вашей системе WinXP доступно 128 МБ памяти невыгружаемого ядра. Только не забывайте, что ваш драйвер ramdisk - не единственное, что использует пул невыгружаемых страниц.