Привет!
Возник вопрос, надеюсь Вы поможете найти на него ответ
Короче говоря, есть Lower Filter Driver для DiskDrive class.
В фильтре обрабатывается запрос IRP_MJ_SCSI, и в зависимости от того, что происходит, чтение или запись, выполняются некоторые действия:
NTSTATUS STDCALL
ScsiHandler(IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp)
{
PDEVICE_EXTENSION DeviceExtension;
PIO_STACK_LOCATION Stack;
PSCSI_REQUEST_BLOCK Srb;
NTSTATUS Status;
DeviceExtension = DeviceObject->DeviceExtension;
Stack = IoGetCurrentIrpStackLocation(Irp);
Srb = Stack->Parameters.Scsi.Srb;
if (Srb->Function == SRB_FUNCTION_EXECUTE_SCSI)
{
PCDB Cdb = (PCDB)Srb->Cdb;
switch (Cdb->CDB10.OperationCode)
{
case SCSIOP_READ:
...
break;
case SCSIOP_WRITE:
...
break;
default:
DPRINT("Cdb->CDB10.OperationCode = %x", Cdb->CDB10.OperationCode);
IoSkipCurrentIrpStackLocation(Irp);
Status = IoCallDriver(DeviceExtension->TargetDeviceObject, Irp);
}
}
return Status;
}
Так вот вопрос заключается в том, можно ли (и если можно то как) здесь узнать имя файла, данные которого сейчас читают?
Или пишут
IO_STACK_LOCATION::FileObject нулевой, насколько я понял этот указатель используется только в случае Upper Filter (?)
Спасибо.