【问题标题】:Check if file has executable rights windows c++检查文件是否具有可执行权限windows c++
【发布时间】:2017-04-13 14:18:42
【问题描述】:

我有一个文件名,我想检查它是否可以通过 c++ 在 windows 上执行。我找到了 _access 和 _access_s,但它们只检查读/写。

我的问题是,例如,当我下载一个 bat 文件时,Windows 会阻止它作为安全措施。当我运行我的程序并尝试执行它时,Windows 会阻止我的程序并询问用户是否仍要继续,因为该文件有风险。我想通过在执行之前检查文件权限来避免这种情况。

【问题讨论】:

标签: c++ windows


【解决方案1】:

如果您使用的是基于 Unix 的操作系统,Windows 文件系统 NTFS 不支持可执行属性。

您在这里看到的是 shell 对添加到文件的额外流做出反应。并且流是 NTFS 的一个特性。

微软有一些示例代码展示了如何访问文件中的流:

对于从 Internet 下载的文件,Microsoft 浏览器(IE 和 Edge)会添加一个名为“Zone.Identifier”的流,ShellExecute 和相关 API 在被要求执行文件以向用户呈现时会检查该流安全提示。

要清理文件以便不出现安全提示,必须删除流。

BOOL didDeleteZoneIdentifier = DeleteFile(TEXT("Path To Batch File.bat:Zone.Idenfier"));
if(!didDeleteZoneIdentifier){
    int errorCode = GetLastError();
    ....

【讨论】:

    猜你喜欢
    • 2012-07-07
    • 2011-06-26
    • 2011-04-20
    • 2017-08-15
    • 2014-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多