我正在编写一个使用数据库库的程序。 该库让我可以访问它用来访问我的表的文件句柄。 我发现了一个Windows API,允许我通过句柄检索有关文件的信息,但我还没有find任何方式来确定该文件的访问模式/权限。 在这一点上,我确信我可能生活在不知道这些信息的情况下,但是作为我这个顽固的懦夫,我还没有准备好让这一切顺利。 Windows显然知道这个信息 – 所以问题是如何能哄骗信息呢?
我find的API函数是:GetFileInformationByHandleEx,它使我靠近水坑,但不让我喝水。
文件模式信息有用的原因是我需要修改表头信息。 如果文件已经处于正确的模式,那么我将不必closures表格打开文件修改文件closures文件,然后重新打开表格。
是的,在我被告知所有可用的选项来实现我的目标之前 – 我对这些不感兴趣。 我只是在原来的问题有趣 – 我如何确定已打开的文件的模式。 我期待着任何答复,我提前感谢你。
谢谢,Robert Milligan
我不知道是否有相应的Win32 API,但是如果你真的需要它,你可以调用NtQueryObject(ObjectBasicInformation)。
好。 所以我终于弄清楚了这一部分 – 感谢你的指导,MSDN学习以及大量的试验和错误。
有一些棘手的问题要解决这个问题。
1)ACCESS_MASK当然没有像我预期的那样反映访问模式。 文档使我期望高4位反映我打开文件的“GENERIC”模式 – 错误的! 那些出现在特定的权利部分。 哎呀 – 我还是没有什么线索,当这些高4位实际上被使用,但是这个练习我不需要。
2)一旦我明白了我的想法,我就不得不绊倒了那些让我知道当我用GENERIC_READ打开时被翻译成以下内容的文档:
FILE_GENERIC_READ
它由以下部分组成:
STANDARD_RIGHTS_READ | FILE_READ_DATA | FILE_READ_ATTRIBUTES | FILE_READ_EA | SYNCHRONIZE
理解这个概念使得所有其余部分都落实到位。 现在我的理解与Process Hacker告诉我的信息相关联。
3)我的UI还有一个严重的错误,那就是我曾经想到的让整个世界都躺在我的脚下。
这很好,因为我现在可以弄清楚打开文件时使用了哪些访问模式。 原来的问题回答!
现在我想能够确定文件所在的“共享”模式 – 如果可能的话。 有任何想法吗?
再次感谢你的帮助