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

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

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

Подскажите, какая функция выполняет "получение списка пользоватлей расшаренной папки" или примером кода. В общем куда нужно копать чтобы реализовать поставленную задачу?
Пожалуйста тапки не кидать, новичок, впервые делаю подобное.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
avgoor
562 / 352 / 83
Регистрация: 05.12.2015
Сообщений: 1,137
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 ни чего не нашел.
Пожалуйста приведите любой пример или ссылку использования данной функции и получения необходимого списка.
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     Получить список пользователей расшареной папки
Ответ Создать тему
Опции темы

Текущее время: 11:06. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru