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

status = IoCreateSymbolicLink( &devExt->SymbolicLink, &uniDeviceName );

Если символическая ссылка создана без ошибок, то установим в расширении устройства флаг, что символическая ссылка создана и устройство подключается к стеку устройств:. При выгрузке драйвера если флаг установлен будет удаляться и символическая ссылка драйвера:

devExt->Flags |= FLAG_LINK_CREATED;

devExt->LowerDeviceObject = // подключение к стеку устройств

IoAttachDeviceToDeviceStack( functionDeviceObject, PhysicalDeviceObject );

// Сбросим флаг DO_DEVICE_INITIALIZING

functionDeviceObject->Flags &= ~DO_DEVICE_INITIALIZING;

// устройство добавлено успешно

driverExtension->DeviceInitialized = TRUE;

Последней операцией устанавливается признак DeviceInitialized расширения драйвера, что устройство добавлено.

3.4.2 Обработка запросов записи/чтения

Когда пользовательское приложение или компонент ядра пытается открыть драйвер виртуального диска для записи или чтения, то диспетчер ввода вывода формирует запросы IRP с кодом IRP_MJ_CREATE. При закрытии обрабатывается запрос IRP_MJ_CLOSE. Особых действий в обработке этих пакетов не требуется, поэтому драйвер возвращает успешный статус завершения. В данном драйвере оба пакета обрабатываются в одной процедуре RamDskCreateClose:

switch ( irpStack->MajorFunction )

{

case IRP_MJ_CREATE:

DBGPRINT( DBG_COMP_INIT, DBG_LEVEL_INFO, ("IRP_MJ_CREATE (%p)\n", Irp) );

COMPLETE_REQUEST( Irp, status, 0 );

break;

case IRP_MJ_CLOSE:

DBGPRINT( DBG_COMP_INIT, DBG_LEVEL_INFO, ("IRP_MJ_CLOSE (%p)\n", Irp) );

COMPLETE_REQUEST( Irp, status, 0 );

break;

default:

status = STATUS_NOT_IMPLEMENTED;

COMPLETE_REQUEST( Irp, status, 0 );

ASSERTMSG("BUG: we should never get here", 0);

break;

} // switch

В качестве проверки, если мы получили пакет с другим кодом, то возвратим ошибочный статус.

Обработка запросов на запись или чтение , также реализуется в одной процедуре, т.к. отличия в действиях заключаются в направлении копирования данных: из буфера в образ диска или наоборот. Для выполнения запроса, требуется, чтобы виртуальный диск находился в состоянии WORKING:

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