2017-02-28 235 views
0

有多个标志和属性(dwFlagsAndAttributes)可以在使用CreateFile()调用打开文件时使用。其中一个标志是FILE_FLAG_SEQUENTIAL_SCAN。我想知道,是否有可能以某种方式检测/猜测文件句柄是否已使用此标志创建,如果您拥有的唯一东西是句柄本身并且没有关于其CreateFile参数的信息可用?是否已使用FILE_FLAG_SEQUENTIAL_SCAN标志打开文件句柄?

+0

这可能是你至少需要知道的**最有趣的标志。这是一个没有任何可观察到的效果,除了作为缓存管理器的提示之外。例如,“FILE_FLAG_OVERLAPPED”会更有趣。无论如何,你真的想要解决什么问题? – IInspectable

+0

有时可以观察到的效果取决于观察点。 :)尝试从使用此标志打开的文件中重新读取会导致在特定平台上出现很好的可观察应用程序崩溃(取决于底层可以提供的优化级别)。如果文件是由一个无法控制的代理打开的,那么可能存在一个问题,即应用什么算法来最有效地处理数据(让我们建议任何缓冲超出解决方案)。 –

+1

这个标志不应该有任何方式导致崩溃。这意味着一个错误,无论是在Windows或(更可能)您的代码。找出并纠正错误可能会比这样解决问题更好。 –

回答

2

您可以调用NtQueryInformationFile(或从内核模式下的ZwQueryInformationFile)检索FILE_OBJECT结构。它的标记会员提供您正在查找的信息。

+0

这确实有效。感谢您的信息;我无法自己达到。不过,我想确保我们谈论的是同样的事情。我没有看到任何FILE_OBJECT,但我看到FILE_MODE_INFORMATION结构包含模式字段(ULONG),可以包含标志FILE_SEQUENTIAL_ONLY(对于我感兴趣的CreateFile选项)以及标志FILE_NO_INTERMEDIATE_BUFFERING(中和我感兴趣的选项)。这是你的意思还是我错过了你想指出的东西? –

+0

@ Mtm3.14:'FILE_OBJECT'结构在* wdm.h *头文件中定义。 'FO_SEQUENTIAL_ONLY'标志对应于'CreateFile'调用中的'FILE_FLAG_SEQUENTIAL_SCAN'。我不知道'FO_NO_INTERMEDIATE_BUFFERING'因素如何。 – IInspectable

相关问题