На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Обратите внимание:
1. Прежде чем начать новую тему или отправить сообщение, убедитесь, что вы не нарушаете правил форума!
2. Обязательно воспользуйтесь поиском. Возможно, Ваш вопрос уже обсуждали. Полезные ссылки приведены ниже.
3. Темы с просьбой выполнить какую-либо работу за автора в этом разделе не обсуждаются.
4. Используйте теги [ code=cpp ] ...текст программы... [ /code ] для выделения текста программы подсветкой.
5. Помните, здесь телепатов нет. Старайтесь формулировать свой вопрос максимально грамотно и чётко: Как правильно задавать вопросы
6. Запрещено отвечать в темы месячной и более давности без веских на то причин.

Полезные ссылки:
user posted image FAQ Сайта (C++) user posted image FAQ Форума user posted image Наши Исходники user posted image Поиск по Разделу user posted image MSDN Library Online (Windows Driver Kit) user posted image Google

Ваше мнение о модераторах: user posted image B.V.
Модераторы: B.V.
Страницы: (2) [1] 2  все  ( Перейти к последнему сообщению )  
> Запретить полный доступ к файлу/каталогу
    Здравствуйте :). Помогите разобраться. Мне необходимо запретить доступ к файлу/каталогу. В этой теме forum.sources.ru сделано разрешение, но оно у меня не компилируется, а только выдает много ошибок.
    Я сделал запрет вот таким образом:
    ExpandedWrap disabled
        PSECURITY_DESCRIPTOR pSD;
        PSID pSID;
        PACL pDACL;
        ULONG lErr = GetNamedSecurityInfo( "C:\\Test\\Test.txt", SE_FILE_OBJECT, DACL_SECURITY_INFORMATION,
          &pSID, NULL, &pDACL, NULL, &pSD);
        if(lErr != ERROR_SUCCESS) ShowMessage("ERORR");
        SetNamedSecurityInfo( "C:\\Test\\Tost.txt", SE_FILE_OBJECT, DACL_SECURITY_INFORMATION, pSID, NULL, pDACL, NULL);

    Файл Test запрещен всем. Все работает, но не таскать же мне этот файл как шаблон. Если бы я мог знать значения двух этих структур...
      Люди....Вообще ни кто не знает :(. Уже неделю с этим мучаюсь :wall:
        http://msdn.microsoft.com/ru-ru/library/ms717798 - пример создания структуры DACL, все что тебе нужно - модифицировать функцию под свои нужды.
        http://msdn.microsoft.com/ru-ru/library/aa446595.aspx - пример создания SECURITY_DESCRIPTOR структуры, которая включает в себя DACL, можешь создать новый или модифицировать существующий. Плюс если будет разработка под Windows старше XP - можно ещё Windows Integrity Mechanism использовать, описание - http://msdn.microsoft.com/ru-ru/library/bb625963.aspx
          Спасибо большое за направление :)
            есть ещё стандартные утилиты для модификации прав доступа: cacls.exe - на XP и icacls.exe на Vista/7
              Спасибо за информацию, но эта прога будет работать как на ХР, так и на семерке, так что надо сделать универсальную).А еще в дополнение - нашел на форумах вот такую инфу - можно написать драйвер фильтр фс. Если не сложно можете объяснить будет ли он лучше и вообще есть ли смысл в этом направлении двигаться. Просто хочется разобраться в этом вопросе как можно глубже.
                если есть желание и время стоит. чем ниже установлена система защиты, тем сложнее ее обойти, однако поддержка и разработка кода, основанного на стандартных механизмах системы, проще, чем разработка собственного драйвера фильтра файловой системы.
                  Что-то не могу сообразить :huh: . Пользуясь второй ссылкой написал код, который разрешает полный доступ. Но как теперь сделать, что бы он запрещал не могу сообразить :( :
                  ExpandedWrap disabled
                      DWORD dwRes, dwDisposition;
                      PSID pEveryoneSID = NULL, pAdminSID = NULL;
                      PACL pACL = NULL;
                      PSECURITY_DESCRIPTOR pSD = NULL;
                      EXPLICIT_ACCESS ea[2];
                      SID_IDENTIFIER_AUTHORITY SIDAuthWorld = SECURITY_WORLD_SID_AUTHORITY;
                      SID_IDENTIFIER_AUTHORITY SIDAuthNT = SECURITY_NT_AUTHORITY;
                      SECURITY_ATTRIBUTES sa;
                      LONG lRes;
                      HKEY hkSub = NULL;
                     
                      // Create a well-known SID for the Everyone group.
                      if(!AllocateAndInitializeSid(&SIDAuthWorld, 1, SECURITY_WORLD_RID, 0, 0, 0, 0, 0, 0, 0, &pEveryoneSID))
                      {
                        ShowMessage("AllocateAndInitializeSid Error %u\n");
                        goto Cleanup;
                      }
                      
                      // Initialize an EXPLICIT_ACCESS structure for an ACE.
                      // The ACE will allow Everyone read access to the key.
                      ZeroMemory(&ea, 2 * sizeof(EXPLICIT_ACCESS));
                      ea[0].grfAccessPermissions = FILE_ALL_ACCESS ;
                      ea[0].grfAccessMode = SET_ACCESS;
                      ea[0].grfInheritance= NO_INHERITANCE;
                      ea[0].Trustee.TrusteeForm = TRUSTEE_IS_SID;
                      ea[0].Trustee.TrusteeType = TRUSTEE_IS_WELL_KNOWN_GROUP;
                      ea[0].Trustee.ptstrName  = (LPTSTR) pEveryoneSID;
                     
                      // Create a SID for the BUILTIN\Administrators group.
                      if(!AllocateAndInitializeSid(&SIDAuthWorld, 1, SECURITY_WORLD_RID, 0, 0, 0, 0, 0, 0, 0, &pEveryoneSID))
                      {
                        ShowMessage("AllocateAndInitializeSid Error %u\n");
                        goto Cleanup;
                      }
                     
                      // Initialize an EXPLICIT_ACCESS structure for an ACE.
                      // The ACE will allow the Administrators group full access to
                      // the key.
                     
                      ea[1].grfAccessPermissions = NULL ;
                      ea[1].grfAccessMode = SET_ACCESS;
                      ea[1].grfInheritance= NO_INHERITANCE;
                      ea[1].Trustee.TrusteeForm = TRUSTEE_IS_SID;
                      ea[1].Trustee.TrusteeType = TRUSTEE_IS_WELL_KNOWN_GROUP;
                      ea[1].Trustee.ptstrName  = (LPTSTR) pEveryoneSID;
                     
                      // Create a new ACL that contains the new ACEs.
                      dwRes = SetEntriesInAcl(2, ea, NULL, &pACL);
                      if (ERROR_SUCCESS != dwRes)
                      {
                        ShowMessage("SetEntriesInAcl Error %u\n");
                        goto Cleanup;
                      }
                     
                      Cleanup:;
                      SetNamedSecurityInfo( "C:\\Test\\Test.txt", SE_FILE_OBJECT, DACL_SECURITY_INFORMATION, pEveryoneSID , NULL,  pACL, NULL);
                    ExpandedWrap disabled
                        ea[0].grfAccessPermissions = FILE_ALL_ACCESS ;
                        ea[0].grfAccessMode = DENY_ACCESS;
                        ea[0].grfInheritance= NO_INHERITANCE;
                        ea[0].Trustee.TrusteeForm = TRUSTEE_IS_SID;
                        ea[0].Trustee.TrusteeType = TRUSTEE_IS_WELL_KNOWN_GROUP;
                        ea[0].Trustee.ptstrName  = (LPTSTR) pEveryoneSID;

                    попробуй так
                    Сообщение отредактировано: Arrier -
                      Спасибо тебе большое за помощь. Все получилось. Тему можно закрыть.
                        на будущее, чтобы напрямую с структурами не возиться можешь использовать функции: AddAccessDeniedAce(Ex), AddAccessAllowedAce(Ex)
                          Возник вопрос. Видимо я что то не понимаю, но если делать так:
                          ExpandedWrap disabled
                             PSECURITY_DESCRIPTOR pSD;
                             PACL pDACL, pDACL2, pDACL3;
                             ULONG lErr = GetNamedSecurityInfo(TEXT("C:\\123\\111.rtf"),
                             SE_FILE_OBJECT, DACL_SECURITY_INFORMATION, NULL, NULL,
                               &pDACL, NULL, &pSD);
                             SetNamedSecurityInfo( "C:\\123\\111.rtf", SE_FILE_OBJECT, DACL_SECURITY_INFORMATION, NULL , NULL,  pDACL, NULL);
                             lErr = GetNamedSecurityInfo(TEXT("C:\\123\\111.rtf"),
                             SE_FILE_OBJECT, DACL_SECURITY_INFORMATION, NULL, NULL,
                               &pDACL2, NULL, &pSD1);
                             if (lErr != ERROR_SUCCESS) ShowMessage("fale");
                             if(&pDACL == &pDACL2) ShowMessage("vse ok");
                             else ShowMessage(":(");

                          то pDACl и pDACL2 не равны. Почему так происходит? Ведь они должны быть одинаковые. В чем я не прав?
                            Sorry за оффтоп
                            А кто-нибудь работал с директориями типа $Extend ?
                            Есть смысл пытаться или "овчинка выделки не стоит" ?
                              Мыщъх отсылает к Linux-NTFS Project. Правда, предупреждает о некоторых ошибках.
                                Цитата Qraizer @
                                Мыщъх отсылает к Linux-NTFS Project. Правда, предупреждает о некоторых ошибках.

                                Это я заню. Более того работаю с ними, но только на уровне чтения (из юзер мод)
                                Под версиями ниже Висты возможна и запись (из юзер мод)
                                Меня интересует вопрос: возможно ли там (пусть мы драйвер) хранить данные, не испортив систему ?
                                Если да, то насколько это сложно или как в обычной директории ?
                                ---
                                Спрашиваю потому, что надо заранее оценить трудозатраты.
                                А если у меня получилось один раз на моей машине, то это вовсе не означает, что так будет везде :)

                                Добавлено
                                Цитата Riply @
                                Меня интересует вопрос: возможно ли там (пусть мы драйвер) хранить данные, не испортив систему ?

                                Если да, то с какими именно
                                1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                                0 пользователей:


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0716 ]   [ 15 queries used ]   [ Generated: 6.07.25, 18:38 GMT ]