Самоучитель по программированию систем защиты

       

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



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



Данный пример обработки запросов чтения/записи демонстрирует получение адреса буфера для чтения/записи и его длины. Такой код вставляется в обработчик диспетчерских функций MajorFunction[IRP__MJ_READ], MajorFuriction[IRP_MJ_WRITE].

//получение адреса буфера для чтения/записи

//в случае буферизованного ввода/вывода

BufferAddress = Irp->AssociatedIrp.SystemBuffer/

//в случае прямого ввода/вывода

BufferAddress = MmGetSystemAddressForMdl(Irp->MdlAddress)/ //в случае Neither i/o

BufferAddress = Irp->AssociatedIrp.UserBuffer; //получение длины буфера для чтения/записи stack = = loGetCurrentlrpStackLocation ( Irp );

BufferLength = stack->Parameters.Read.Length;



Содержание раздела