2017-04-13 53 views
1

我有一個文件名,我想檢查它是否可以通過c + +在窗口上執行或不。我發現_access和_access_s,但他們只檢查讀/寫。檢查文件是否具有可執行權利Windows C++

我的問題是,例如,當我下載一個bat文件時,windows會將其作爲安全措施進行阻止。當我運行我的程序並嘗試執行它時,Windows會阻止我的程序並詢問用戶是否要繼續,因爲該文件存在風險。我想通過在執行文件之前檢查文件權限來避免這種情況。

+0

的可能的複製[C++如何檢索通過Win32 API的文件權限和所有權(http://stackoverflow.com/questions/11755422/c-how-to-retrieve-a-file-permission-和所有權通過win32-api) – user4581301

+0

請注意,這可能是工作中的防病毒軟件。 – user4581301

回答

2

如果您使用的是基於Unix的操作系統,Windows文件系統NTFS不支持可執行屬性。

您在這裏看到的是shell響應添加到文件的額外流。流是NTFS的一個特性。

微軟已經展示瞭如何訪問數據流文件中的一些示例代碼:

在從互聯網上下載的文件的情況下,微軟瀏覽器(IE和邊緣)加被稱爲「Zone.Identifier」的流,ShellExecute和相關的API在被要求執行文件以向用戶呈現安全提示時檢查。

要清理文件以便不出現安全提示,必須清除流。

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