我正在尝试为 Windows 创建一个旧版过滤器驱动程序,以阻止在外部存储设备中“创建文件和文件夹”。
我尝试使用以下代码
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;
}
}
}
在使用代码时,它会阻止文件/文件夹的创建。但它也会阻止从设备复制文件和打开文件操作。
我需要阻止创建文件\文件夹并允许从设备复制并打开文件。
最佳答案
非常感谢,@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;
}
}
关于c - 如何阻止在 Windows 旧版过滤器驱动程序中创建文件和文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51517213/