首页 > 其他分享 >FastIo driver

FastIo driver

时间:2023-10-24 23:44:43浏览次数:48  
标签:文件 调用 MDL IRP driver FastIo 接口

由于你的驱动将要绑定到文件系统驱动的上边,文件系统除了处理正常的IRP 之外,还要处理所谓的FastIo.FastIo是Cache Manager 调用所引发的一种没有irp 的请求。换句话说,除了正常的Dispatch Functions 之外,你还得为DriverObject 撰写另一组Fast Io Functions.这组函数的指针在driver->FastIoDispatch.

首先需要了解的是:FastIo 是独立于普通的处理IRP 的分发函数之外的另一组接口。但是他们的作用是一样的,就是由驱动处理外部给予的请求。而且所处理的请求也基本相同。其次,文件系统的普通分发例程和fastio 例程都随时有可能被调用。做好的过滤驱动显然应该同时过滤这两套接口。然而,一般都只介绍IRP 过滤的方法。Fastio 接口非常复杂。但是与IRP 过滤是基本一一对应的。只要了解了前者,后者很容易学会。

在开发的初期学习阶段,你可以简单的设置所有的fastio 例程返回FALSE 并不做任何事。这样这些请求都会通过IRP重新发送被你的普通分发函数捕获。有一定的效率损失,但是并不是很大。

NT 下FASTIO 是一套IO MANAGER 与DEVICE DRIVER 沟通的另外一套API. 在进行基于IRP 为基础的接口调用前, IO MANAGER 会尝试使用FAST IO 接口来加速各种IO 操作. FASTIO 本身的文档并不多见, 本篇就是要介绍一下FASTIO 接口.

FastIoCheckIfPossible, 此调用并不是IO MANAGER 直接调用. 而是被FsRtlXXX 系列函数调用. 用于确认读写操作是否可以用FASTIO 接口进行.

FastIoRead/FastIoWrite, 很明显, 是读写处理的调用.

FastIoQueryBasicInfo/FastIoQueryStandardInfo, 用于获取各种文件信息. 例如创建,修改日期等.

FastIoLock/FastIoUnlockSingle/FastIoUnlockAll/FastIoUnlockAllByKey,用于对文件的锁定操作.

在NT 中有2 种锁定需要存在。1.排他性锁. 2.共享锁. 排他性锁在写操作前获取,不准其他进程获得写操作权限, 而共享锁则代表需要读文件某区间. 禁止有写动作出现.在同一地址上, 如果有多个共享锁请求, 那是被允许的.

FastIoDeviceControl 用于提供NtDeviceIoControlFile 的支持.

AcquireFileForNtCreateSection/ReleaseFileForNtCreateSection 是NTFS 在映射文件内容到内存页面前进行的操作.

FastIoDetachDevice, 当REMOVABLE 介质被拿走后, FILE SYSTEM 的DEVICE 对象会在任意的时刻被销毁. 只有正确处理这个调用才能把上层DEVICE 和将要销毁的DEVICE 脱钩. 如果不解决这个函数, 系统会当.

FastIoQueryNetworkOpenInfo, 当CIFS 也就是网上邻居,更准确的说是网络重定向驱动尝试获取文件信息,会使用这个调用. 该调用是因为各种历史原因而产生. 当时设计CIFS 时为避免多次在网上传输文件信息请求, 在NT4 时传输协议增加了一个FileNetworkOpenInformation 的网络文件请求. 而FSD 则增加了这个接口. 用于在一次操作中获得所有的文件信息. 客户段发送FileNetworkOpenInformation, 服务器端的FSD 用本接口完成信息填写.

FastIoAcquireForModWrite, Modified Page Writer 会调用这个接口来获取文件锁. 如果实现这个接口. 则能使得文件锁定范围减小到调用指定的范围. 不实现此接口,整个文件被锁.

FastIoPrepareMdlWrite, FSD 提供MDL. 以后向此MDL 写入数据就代表向文件写入数据. 调用参数中有FILE_BOJECT 描述要写的目标文件.

FastIoMdlWriteComplete, 写操作完成. FSD 回收MDL.

FastIoReadCompressed, 当此调用被调用时, 读到的数据是压缩后的.应该兼容于标准的NT 提供的压缩库. 因为调用者负责解压缩.

FastIoWriteCompressed,当此调用被调用时, 可以将数据是压缩后存储.

FastIoMdlReadCompressed/FastIoMdlReadCompleteCompressed, MDL 版本的压缩读. 当后一个接口被调用时,MDL 必须被释放.

FastIoMdlWriteCompressed/FastIoMdlWriteCompleteCompressed, MDL 版本的压缩写.当后一个接口被调用时,MDL 必须被释放.

FastIoQueryOpen, 这不是打开文件的操作. 但是却提供了一个IRP_MJ_CREATE 的IRP. 我在以前版本的

SECUSTAR 的软件中错误地实现了功能. 这个操作是打开文件/获取文件基本信息/关闭文件的一个操作.

FastIoReleaseForModWrite,释放FastIoAcquireForModWrite 调用所占有的LOCK.

FastIoAcquireForCcFlush/FastIoReleaseForCcFlush FsRtl 会调用此接口,在LAZY WRITE 线程将要把修改后的文件数据写入前调用.获取文件锁.

【转】FastIo接口介绍-CSDN博客

标签:文件,调用,MDL,IRP,driver,FastIo,接口
From: https://www.cnblogs.com/hshy/p/17786042.html

相关文章

  • NetSuite Test Driver Account 如何查看系统邮件发送的历史记录
    title:NetSuiteTestDriverAccount如何查看系统邮件发送历史记录date:2023-10-015:55:48tags:[NetSuite]categories:NetSuiteNetSuiteTestDriverAccount在系统中很多时候无法正常发邮件到邮箱的。比如:订单的通知邮件,定时邮件,emailAPI发送的邮件。如何查看测试......
  • 安装chromedriver 118
    您可以按照以下步骤安装ChromeDriver118:首先,访问ChromeDriver的官方下载页面:https://sites.google.com/a/chromium.org/chromedriver/downloads在该页面中,找到适用于您操作系统的ChromeDriver118的下载链接,并点击下载。下载完成后,解压缩下载的文件。您将得到一个名为"chrom......
  • Pytorch深度学习环境配置 | NVIDIA-driver + Pytorch + miniconda
    本贴为实战,看理论请移步【地表最强】深度学习环境配置攻略|【nvidia-driver】,【cudatoolkit】,【cudnn】,【pytorch】为了验证我的环境配置方法没有问题,我特意租了两小时云服务器来从0配置环境。云服务器厂家:Ucloudubuntu22.043090*21.装NVIDIA-driver参考:http......
  • 将达梦数据库的JDBC驱动包 DmJdbcDriver18.jar 安装到本地 Maven 仓库
    将达梦数据库的JDBC驱动包DmJdbcDriver18.jar安装到本地Maven仓库 一、问题背景在博客《SpringBootMyBatisPlus整合达梦数据库》中写道,从 https://eco.dameng.com/download/ 中下载达梦JDBC驱动包,如下: JDK1.8 对应的JDBC驱动包为:DmJdbcDriver18.jar ......
  • 【转】,接上面3篇.Implement Sql Database Driver in 100 Lines of Go
    原文: https://vyskocil.org/blog/implement-sql-database-driver-in-100-lines-of-go/ -------------------- ImplementSqlDatabaseDriverin100LinesofGo2019.02.18Go database/sql definesinterfacesforSQLdatabases.Actualdrivermustbeimplemented......
  • 【地表最强】深度学习环境配置攻略 | 【nvidia-driver】, 【cuda toolkit】, 【cudnn
    更新截止到2023.10.161.要素:linux(ubuntu22.04)nvidia-driver(也叫做cudadriver):英伟达GPU驱动,命令:nvidia-smicuda(也叫做cudatoolkit):这个必须有。CUDA是NVIDIA创建的一个并行计算平台和编程模型(用这个来跑深度学习),命令:nvcc-Vcudnn:nvidia开发的深度学习算子库,用......
  • python chromedriver下载与安装方法
    当需要进行自动化测试或爬取网页数据时,Chrome浏览器的驱动程序(ChromeDriver)是一个关键组件。它允许控制和与Chrome浏览器进行交互。在本文中,将为介绍如何下载和安装ChromeDriver。什么是ChromeDriverChromeDriver是一个用于自动化控制和与GoogleChrome浏览器进行交互的驱动程序。......
  • MongoDB Node.js Driver and MongoClient All In One
    MongoDBNode.jsDriverandMongoClientAllInOneThenextgenerationNode.jsdriverforMongoDB$npmimongodb#OR$npmi-Smongodb#OR$npminstallmongodb--savehttps://mongodb.github.io/node-mongodb-native/index.htmlhttps://www.mongodb.com......
  • Selenium - 自动下载 webdriver
    背景很多浏览器会自动更新,但是driver不会自动更新。为了确保driver版本和浏览器匹配,可以使用第三方库webdriver_manager代码这个文件里封装了几个函数driver_seek:根据给定的目录,和文件名称,查找该目录下是否有这个文件driver_download:下载webdriver到指定目录,如果path......
  • nvidia-smi指令报错:Failed to initialize NVML: Driver/library version mismatch NVM
    nvidia-smi指令报错:FailedtoinitializeNVML:Driver/libraryversionmismatchNVMLlibraryversion:535.113我是刚开始没有nvidia-smi命令,输入后,提示我安装。aptinstallnvidia-340#version340.108-0ubuntu5.20.04.2,oraptinstallnvidia-utils-390......