Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Azamatt
0 / 0 / 0
Регистрация: 27.05.2013
Сообщений: 10
#1

Получить список пользователей расшареной папки - C++

06.03.2016, 12:32. Просмотров 356. Ответов 3
Метки нет (Все метки)

Здравствуйте форумчане.
Создал программу получающую список расшаренных папок("Общий доступ...") на компьютере. Код нашел с этого сайта {вырезано модератором}. Немного изменил, работает.
Как получить перечень пользователей которые могут просматривать(Чтение/Изменение/Запись) расшаренные папки?
Подробнее: Есть у меня папка "Новая папка" сделал ее общей, задал пользователя "user" который может просматривать папку из локальной сети. С помощью программы удалось узнать какой путь и название папки, а получить имя пользователя "user" который может просматривать эту папку, не знаю как сделать.

Подскажите, какая функция выполняет "получение списка пользоватлей расшаренной папки" или примером кода. В общем куда нужно копать чтобы реализовать поставленную задачу?
Пожалуйста тапки не кидать, новичок, впервые делаю подобное.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.03.2016, 12:32     Получить список пользователей расшареной папки
Посмотрите здесь:

Получить список пользователей из <разрешения для общего доступа> - C++
Пока собственно не очень понимаю как задать вопрос, сталкиваюсь впервые Имеется папка с общим доступом, для нее в &quot;разрешения для общего...

Как можно в С++ получить список файлов и папок какого-то диска или папки? - C++
Как можно в С++ получить список файлов и папок какого-то диска или папки?

Получить название файлов с 1-ой папки , со 2-ой папки и вывести. Неправильный вывод - C++
Есть такая задача: получить название файлов с 1-ой папки , со 2-ой папки и вывести название тех файлов , которые отличают эти папки между...

Список пользователей и SID - C++
Добрый день, мне нужно вывести список пользователей и их идентификаторов, не подскажете, как это сделать?

Какоим sql-запросом можно вывести список пользователей? - C++
static int _handle_top1_command(t_connection *c,char const * text) { t_account * account; char query; t_sql_engine...

Как получить все папки и файлы хранящиеся на диске? - C++
Здравствуйте! Помогите пожалуйста в написании кода, с помошью которого можно получить все папки и файлы хранящиеся на диске D: ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
avgoor
884 / 519 / 112
Регистрация: 05.12.2015
Сообщений: 1,464
06.03.2016, 13:55     Получить список пользователей расшареной папки #2
Azamatt, GetFileSecurity()

Добавлено через 1 минуту
Далее оттуда получаешь DACL или SACL.
Azamatt
0 / 0 / 0
Регистрация: 27.05.2013
Сообщений: 10
13.03.2016, 21:52  [ТС]     Получить список пользователей расшареной папки #3
Посмотрел GetFileSecurity() в msdn, не внесло ясности как использовать, примеров там не было. Поискал в нете, нашел книгу где описывается данная функция, но так и не понял как ее использовать, в примере не понятно было откуда получать результат DACL (книга Александр Побегайло системное программирование в windows). Нашел пример на другом форуме, но там другой функцией получают:

Кликните здесь для просмотра всего текста

не знаю в чем проблема, но такая странность, что если с сервера пытаюсь узнать перечень пользователей компьютера то имя локального пользователя не выводит, пишет unknown. Склоняюсь к тому что в компьютере напортачил с правами(хотя полный доступ). А если наоборот то все нормально выводит.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
#include <iostream>
#include <iomanip>
 
#include <windows.h>
#include <aclapi.h>
 
using namespace std;
void finish( int error )
{
  if (error) exit( EXIT_FAILURE );
  else       exit( EXIT_SUCCESS );
}
int main( int argc, char* argv[] )
{
    /* File/Directory name is passed as a first parameter  */
    if (argc < 2) {
        cout << "object names is not specified" << endl;
        finish( 1 );
    }
    PSECURITY_DESCRIPTOR    pSD;
    PACL                    pDACL;
    ACL_SIZE_INFORMATION    aclSize;
    DWORD                   result;
    // Get DACL for the specified named object.
    result = GetNamedSecurityInfo( argv[1], SE_FILE_OBJECT,
                                   DACL_SECURITY_INFORMATION,
                                   NULL, NULL, &pDACL, NULL, &pSD );
    if(ERROR_SUCCESS != result) {
        cout << "GetNamedSecurityInfo failed (" << result << ")" << endl;
        finish( 1 );
    }
    // Permissions are not specified (you have FAT ;-))
    if (NULL == pDACL) {
        cout << argv[1] << " has no DACL" << endl;
        finish( 0 );
    }
    // Here we have valid DACL with a list of ACEs (with SIDs).
    // Let's get number of ACEs.
    if(!GetAclInformation( pDACL, &aclSize, sizeof(aclSize), AclSizeInformation )) 
        cout << "GetAclInformation failed (" << GetLastError() << ")" << endl;
        finish( 1 );
    }
    // Walk through ACEs and display information about each entry
    for ( DWORD ace_idx = 0; ace_idx < aclSize.AceCount; ace_idx++) {
        ACCESS_ALLOWED_ACE* pACE;
        if (GetAce( pDACL, ace_idx, (PVOID*)&pACE )) {     
            char         user[256]   = "";
            char         domain[256] = "";
            DWORD        user_len    = sizeof(user);
            DWORD        domain_len  = sizeof(domain);
            SID_NAME_USE sid_name_use;
            PSID         pSID        =(PSID)(&(pACE->SidStart));
            // Take SID from ACE and get accoount name
            cout << setw(3) << ace_idx << ") ";
            if (LookupAccountSid( NULL, pSID, user, &user_len,
                                  domain, &domain_len, &sid_name_use)){
                cout << domain << "" << user;
            }
            else {
                cout << "unknown";
            }
            // Display ACE type
            switch (pACE->Header.AceType) {
                case ACCESS_ALLOWED_ACE_TYPE:
                    cout << "  allowed";
                    break;
                case ACCESS_DENIED_ACE_TYPE:
                    cout << "  denied";
                    break;
                default:
                    cout << "  audit";  // in fact, never happens in this example
            }
            // Display access MASK
            cout << "  mask " << pACE->Mask << endl;
        }
        else {
            cout << "GetAce failed at index " << ace_idx << endl;
        }
    }
    finish( 0 );
}

Все же, как с помощью функции GetFileSecurity(), получить DACL и SACL. По SACL ни чего не нашел.
Пожалуйста приведите любой пример или ссылку использования данной функции и получения необходимого списка.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.04.2016, 10:33     Получить список пользователей расшареной папки
Еще ссылки по теме:

Получить список процессов - C++
Как в c++ получить список процессов?

Получить список файлов и папок - C++
Имеется строка в которой содержится адрес некоторой папки. Как можно получить список всех файлов и подпапок в данной папке?

Получить список файлов в директории - C++
Всем доброго времени суток. Я хочу получить список файлов в директории любым способом, но не залезая в WinAPI. На ум приходит только...

Получить список файлов в каталоге - C++
Здравствуйте! Мне нужно получить список файлов в каталоге, чтобы потом как-то работать с этими файлами, для начала, отсортировать их по...

Получить список драйверов DOS - C++
Нужно написать программу на С++, которая сможет посмотреть список драйверов, в данный момент загружены в конкретной ПЭВМ. Если точнее...

Получить таблицу температур используя список - C++
Данную программу я написал работает верно, но как её можно реализовать с помощью списка, помогите пожалуйста #include &lt;stdio.h&gt; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Azamatt
0 / 0 / 0
Регистрация: 27.05.2013
Сообщений: 10
19.04.2016, 10:33  [ТС]     Получить список пользователей расшареной папки #4
Тема актуальна!
Список пользователей с маской безопасности пользователя, с помощью DACL получил. SACL-у необходимо права SE_SECURITY_NAME которые входят в группу Backup Operators, данная группа безопасности находится в AD.

Вопрос тот же, немного перефразировал. Как получить перечень пользователей и прав доступа к папке каждого пользователя в ОС(Windows xp/7)? Т.е. в свойствах папки, вкладка безопасность, в которой и находится мне нужный список пользователей с их правами доступа(Чтение/Запись/Изменение) к этой папке. Как получить этот список безопасности?
Yandex
Объявления
19.04.2016, 10:33     Получить список пользователей расшареной папки
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru