2017-02-28 87 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

相關問題