作的 FLT_IO_PARAMETER_BLOCK 结构的 MajorFunction 字段IRP_MJ_DIRECTORY_CONTROL时使用的联合组件。
语法
typedef union _FLT_PARAMETERS {
... ;
union {
struct {
ULONG Length;
PUNICODE_STRING FileName;
FILE_INFORMATION_CLASS FileInformationClass;
ULONG POINTER_ALIGNMENT FileIndex;
PVOID DirectoryBuffer;
PMDL MdlAddress;
} QueryDirectory;
struct {
ULONG Length;
ULONG POINTER_ALIGNMENT CompletionFilter;
ULONG Spare1;
ULONG POINTER_ALIGNMENT Spare2;
PVOID DirectoryBuffer;
PMDL MdlAddress;
} NotifyDirectory;
} DirectoryControl;
... ;
} FLT_PARAMETERS, *PFLT_PARAMETERS;
成员
DirectoryControl:包含以下成员的结构。
QueryDirectory:用于IRP_MN_QUERY_DIRECTORY作的联合组件。
长度: QueryDirectory.DirectoryBuffer 成员指向的缓冲区的长度(以字节为单位)。
FileName:指向包含指定目录中文件名称 的UNICODE_STRING 结构的指针。
FileInformationClass:指定下面所述的值之一。
价值 含义 FileBothDirectoryInformation 返回每个文件的 FILE_BOTH_DIR_INFORMATION 结构。 FileDirectoryInformation 返回每个文件的 FILE_DIRECTORY_INFORMATION 结构。 FileFullDirectoryInformation 返回每个文件的 FILE_FULL_DIR_INFORMATION 结构。 FileIdBothDirectoryInformation 返回每个文件的 FILE_ID_BOTH_DIR_INFORMATION 结构。 FileIdFullDirectoryInformation 返回每个文件的 FILE_ID_FULL_DIR_INFORMATION 结构。 FileNamesInformation 返回每个文件的 FILE_NAMES_INFORMATION 结构。 FileObjectIdInformation 返回每个文件的 FILE_OBJECTID_INFORMATION 结构。 FileReparsePointInformation 返回目录的单个 FILE_REPARSE_POINT_INFORMATION 结构。 FileIndex:目录扫描开始的文件的索引。 如果未设置SL_INDEX_SPECIFIED标志,则忽略。 此参数不能在任何 Win32 函数或内核模式支持例程中指定。 目前,它仅由基于 32 位 NT 的作系统上的 NT 虚拟 DOS 计算机(NTVDM)使用。 请注意,文件索引对于文件系统(如 NTFS)未定义,其中父目录中的文件位置未固定,可以随时更改以保持排序顺序。
DirectoryBuffer:指向调用方提供的输出缓冲区的指针,该缓冲区接收有关目录内容的请求信息。 此成员是可选的,如果 QueryDirectory.MdlAddress 中提供了 MDL,则可以为 NULL。 请参阅 “备注”。
MdlAddress:用于描述 QueryDirectory.DirectoryBuffer 成员指向的缓冲区的内存描述符列表(MDL)的地址。 此成员是可选的,如果 QueryDirectory.DirectoryBuffer 中提供了缓冲区,则可以为 NULL。 请参阅 “备注”。
NotifyDirectory:用于IRP_MN_NOTIFY_CHANGE_DIRECTORY作的联合组件。
长度: NotifyDirectory.DirectoryBuffer 成员指向的缓冲区的长度(以字节为单位)。
CompletionFilter:标志的位掩码,这些标志指定对文件或目录的更改类型,这些更改应导致通知列表中的 IRP 完成。 下面描述了可能的标志值。
旗 含义 FILE_NOTIFY_CHANGE_FILE_NAME 此目录中已添加、删除或重命名文件。 FILE_NOTIFY_CHANGE_DIR_NAME 已创建、删除或重命名子目录。 FILE_NOTIFY_CHANGE_NAME 此目录的名称已更改。 FILE_NOTIFY_CHANGE_ATTRIBUTES 此文件的属性的值(如上次访问时间)已更改。 FILE_NOTIFY_CHANGE_SIZE 此文件的大小已更改。 FILE_NOTIFY_CHANGE_LAST_WRITE 此文件的上次修改时间已更改。 FILE_NOTIFY_CHANGE_LAST_ACCESS 此文件的上次访问时间已更改。 FILE_NOTIFY_CHANGE_CREATION 此文件的创建时间已更改。 FILE_NOTIFY_CHANGE_EA 已修改此文件的扩展属性。 FILE_NOTIFY_CHANGE_SECURITY 此文件的安全信息已更改。 FILE_NOTIFY_CHANGE_STREAM_NAME 此目录中已添加、删除或重命名文件流。 FILE_NOTIFY_CHANGE_STREAM_SIZE 此文件流的大小已更改。 FILE_NOTIFY_CHANGE_STREAM_WRITE 此文件流的数据已更改。 备用 1:当前未使用。
备用 2:当前未使用。
DirectoryBuffer:指向调用方提供的输出缓冲区的指针,该缓冲区接收有关目录内容的请求信息。 此成员是可选的,如果 NotifyDirectory.MdlAddress 中提供了 MDL,则可以为 NULL。 请参阅 “备注”。
MdlAddress:描述 NotifyDirectory.DirectoryBuffer 成员指向的缓冲区的 MDL 的地址。 此成员是可选的,如果 NotifyDirectory.DirectoryBuffer 中提供了缓冲区,则可以为 NULL。 请参阅 “备注”。
注解
IRP_MJ_DIRECTORY_CONTROL作的FLT_PARAMETERS结构包含回调数据(FLT_CALLBACK_DATA)结构表示的基于 IRP 的目录控制信息作的参数。 它包含在FLT_IO_PARAMETER_BLOCK结构中。
如果同时提供 DirectoryBuffer 和 MdlAddress 缓冲区,则建议使用 MDL。 DirectoryBuffer 指向的内存在调用进程的上下文中访问用户模式地址时或者它是内核模式地址时有效。
如果微型筛选器更改 MdlAddress 的值,则在其后作回调之后,筛选器管理器将释放当前存储在 MdlAddress 中的 MDL 并还原 MdlAddress 的上一个值。
IRP_MJ_DIRECTORY_CONTROL是基于 IRP 的作。
要求
| 要求类型 | 要求 |
|---|---|
| 标题 | Fltkernel.h (包括 Fltkernel.h) |
另请参阅
FILE_REPARSE_POINT_INFORMATION
FltNotifyFilterChangeDirectory
FsRtlNotifyFilterChangeDirectory