FastIoQueryBasicInfo and FastIoQueryStandardInfo 
这两个操作为标准的NtQueryInformationFile API操作提供了支持,而FastIoQueryBasicInfo也经常被用来处理NtCreateFile的特定操作。文件的基本属性包括创建时间、访问时间和修改时间,以及隐藏、文件夹或其它属性等。文件的标准属性包括文件占用的空间、文件的大小、文件的硬连接号、被请求删除的标志,是否是文件夹的标识。 
由于这些信息经常在缓存中,所以它是FAST I/O操作的最佳候选。其实许多程序用这种方法来获取文件基本的信息,因为这种方法提高了操作的效率和程序的性能,如文件管理器程序(winfile.exe)。 
这两个Fast I/O例程有相同的接口: 
typedef BOOLEAN (*PFAST_IO_QUERY_ABSIC_INFO)( 
IN struct _FILE_OBJECT *FileObject, 
IN BOOLEAN Wait, 
OUT PFILE_BASIC_INFORMATION Buffer, 
OUT PIO_STATUS_BLOCK IoStatus, 
IN struct _DEVICE_OBJECT *DeviceObject); 
Wait参数表示调用者是否阻塞以等待获取信息的返回,如果设置为FALSE,则调用要么立刻完成,要么返回FALSE,如果返回FALSE,则会生成一个包含整个操作必要的上下文件的IRP。有趣的是在NT3.51中当Wait设置为FALSE时这两个例程将不被调用,当然这在以后的版本中会修改。 
这两个例程一但被调用,它们会查询文件对象第一次打开时保存的信息,这些信息也可能被实时变化,例如,文件的最近访问时间属性会被文件系统设置的当前的系统时间,当然设置这些属性取决于文件系统的实现。 
FastIoLock,FastIoUnLockSingle,FastIoUnLockAll,and FastIoUnLockAllByKey 
这些例程被用来控制特殊文件的加锁状态。对文件的加锁以字节为单位,所以可以对文件的多个字节进行加密。标准的NT文件系统使用文件系统运行时开发包(FsRtl函数)所提供的通用代码来验证锁权限并存储文件的加锁范围。锁状态通过调用NT API函数NtLockFile和NtUnLockFile来控制。 
在Windows NT中有两种锁,一种是排它锁,是写锁,说明加锁的地放要进行修改;另一种是共享锁,是读锁,说明加锁的地放用来的读的。多个共享锁在重叠操作中可以被授权,并且一直保存到释放为止。将各种加锁的信息存储起来在访问这些信息的时候会提高速度。 
FastIoLock的原型: 
Typedef BOOLEAN (*PFAST_IO_LOCK)( 
IN struct _FILE_OJBECT *FileObject, 
IN PLARGE_INTEGER FileOffset, 
IN PLARGE_INTEGER Length, 
PEPROCESS ProcessId, 
ULONG Key, 
BOOLEAN FailImmediately, 
BOOLEAN ExclusiveLock, 
OUT PIO_STATUS_BLOCK IoStatus, 
IN struct _DEVICE_OBJECT *DeviceObject 
); 
FileOffset 和Length参数对应加锁的范围,ProcessId标识加锁的进程,如果进行退出,锁将会清除。Key参数提供一个非透明的值,用来关联多个锁,例如调用FastIoUnLockAllByKey可以快速访问多个锁。FailImmediately用来标识当锁无效时是立刻返回失败还是阻塞直到锁可用。对于FsRtl函数,如果是无效的锁则忽略FailImmediately参数,函数返回FALSE。ExclusiveLock参数用来标识是排它锁还是共享锁。 
FastUnlockSingle例程被用来释放对文件的加锁,原型如下: 
Typedef BOOLEAN (*PFAST_IO_UNLOCK_SINGLE)( 
IN struct _FILE_OBJECT *FileObject, 
IN PLARGE_INTEGER FileOffset, 
IN PLARGE_INTEGER Length, 
PEPROCESS ProcessId, 
ULONG Key, 
OUT PIO_STATUS_BLOCK IoStatus, 
IN struct _DEVICE_OBJECT *DeviceObject 
); 
对大多文件系统来说,如果文件没有加锁,此例程总是返回TRUE,即使朝无效的锁,操作也会完成,因为用IRP来操作也同样会产生相同的错误。 
如果这个解锁操作成功,那么FileOffset,Length,ProcessId,和Key必须和相应的锁信息匹配,否则操作会返回错误STATUS_RANGE_NOT_LOCKED。FastIoUnlockAll例程用来释放特殊文件所有的锁,函数原型如下: 
typedef BOOLEAN(*PFAST_IO_UNLOCK_ALL)( 
IN struct _FILE_OBJECT *FileObject, 
PEPROCESS ProcessId, 
OUT PIO_STATUS_BLOCK IoStatus, 
IN struct _DEVICE_OBJECT *DeviceObject 
); 
在这种情况下,Fast I/O例程查找进程ProcessId所操作的文件所有的锁,并删除,无论是排它锁还是共享锁。这个例程常用在当系统由于关掉程序或终止程序而调用NtCloseFile时。 
FastIoUnlockAllByKey操作用来通过一些特殊的键值来删除一系列锁。原型如下: 
Typedef BOOLEAN (*PFAST_IO_UNLOCK_ALL_BY_KEY)( 
IN struct _FILE_OBJECT *FileObject, 
PVOID ProcessId, 
ULONG Key, 
OUT PIO_STATUS_BLOCK_IoStatus, 
IN struct _DEVICE_OBJECT *DeviceObject 
); 
提供这个例程是为了便于文件服务如SRV。在NT3.51的I/O管理器中没有出现这个调用。键值用来文件服务给远程客户机文件加锁时分配的。因为许多远程客户端,仅有ProcessId是远远不够的。同样,对于多文件服务器,仅使用键值也会在其它的文件服务器释放时导致错误。二者同时使用以确保正确操作并允许远程加锁。