如何在 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;
                       }
            }