如何在 windows 的旧版过滤器驱动程序中阻止创建文件和文件夹
How to block file and folder creation in Legacy filter driver for windows
我正在尝试为 windows 创建旧版筛选器驱动程序以阻止外部存储设备中的 "creation of file and folder"。
我尝试使用以下代码
if( lDeviceType==cwUSBDRIVE || lDeviceType==cwEXTERNALHDD)
{
if(irpSp->MajorFunction==IRP_MJ_CREATE)
{
if((irpSp->Parameters.Create.Options)&FILE_DIRECTORY_FILE)
{
Irp->IoStatus.Status = STATUS_ACCESS_DENIED;//Deny Access
Irp->IoStatus.Information = 0;
IoCompleteRequest(Irp, IO_NO_INCREMENT);
return STATUS_ACCESS_DENIED;
}
else if((irpSp->Parameters.Create.Options)&FILE_NON_DIRECTORY_FILE)
{
Irp->IoStatus.Status = STATUS_ACCESS_DENIED;//Deny Access
Irp->IoStatus.Information = 0;
IoCompleteRequest(Irp, IO_NO_INCREMENT);
return STATUS_ACCESS_DENIED;
}
}
}
在使用代码时它会阻止 file/folder 创建。但它也阻止了从设备复制文件和打开文件的操作。
我需要阻止创建 file\folder 并允许从设备复制和打开文件。
非常感谢@RbMm。
使用 CREATE DISPOSITION 解决了这个问题。下面我发布了我用来解决这个问题的代码。作为对他人的参考,
if((irpSp->Parameters.Create.Options)&FILE_DIRECTORY_FILE)
{
if((irpSp->Parameters.Create.Options >> 24) == FILE_CREATE)
{
Irp->IoStatus.Status = STATUS_ACCESS_DENIED;//Deny Access
Irp->IoStatus.Information = 0;
IoCompleteRequest(Irp, IO_NO_INCREMENT);
return STATUS_ACCESS_DENIED;
}
}
else if((irpSp->Parameters.Create.Options)&FILE_NON_DIRECTORY_FILE)
{
if((irpSp->Parameters.Create.Options >> 24) == FILE_CREATE)
{
Irp->IoStatus.Status = STATUS_ACCESS_DENIED;//Deny Access
Irp->IoStatus.Information = 0;
IoCompleteRequest(Irp, IO_NO_INCREMENT);
return STATUS_ACCESS_DENIED;
}
}
我正在尝试为 windows 创建旧版筛选器驱动程序以阻止外部存储设备中的 "creation of file and folder"。
我尝试使用以下代码
if( lDeviceType==cwUSBDRIVE || lDeviceType==cwEXTERNALHDD)
{
if(irpSp->MajorFunction==IRP_MJ_CREATE)
{
if((irpSp->Parameters.Create.Options)&FILE_DIRECTORY_FILE)
{
Irp->IoStatus.Status = STATUS_ACCESS_DENIED;//Deny Access
Irp->IoStatus.Information = 0;
IoCompleteRequest(Irp, IO_NO_INCREMENT);
return STATUS_ACCESS_DENIED;
}
else if((irpSp->Parameters.Create.Options)&FILE_NON_DIRECTORY_FILE)
{
Irp->IoStatus.Status = STATUS_ACCESS_DENIED;//Deny Access
Irp->IoStatus.Information = 0;
IoCompleteRequest(Irp, IO_NO_INCREMENT);
return STATUS_ACCESS_DENIED;
}
}
}
在使用代码时它会阻止 file/folder 创建。但它也阻止了从设备复制文件和打开文件的操作。
我需要阻止创建 file\folder 并允许从设备复制和打开文件。
非常感谢@RbMm。 使用 CREATE DISPOSITION 解决了这个问题。下面我发布了我用来解决这个问题的代码。作为对他人的参考,
if((irpSp->Parameters.Create.Options)&FILE_DIRECTORY_FILE)
{
if((irpSp->Parameters.Create.Options >> 24) == FILE_CREATE)
{
Irp->IoStatus.Status = STATUS_ACCESS_DENIED;//Deny Access
Irp->IoStatus.Information = 0;
IoCompleteRequest(Irp, IO_NO_INCREMENT);
return STATUS_ACCESS_DENIED;
}
}
else if((irpSp->Parameters.Create.Options)&FILE_NON_DIRECTORY_FILE)
{
if((irpSp->Parameters.Create.Options >> 24) == FILE_CREATE)
{
Irp->IoStatus.Status = STATUS_ACCESS_DENIED;//Deny Access
Irp->IoStatus.Information = 0;
IoCompleteRequest(Irp, IO_NO_INCREMENT);
return STATUS_ACCESS_DENIED;
}
}