2017-04-13 2 views
1

ファイル名があり、C++を使用してWindows上でファイルを実行できるかどうかをチェックしたい。私は_accessと_access_sを見つけましたが、読み書きしかチェックしません。ファイルに実行可能な権利ウィンドウがあるかどうかをチェックするC++

私の問題は、たとえば、バットファイルをダウンロードすると、ウィンドウがセキュリティ対策としてブロックされるということです。プログラムを実行して実行しようとすると、Windowsは自分のプログラムをブロックし、ファイルが危険なので、とにかく続行するかどうかをユーザーに尋ねます。私はそれを実行する前にファイルの権利をチェックすることによってそれを避けたいです。

+0

[Win32のAPIを介してファイルのパーミッションと所有権を取得する方法をC++](http://stackoverflow.com/questions/11755422/c-how-to-retrieve-a-file-permission-の可能性のある重複and-ownership-via-win32-api) – user4581301

+0

これは職場でのウイルス対策ソフトウェアかもしれません。 – user4581301

答えて

2

WindowsファイルシステムであるNTFSは、UnixベースのOSを使用した場合に期待される方法で実行可能な属性をサポートしていません。

あなたが見ているのは、ファイルに追加された余分なストリームに反応するシェルです。ストリームはNTFSの機能です。

マイクロソフトは、ファイル内のストリームにアクセスする方法を示すいくつかのサンプルコードがあります。インターネットからダウンロードしたファイルの場合

を、Microsoftのブラウザ(IEやエッジ)を追加します「ShellExecute」と関連するAPIは、ユーザーにセキュリティプロンプトを表示するファイルを実行するように要求されたときにチェックする「Zone.Identifier」という名前のストリームです。

セキュリティプロンプトが表示されないようにファイルをクリーンアップするには、ストリームを消去する必要があります。

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