C 如何在文件系统设备驱动程序中不进入死锁?

C 如何在文件系统设备驱动程序中不进入死锁?,c,windows,filesystems,device-driver,C,Windows,Filesystems,Device Driver,我正在创建文件系统过滤器驱动程序,需要打开一些文件来检查分派例程中的属性。我正在使用ZwCreateFile()。但是每次文件系统请求时都会调用我的分派例程,因此我的ZwCreateFile()将再次调用我的分派例程。不进入死锁的最佳方法是什么?我觉得用旗子之类的东西是个不错的选择 我已经测试并简单地在设备扩展中对标志进行签名,但在某些情况下仍然不会更改标志,或者标志包含旧数据 谢谢你试试,或者。试试,或者。那不是死锁,那是reentrancyThanks@David,你能给我指出一个关于这个的

我正在创建文件系统过滤器驱动程序,需要打开一些文件来检查分派例程中的属性。我正在使用ZwCreateFile()。但是每次文件系统请求时都会调用我的分派例程,因此我的ZwCreateFile()将再次调用我的分派例程。不进入死锁的最佳方法是什么?我觉得用旗子之类的东西是个不错的选择

我已经测试并简单地在设备扩展中对标志进行签名,但在某些情况下仍然不会更改标志,或者标志包含旧数据


谢谢你

试试,或者。

试试,或者。

那不是死锁,那是reentrancyThanks@David,你能给我指出一个关于这个的资源吗?我找到了信息,但我如何解决我的问题?我认为驱动程序分派函数在默认情况下总是可重入的。也许我可以检查IRP createfile请求中的一些标志,以检查它来自何处?@David Heffernan:可能会出现死锁-不是一级,而是两级(例如打开“a.txt”->打开“过滤器使用的文件”->打开“过滤器使用的文件”->…)。这不是死锁,这是ReentrantyTanks@David,你能给我指出一个关于这方面的资源吗?我找到了一些信息,但我怎样才能解决我的问题呢?我认为驱动程序分派函数在默认情况下总是可重入的。也许我可以检查IRP createfile请求中的一些标志,以检查它从何处来?@David Heffernan:可能会出现死锁-不是一个级别降低,而是两个级别(例如打开“a.txt”->打开“过滤器使用的文件”->打开“过滤器使用的文件”->…)。