2017-04-13 2 views
1

Ich habe einen Dateinamen und ich möchte überprüfen, ob es auf Windows über C++ ausgeführt werden kann oder nicht. Ich habe _access und _access_s gefunden, aber sie prüfen nur auf Lesen/Schreiben.Überprüfen Sie, ob die Datei ausführbare Rechte Fenster hat C++

Mein Problem ist, dass wenn ich zum Beispiel eine Fledermausdatei herunterlade, das Windows als Sicherheitsmaßnahme blockiert. Wenn ich mein Programm starte und versuche, es auszuführen, blockiert Windows mein Programm und fragt Benutzer, ob er trotzdem fortfahren möchte, weil die Datei riskant ist. Ich möchte das vermeiden, indem ich die Dateirechte überprüfe, bevor ich sie ausführe.

+0

Mögliches Duplikat von [C++ Wie eine Datei Erlaubnis und Besitz über win32 api abrufen] (http://stackoverflow.com/questions/11755422/c-how-to-retrieve-a-file-permission- and-ownership-via-win32-api) – user4581301

+0

Wohlgemerkt, dies könnte Antivirus-Software bei der Arbeit sein. – user4581301

Antwort

2

Das Windows-Dateisystem NTFS unterstützt kein ausführbares Attribut in der Art, wie Sie es erwarten würden, wenn Sie ein Unix-basiertes Betriebssystem verwendet hätten.

Was Sie hier sehen, ist, dass die Shell auf einen zusätzlichen Stream reagiert, der zur Datei hinzugefügt wurde. Und Streams sind ein Feature von NTFS.

Microsoft hat einige Beispiel-Code zeigt, wie Streams zuzugreifen in einer Datei:

Im Fall von Dateien aus dem Internet heruntergeladen haben, Microsofts Browser (IE und Edge-) in ein Stream namens "Zone.Identifier", den ShellExecute und verwandte APIs überprüfen, wenn aufgefordert, eine Datei auszuführen, um den Benutzer mit einer Sicherheitsabfrage zu präsentieren.

Um die Datei zu bereinigen, damit die Sicherheitsabfrage nicht angezeigt wird, muss der Stream gelöscht werden.

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