1

VS2005 で C プログラムを開発していますが、フォルダーの作成やフォルダーからの削除ができないようにフォルダー アクセスが制限されている場合、フォルダーの _stat 関数が errno を正しく設定しないことがわかりました。errno は値 ENOENT に設定されます。アクセス許可を絶対に変更できないため、値 EACCES を取得できました。_stat が 0 (エラーなし) を返すか、errno が ENOENT に設定されます。実際に存在するフォルダと、フォルダに対する十分な権限を持っていないユーザーを区別する方法を教えてください。私が理解していないもう 1 つのことは、特定のアクセス許可によって _stat が -1 を返すことです。_stat をテストしてきたフォルダーの有効なアクセス許可を見ると、「拒否」列には何もありません。「フォルダーの作成/データの追加」もチェックされていますが、フォルダーを作成できません。

ありがとう & BR -マティ

4

2 に答える 2

2

Windowsのセキュリティ属性は、_stat()でこれをテストするにはきめが細かすぎます。その実装はFindFirstFile()API関数を使用します。この関数は、ファイルを列挙する権利が付与されていない場合にのみ失敗します。これはめったにありませんが、通常オフになっているより制限の厳しいものは、書き込みまたは変更です。

ACLをテストするためにセキュリティAPIをハッキングすることは、多くの場合回避され、移植性が非常に低くなります。ファイルを開こうとすると、必要な権限がないことがわかります。ファイルにアクセスする権利を取得するためにコードでできることは何もないので、かなり受け入れられます。

于 2010-09-26T20:19:53.687 に答える
1

これについては 100% 確信が持てませんが、_doserrnoを試しましたか? MSDN のドキュメントによると:

For I/O operations, use _doserrno to access the operating-system error-code 
equivalents of errno codes. For most non-I/O operations the value of _doserrno is   
undefined.
于 2010-09-26T19:08:56.653 に答える