在过滤器驱动程序中删除文件时生成的 IRP 消息是什么?
What is the IRP message generated on file delete in a filter driver?
我正在尝试创建一个过滤器驱动程序来阻止文件删除操作,但我无法识别删除文件时的 IRP 消息。
我使用了下面的代码;它适用于 windows 7 但不适用于 windows 版本 8 或更高版本。
if (pIrp->MajorFunction==IRP_MJ_WRITE || pIrp->MajorFunction==IRP_MJ_SET_INFORMATION ||
pIrp->MajorFunction==IRP_MJ_SET_VOLUME_INFORMATION || pIrp->MajorFunction==IRP_MJ_SET_SECURITY ||
pIrp->MajorFunction==IRP_MJ_SET_QUOTA)
{
DbgPrint("fdrv :Read only operation block");
Irp->IoStatus.Status = STATUS_ACCESS_DENIED;//Deny Access
Irp->IoStatus.Information = 0;
IoCompleteRequest(Irp, IO_NO_INCREMENT);
return STATUS_ACCESS_DENIED;
}
存在 2 种删除文件的方法
- 使用
FILE_DELETE_ON_CLOSE
选项打开它(NtCreateFile
,
NtOpenFile
、IoCreateFile
或 NtDeleteFile
也内部开放
文件 FILE_DELETE_ON_CLOSE
)。在这种情况下将是
IRP_MJ_CREATE
- 用
FileDispositionInformation
调用 ZwSetInformationFile
或
FileDispositionInformationEx
。在这种情况下将是
IRP_MJ_SET_INFORMATION
--
union {
PVOID Buffer;
PFILE_DISPOSITION_INFORMATION pfdi;
PFILE_DISPOSITION_INFORMATION_EX pfdi_ex;
};
PIO_STACK_LOCATION IrpSp = IoGetCurrentIrpStackLocation(Irp);
switch (IrpSp->MajorFunction)
{
case IRP_MJ_SET_INFORMATION:
Buffer = Irp->AssociatedIrp.SystemBuffer;
switch (IrpSp->Parameters.SetFile.FileInformationClass)
{
case FileDispositionInformation:
if (pfdi->DeleteFile)
{
//
}
break;
case FileDispositionInformationEx:
if (pfdi_ex->Flags & FILE_DISPOSITION_DELETE)
{
//
}
break;
}
break;
case IRP_MJ_CREATE:
if (IrpSp->Parameters.Create.Options & FILE_DELETE_ON_CLOSE)
{
//
}
break;
}
我正在尝试创建一个过滤器驱动程序来阻止文件删除操作,但我无法识别删除文件时的 IRP 消息。
我使用了下面的代码;它适用于 windows 7 但不适用于 windows 版本 8 或更高版本。
if (pIrp->MajorFunction==IRP_MJ_WRITE || pIrp->MajorFunction==IRP_MJ_SET_INFORMATION ||
pIrp->MajorFunction==IRP_MJ_SET_VOLUME_INFORMATION || pIrp->MajorFunction==IRP_MJ_SET_SECURITY ||
pIrp->MajorFunction==IRP_MJ_SET_QUOTA)
{
DbgPrint("fdrv :Read only operation block");
Irp->IoStatus.Status = STATUS_ACCESS_DENIED;//Deny Access
Irp->IoStatus.Information = 0;
IoCompleteRequest(Irp, IO_NO_INCREMENT);
return STATUS_ACCESS_DENIED;
}
存在 2 种删除文件的方法
- 使用
FILE_DELETE_ON_CLOSE
选项打开它(NtCreateFile
,NtOpenFile
、IoCreateFile
或NtDeleteFile
也内部开放 文件FILE_DELETE_ON_CLOSE
)。在这种情况下将是IRP_MJ_CREATE
- 用
FileDispositionInformation
调用ZwSetInformationFile
或FileDispositionInformationEx
。在这种情况下将是IRP_MJ_SET_INFORMATION
--
union {
PVOID Buffer;
PFILE_DISPOSITION_INFORMATION pfdi;
PFILE_DISPOSITION_INFORMATION_EX pfdi_ex;
};
PIO_STACK_LOCATION IrpSp = IoGetCurrentIrpStackLocation(Irp);
switch (IrpSp->MajorFunction)
{
case IRP_MJ_SET_INFORMATION:
Buffer = Irp->AssociatedIrp.SystemBuffer;
switch (IrpSp->Parameters.SetFile.FileInformationClass)
{
case FileDispositionInformation:
if (pfdi->DeleteFile)
{
//
}
break;
case FileDispositionInformationEx:
if (pfdi_ex->Flags & FILE_DISPOSITION_DELETE)
{
//
}
break;
}
break;
case IRP_MJ_CREATE:
if (IrpSp->Parameters.Create.Options & FILE_DELETE_ON_CLOSE)
{
//
}
break;
}