2008-09-26 2 views

ответ

6

Простым ответом было бы попробовать и посмотреть. API безопасности Windows не для слабонервных, и, возможно, у вас есть разрешение на запись без разрешения на просмотр разрешений!

3

Отметьте это сообщение форума.

http://bytes.com/forum/thread389514.html

Он описывает использование объектов в System.Security.AccessControl пространства имен, чтобы получить список разрешений ACL для файла. Он доступен только в .NET 2.0 и выше. Я думаю, он также предполагает, что у вас есть SMB-сеть. Я не уверен, что он сделал бы, если бы вы использовали сеть, отличную от Windows.

Если вы не используете .NET 2.0 и выше, это обычный java-интерфейс pInvoke и Win32 API.

1

ScottKoon пишет о проверке разрешений ACL Windows. Вы также можете проверить разрешенные управляемые коды с помощью CAS (Security Access Security). Это специальный метод ограничения доступа .Net. Обратите внимание: если у пользователя нет разрешений на запись, тогда код никогда не будет иметь права на запись (даже если CAS говорит, что он это делает) - самые ограничительные разрешения между двумя победами.

CAS довольно прост в использовании - вы даже можете добавить декларативные атрибуты в начале ваших методов. Вы можете прочитать больше на MSDN

4

Были там тоже самое лучшее и самое надежное решение, которое я нашел, было это:

bool hasWriteAccess = true; 
string remoteFileName = "\\server\share\file.name" 

try 
{ 
    createRemoteFile(remoteFileName); 
} 
catch (SystemSecurityException) 
{ 
    hasWriteAccess = false; 
} 

if (File.Exists(remoteFileName)) 
{ 
    File.Delete(remoteFileName); 
} 

return hasWriteAccess; 
+2

Помните, что это возможно для пользователей Windows, чтобы иметь права на запись в файл или папку, но НЕ имеет разрешения на удаление для этого (с записью, но НЕ модифицировать) – hromanko 2008-12-05 20:34:06