Курсовая работа: Разработка драйвера виртуального жесткого диска

Если процедура RamDskAddDevice вызвана в первый раз, создаем объект устройство с типом дисковый накопитель (FILE_DEVICE_DISK) и инициализируем расширение устройства DEVICE_EXTENSION:

status = IoCreateDevice(

DriverObject,

sizeof(DEVICE_EXTENSION),

&uniDeviceName,

FILE_DEVICE_DISK ,

(FILE_DEVICE_SECURE_OPEN),

FALSE,

&functionDeviceObject);


Если создание прошло успешно, мы читаем параметры диска из реестра и устанавливаем начальное состояние устройства остановлено (STOPPED) в расширении устройства, а также устанавливаем флаги сигнализирующие о том, что мы используем прямой метод передачи данных (DO_DIRECT_IO) и процедуры драйвера находятся в страничной памяти(DO_POWER_PAGABLE):

RamDskQueryDiskRegParameters(&driverExtension->RegistryPath,&devExt->DiskRegInfo);

devExt->DevState = STOPPED; // состояние остановлен

// Установим флаги

functionDeviceObject->Flags |= DO_POWER_PAGABLE;

functionDeviceObject->Flags |= DO_DIRECT_IO;

// Резервируем память под образ диска

devExt->DiskImage =

ExAllocatePoolWithTag ( NonPagedPool,

devExt->DiskRegInfo.DiskSize,

RAMDSK_TAG_DISK ) ;

Последней операцией мы резервируем память в нестраничном пуле под образ диска(размер образа devExt->DiskRegInfo.DiskSize байт).

Т.к. выделенная память может содержать произвольные данные, необходимо записать метаданные файловой системы и подсчитать геометрию диска, что делается вызовом

RamDskFormatDisk( functionDeviceObject );

Создаем символическую ссылку, которая ассоциирует с нашим драйвером указанную в параметрах букву диска и имеет формат «\DosDevices\X:», где «Х» - буква диска.


RtlInitUnicodeString( &uniWin32Name, DOS_DEVICE_NAME );

devExt->SymbolicLink.MaximumLength = DOS_DEVNAME_LENGTH;

devExt->SymbolicLink.Length = uniWin32Name.Length;

RtlCopyUnicodeString( &(devExt->SymbolicLink), &uniWin32Name );

RtlAppendUnicodeStringToString(&(devExt->SymbolicLink),&(devExt->DiskRegInfo.DriveLetter));

К-во Просмотров: 561
Бесплатно скачать Курсовая работа: Разработка драйвера виртуального жесткого диска