问题标签 [irp]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
2075 浏览

windows-7 - MiniFilter 驱动程序 - 修改 IRP_MJ_CLOSE 和 IRP_MJ_CREATE 上的文件字节

我想在关闭文件时更改文件,并在打开文件时撤消更改。它有点像加密驱动程序,只是我不想加密文件。

我在 Visual Studio 2012 中使用 WDK8 创建了一个新的“过滤器驱动程序:文件系统微型过滤器”项目,并将 PreCreate、PostCreate、PreClose 和 PostClose 注册为回调函数。

例如,在其字节为 {72,101,108,108,111}(“Hello”)的文件的 IRP_MJ_CLOSE 上,我希望在 PostClose 函数之后,文件在硬盘上看起来像这样:{10,11,12,72,101,108,108,111}。

我怀疑这并不像这样简单:

我想要一些关于这个主题的指导。

还有什么是调试这个的最佳方法?我还没有找到打印到 Windows 7 调试的方法。

谢谢!gfgqtmakia。

编辑:我已经阅读了http://code.msdn.microsoft.com/windowshardware/swapBuffer-File-System-6b7e6e2d但我认为它对我没有帮助,因为它是用于读/写的,我没有不想处理。

EDIT2:或者我应该在 PreCreate 和 PostClose 中进行更改,当文件在硬盘驱动器上而不是在 IRP 中间时,然后我不需要“即时”处理缓冲区,而是在磁盘?

0 投票
1 回答
287 浏览

windows - WdfRequestIsCanceled 与 WdfRequestMarkCancelable

谁能列出在 wdf 中使用以下两种方法取消 IO 的优缺点?1) 使用 WdfRequestMarkCancelable() 将请求标记为可取消。提供取消例程并同步完成路径。2) 在处理 IRP 时继续使用 WdfRequestIsCanceled() 进行轮询。根据返回值完成。

我知道 WdfRequestIsCanceled() 是一种轮询方法,而 WdfRequestMarkCancelable () 是异步的。但是 WdfRequestMarkCancelable() 是否值得为同步完成/取消路径付出额外的努力?

感谢您的投入。

0 投票
1 回答
227 浏览

c - 如何获取发送 IRP 请求的模块

我有一个内核驱动程序。我在进程中的 dll(注入的 dll)向该驱动程序发送 IRP 请求。这个驱动程序如何获得这个模块句柄?类似IoGetRequestorProcess(Irp)但模块句柄而不是进程的东西。

0 投票
1 回答
728 浏览

windows - 从 UMDF 驱动程序向内核模式驱动程序发送 IRP 读/写数据包

是否可以创建 IRP 读/写数据包并将其从 UMDF 驱动程序发送到代表设备的内核模式驱动程序?

0 投票
1 回答
389 浏览

windows - IRP_MJ_QUERY_INFORMATION 会导致多少磁盘活动?

对 IRP_MJ_QUERY_INFORMATION 的调用由 Win32 的 GetFileInformationByHandle 或内核模式 ZwQueryInformationFile 等函数生成。

有人可以向我解释这个电话实际发生了什么吗?假设我有一个传统的 7200RPM 磁存储 HDD。

我知道从磁性旋转驱动器读取时的许多延迟是由于寻道时间造成的,但 IRP_MJ_QUERY_INFORMATION 调用在我的应用程序中似乎非常快。我检查了预取缓存的内容,但在其中看不到它正在查询的文件。我猜它被缓存在内存中的某个地方,因为调用很多,但解决得很快,而且我没有看到太多的 HDD 活动(尽管我可能是错的)。在这些情况下实际上会发生什么?文件是否被 Windows 缓存在其他地方?如果是这样,我怎么能看到它?

我知道也有一个 HDD 缓存,但我的理解是它更像是用于预读等的缓冲区。

编辑:我在 MSDN 上阅读了这篇文章,它建议“始终缓存文件系统元数据。”,我假设这意味着如果您打开文件并对其进行修改,诸如“上次修改日期”之类的元数据将不会在刷新文件缓冲区之前,不会将其提交到磁盘。就我而言,我正在查询一个文件,因此我不需要对元数据进行任何更改。在我的程序第一次查询信息后,Windows 是否缓存元数据?

0 投票
1 回答
879 浏览

windows - 蓝屏错误:DRIVER_RETURNED_HOLDING_CANCEL_LOCK

我在 Windows 7 中编写了一个驱动程序。我使用 pedding IRP 将事件从驱动程序发送到应用程序。关键代码如:

它在某些事件通知应用程序时起作用。但是当我卸载驱动程序时,出现蓝屏错误:驱动程序已从持有全局取消锁的取消调用返回。错误代码 id 0x011B。我使用windbg跟踪它,跟踪发生在“PtDriverCancelIRP”函数中。

剂量锁与此错误有关吗?我不知道为什么?我该如何解决?

PS 这个驱动在 Windows XP 中没有错误

0 投票
1 回答
1337 浏览

windows - Windows NDIS 驱动程序:单个设备上的并发读/写 (IRP_MJ_READ/WRITE)

从 Microsoft 的 ndisprot 示例开始,我尝试编写 NDIS 协议驱动程序。从用户空间我尝试同时读取和写入设备(在两个线程中)。由于我没有收到任何数据包,因此 ReadFile 系统调用会阻塞。在这种状态下,我无法完成 WriteFile 系统调用。

我添加了一些调试消息,发现与 IRP_MJ_WRITE (NdisprotWrite) 关联的驱动程序函数甚至没有被调用!用户空间应用程序和驱动程序之间的某些东西阻止了对设备 \Device\NDISprot 的并发访问。

如何同时读取和写入文件?

0 投票
1 回答
1446 浏览

kernel - 如何从一个驱动程序向另一个驱动程序(不在同一个堆栈中)进行 IOCTL 调用(在 Windows 上)

我想从一个驱动程序向另一个完全不同的驱动程序调用 IOCTL(不在同一个堆栈上)

我在网上查过,但他们只讲如何将IOCTL发送给较低的驱动程序,但不是我的情况。

ps:两个驱动程序都是我写的,所以我可以在第二个驱动程序中创建一个设备对象,但是我怎样才能与它通信(我不能从内核调用 DeviceIOControl)

谢谢 !

0 投票
1 回答
814 浏览

filesystems - 重命名将在微过滤器驱动程序 IRP_MJ_CLEANUP 预操作回调中删除的文件

我的目标是在文件被删除之前覆盖文件内容和名称 - 擦除已删除的文件。

我正在尝试使用微过滤器驱动程序和在最终删除操作之前调用的预清理回调例程。

到目前为止,我已经能够摆脱创建/更改/访问日期并在文件被删除之前覆盖文件的内容。

但是我无法更改文件名和所有者信息。

我发现我可以使用 FltSetFileInformation 重命名文件,但是在清理过程中文件没有正确删除。使用 shift+delete,它会被删除,但光盘上的文件名保持不变。只需正常删除,它就不会进入回收站(可能是因为无法移动它,现在它有了一个新名称。)

微过滤器的控制流程对我来说有点不清楚。例如,如果我调用 FltWriteFile 它只是发送另一个 IRP,它是同步还是异步执行。

如何在 IRP 中更改要删除的文件的名称,这样它仍然会被较低的驱动程序删除。

0 投票
1 回答
1556 浏览

windows-7 - ST-LINK V2 USB 驱动 WinUSB Access Denied

我有一台 Win7/64 开发机器(由我无法联系的其他人)配置为使用 ST-LINK/V2 加密狗开发/调试嵌入式项目。PC 检测并安装加密狗 正常,但没有应用程序可以访问加密狗,出现'No ST-Link device detected'类型错误。

让这如此令人沮丧的是我有另一台 Win7/64 机器,它使用相同的驱动程序、软件和加密狗完美地工作,我无法在机器之间转移开发环境。

我发现(使用 USBlyzer)WinUSB 将 IRP 状态返回STATUS_ACCESS_DENIED给每个加密狗访问请求。我希望有人以前见过这样的事情。

PS“STMicroelectronics STLink 加密狗驱动程序”日期为 28/07/2010。