Цитата:
Сообщение от
Arahnid
Прочла в документации по Win, что файлы наследуют доступ от папки (проверено опытным путем). Получается, что нельзя установить запрет на папку и оставить полный доступ на файлы в ней.
На самом деле это не совсем так, т.е. отсутствие прав доступа к папке, еще не говорит о том, что доступа нет к файлам в этой папке.
Цитата:
Сообщение от
Arahnid
Может кто решал проблему: запрет открытия папки и при этом полный доступ на файлы в ней.
К сожалению, в X++ подобной задачи решать не приходилось, поэтому всё чем могу поделиться, так это кодом на
C++ (компилировал в
MVS 2005, MVS2008)(писал это года 3-4 назад, но насколько помню работает как на
FAT32, так и на
NTFS), в принципе можно обернуть в
dll и использовать в
AX, а возможно будет проще один раз выполнить и заблокировать директорию на совсем

:
PHP код:
#include <windows.h>
#include <windowsx.h>
#include <sddl.h>
//---------------------------------------------------------------------------
bool CreateDACL(SECURITY_ATTRIBUTES *pSA, wchar_t *szSD)
{
if (pSA == NULL) return false;
return ConvertStringSecurityDescriptorToSecurityDescriptor(szSD,
SDDL_REVISION_1,
&(pSA->lpSecurityDescriptor),
NULL);
};
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
void BlockDirectory(wchar_t *DirName)
{
wchar_t *sz1 = _T("D:(D;;;;;BA)");
SECURITY_ATTRIBUTES sa;
sa.nLength = sizeof(SECURITY_ATTRIBUTES);
sa.bInheritHandle = false;
CreateDACL(&sa, sz1);
SetFileSecurity(DirName, 4, sa.lpSecurityDescriptor);
};
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
void UnBlockDirectory(wchar_t *DirName)
{
wchar_t *sz1 = _T("D:(A;;GA;;;BA)");
SECURITY_ATTRIBUTES sa;
sa.nLength = sizeof(SECURITY_ATTRIBUTES);
sa.bInheritHandle = false;
CreateDACL(&sa, sz1);
SetFileSecurity(DirName, 4, sa.lpSecurityDescriptor);
};
//---------------------------------------------------------------------------
BlockDirectory() - блокирует директорию,
UnBlockDirectory() - разблокирует директорию, параметр
sz1 - это строковый формат прав, более подробно читайте в
MSDN про
Security Descriptor String Format(
http://msdn.microsoft.com/en-us/libr...70(VS.85).aspx).
BlockDirectory() - закрывает директорию напрочь, забирая все права, но если вы точно знаете путь к файлу в этой директории, то можно легко его просмотреть и изменить.
P.S. Пример, есть каталог c:\1, в нем есть файл 1.txt, выполняем функцию BlockDirectory(), после этого вы не сможете попасть в данный каталог, но выполнив команду notepad c:\\1\\1.txt вы откроите данный файл.