检查文件是否具有Windows c ++的可执行权限

Check if file has executable rights windows c++

本文关键字:可执行 权限 Windows 文件 是否 检查      更新时间:2023-10-16

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

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

Windows文件系统NTFS不支持使用基于Unix的操作系统时所期望的可执行属性。

您在此处看到的是 shell 对添加到文件的额外流做出反应。流是 NTFS 的一项功能。

Microsoft有一些示例代码,演示如何访问文件中的流:

  • 如何使用 NTFS 备用数据流

对于从互联网下载的文件,Microsoft的浏览器(IE和Edge(添加了一个名为"Zone.Identifier"的流,当被要求执行文件以向用户显示安全提示时,ShellExecute和相关API会检查该流。

要清理文件以不显示安全提示,必须擦除流。

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