21
1月
2016

8、IRP-MJ-DIRECTORY-CONTROL

摘要:

IRP_MJ_DIRECTORY_CONTROL标志在MicrosoftWin32中调用ReadDirectoryChangesW 或者 FindNextVolumeMountPoint 或在内核模式下调用ZwQueryDirectoryFile 函数时被标示。

关键字:IRP_MJ_DIRECTORY_CONTROL,IRP_MN_QUERY_DIRECTORY,FileBothDirectoryInformation,FileIdBothDirectoryInformation,File System Filter Drivers,文件过滤驱动。

文件驱动必须检查主函数码确定哪一种路经操作被请求,下面是主函数码及其功能:

  • IRP_MN_NOTIFY_CHANGE_DIRECTORY

       表示请求更改目录的通知。通常情况下,立即满足这一要求,文件系统驱动程序保存IRP在一个私有队列。当目录发生改变时,文件系统驱动程序执行通知,并出队完成IRP。

  • IRP_MN_QUERY_DIRECTORY

       指示一个查询请求。能够被查询的信息类型一般是文件系统相关的,一般包括以下几种:

  1. FileBothDirectoryInformation
  2. FileDirectoryInformation
  3. FileFullDirectoryInformation
  4. FileIdBothDirectoryInformation
  5. FileIdFullDirectoryInformation
  6. FileNamesInformation
  7. FileObjectIdInformation
  8. FileReparsePointInformation

注意 FileQuotaInformation 被 IRP_MJ_QUERY_QUOTA 代替。

执行请求的操作后,文件系统驱动程序应该完成IRP。

文件过滤驱动:

过滤驱动必须将IRP下发至堆栈的下层驱动。

操作参数

文件系统或过滤驱动调用IoGetCurrentIrpStackLocation 给定 IRP 的堆栈 (stack location) ,该堆栈用在下面用 IrpSp 表示。在进行一个目录控制请求时将主要采用如下的成员函数和参数等信息:

 DeviceObject

指向device object.

Irp->IoStatus

指向一个IO_STATUS_BLOCK 结构。该结构保存操作请求的完成状态和信息。

Irp->UserBuffer

指向一个调用者供的输出缓冲区,该缓冲区接收目录内容。

IrpSp->FileObject

指向的文件对象相关联的DeviceObject。

The IrpSp->FileObject parameter contains a pointer to the RelatedFileObject field, which is also a FILE_OBECT structure. The RelatedFileObject field of the FILE_OBJECT structure is not valid during the processing of IRP_MJ_DIRECTORY_CONTROL and should not be used.

IrpSp->Flags

下列标志将被设置给 IRP_MN_QUERY_DIRECTORY。

标志意义

SL_INDEX_SPECIFIED

Begin the scan at the entry in the directory whose index is given by IrpSp->Parameters.QueryDirectory.FileIndex.

SL_RESTART_SCAN

Begin the scan at the first entry in the directory. If this flag is not set, resume the scan from a previous IRP_MN_QUERY_DIRECTORY request.

SL_RETURN_SINGLE_ENTRY

返回所发现文件的第一个入口。

 

下列标志被设置给 IRP_MN_NOTIFY_CHANGE_DIRECTORY:

标志意义

SL_WATCH_TREE

如果设置为TRUE则此目录的子目录也可以查看。如果设置为FALSE则只有目录本身被查看。

 

IrpSp->MajorFunction

仅 IRP_MJ_DIRECTORY_CONTROL.

IrpSp->MinorFunction

下列之一:

  • IRP_MN_NOTIFY_CHANGE_DIRECTORY
  • IRP_MN_QUERY_DIRECTORY
IrpSp->Parameters.NotifyDirectory.CompletionFilter

更多信息请参考 FsRtlNotifyFullChangeDirectory的完成函数。

IrpSp->Parameters.NotifyDirectory.Length

Irp->UserBuffer.指向的缓冲区字节长度

IrpSp->Parameters.QueryDirectory.FileIndex

Index of the file at which to begin the directory scan. Ignored if the SL_INDEX_SPECIFIED flag is not set. This parameter cannot be specified in any Win32 function or kernel-mode support routine. Currently it is used only by the NT virtual DOS machine (NTVDM), which exists only on 32-bit NT-based platforms. Note that the file index is undefined for file systems, such as NTFS, in which the position of a file within the parent directory is not fixed and can be changed at any time to maintain sort order.

IrpSp->Parameters.QueryDirectory.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 结构。

FileQuotaInformation

此结构较老,由IRP_MJ_QUERY_QUOTA 代替。

FileReparsePointInformation

为目录返回FILE_REPARSE_POINT_INFORMATION 结构。

 

IrpSp->Parameters.QueryDirectory.FileName

指定目录内的文件可选名。

IrpSp->Parameters.QueryDirectory.Length

Irp->UserBuffer.指向的缓冲区字节长度

Categories: 驱动开发

Overall Rating (0)

0 out of 5 stars

Leave your comments

Post comment as a guest

0 Character restriction
Your text should be more than 3 characters
  • No comments found