Ash*_*Ash 9 .net c# filesystems winapi
我正在使用Windows API函数FindFirstFileEx,因为它提供了仅返回给定目录的子目录(忽略文件)的功能.但是,当我用所需的标志调用此函数时,我仍然会收到文件和目录.
FindFirstFileEx使用的FindExSearchLimitToDirectories标志的MSDN文档 说:
这是一个咨询标志.如果文件系统支持目录过滤,则该函数将搜索与指定名称匹配的文件,并且也是目录.如果文件系统不支持目录过滤,则会以静默方式忽略此标志.
使用此搜索值时,FindFirstFileEx函数的lpSearchFilter参数必须为NULL.
如果需要目录筛选,则此标志可用于所有文件系统,但由于它是一个顾问标志并且仅影响支持它的文件系统,因此应用程序必须检查存储在FindFirstFileEx函数的lpFindFileData参数中的文件属性数据确定函数是否已返回目录句柄.
那么,什么文件系统实际上支持这个标志? 实际在同一页面上列出这些支持的文件系统是明智的,但我找不到它.
我的开发系统是Windows XP SP3,NTFS,.NET 3.5.
我知道我可以检查文件属性以确定文件是否是目录,但这意味着检查每个文件/目录.它也首先违背了使用FindFirstFileEx的目的.
当然,我的代码中仍有可能出错.我唯一能看到的是将IntPtr.Zero传递给lpSearchFilter可能与传递NULL不同(如引用中所述).
这是我正在使用的代码示例:
m_searchDirHandle = WinAPI.FindFirstFileEx(@"C:\Temp\*",
WinAPI.FINDEX_INFO_LEVELS.FindExInfoStandard ,
ref m_findDirData, WinAPI.FINDEX_SEARCH_OPS.FindExSearchLimitToDirectories,
IntPtr.Zero , 0);
if (m_searchDirHandle != WinAPI.INVALID_HANDLE_VALUE)
{
do
{
foundNextDir = WinAPI.FindNextFile(m_searchDirHandle, ref m_findDirData);
} while (foundNextDir);
}
Run Code Online (Sandbox Code Playgroud)
我能找到的最近的链接是Metasploit的系统调用列表...我在这里尝试一下,但我想这个“FindFirstFileEx”会以某种方式间接调用 NT 系统调用,相当于“NtOpenDirectoryObject”,“ NtQueryDirectoryFile','NtQueryDirectoryObject'...我希望...如果有人认为我错了并且投反对票不同意,那么任何不同意的人都会纠正我:)
不过,我在这里点击了一些链接
编辑:刚才在评论中提到后,我认为添加一个指向Linux NTFS 驱动程序的链接以获得读取 NTFS 分区的功能就足够了,肯定会有源版本更改以适应不同的 NTFS 版本到Win2000...
希望这有帮助,最诚挚的问候,汤姆。
| 归档时间: |
|
| 查看次数: |
1834 次 |
| 最近记录: |