Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Разрешение на чтение для пользователя «user» 
:(
    Опции темы
SVlexs510
Дата 13.12.2008, 16:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 27.3.2006
Где: Шелехов

Репутация: нет
Всего: нет



Была поставлена такая задача:
Создать раздел реестра, для него задать разрешение на чтение для пользователя «user», записать в раздел свою фамилию в значение «fname».

Раздел реестра создал, свойство изменил. Проблема возникла при установление разрешения для пользователя.

Код

#define _WIN32_WINNT 0x0500

#include "windows.h"
#include "sddl.h"
#include "stdio.h"

BOOL CreateMyDACL(SECURITY_ATTRIBUTES *);

..................

BOOL CreateMyDACL(SECURITY_ATTRIBUTES * pSA)
{
        TCHAR * szSD = TEXT("D:")       // Discretionary ACL
        TEXT("(A;OICI;GR;;;AU)")     // Allow read to authenticated users
        TEXT("(A;OICI;GA;;;BA)");            // Allow full control  to administrators

    if (NULL == pSA)
        return FALSE;

     return ConvertStringSecurityDescriptorToSecurityDescriptor(
                szSD,
                SDDL_REVISION_1,
                &(pSA->lpSecurityDescriptor),
                NULL);
}


void CMy07RegEditDlg::OnOK() 
{
    HKEY h;
    SECURITY_ATTRIBUTES  sa;
      
     sa.nLength = sizeof(SECURITY_ATTRIBUTES);
     sa.bInheritHandle = FALSE; 

     // Call function to set the DACL. The DACL
     // is set in the SECURITY_ATTRIBUTES 
     // lpSecurityDescriptor member.
     if (!CreateMyDACL(&sa))
     {
         // Error encountered; generate message and exit.
         printf("Failed CreateMyDACL\n");
         exit(1);
     }
    
    if(RegOpenKeyEx(HKEY_CURRENT_USER, "Software",0,KEY_ALL_ACCESS,&h )!=ERROR_SUCCESS) 
    {
        printf("Could not create the registry key."); 
        abort();  
    }
    //делаем определенные действия с разделом

    HKEY g;

    if(RegCreateKeyEx(h, "MySoft", 0, NULL, REG_OPTION_NON_VOLATILE,KEY_WRITE, &sa, &g, NULL )!=ERROR_SUCCESS) 
    {
        printf("Could not create the registry key."); 
        abort();  
    }
    
    char my_name[100];
    m_edit1.GetWindowText(my_name, 100);

    if(RegSetValueEx(g, "MySoft", 0, REG_SZ, (const unsigned char*) my_name, strlen(my_name)))
    {
        printf("Could not create the registry key."); 
        abort();
    };

    RegCloseKey(g);
    RegCloseKey(h);
     // Free the memory allocated for the SECURITY_DESCRIPTOR.
     if (NULL != LocalFree(sa.lpSecurityDescriptor))
     {
         // Error encountered; generate message and exit.
         printf("Failed LocalFree\n");
         exit(1);
     }
}


При создание Dacl использовал вот эту информацию:  <a href='http://msdn.microsoft.com/en-us/library/ms717798(VS.85).aspx' target='_blank'>http://msdn.microsoft.com/en-us/library/ms717798(VS.85).aspx </a>
Возникают две ошибки:  
Код

 error C2065: 'ConvertStringSecurityDescriptorToSecurityDescriptor' : undeclared identifier
 error C2065: 'SDDL_REVISION_1' : undeclared identifier

В чем может быть причина этих ошибок?

Или как с помощью ф-ции SetSecurityInfo(g,SE_REGISTRY_KEY,DACL_SECURITY_INFORMATION,NULL,NULL,pNewDacl,NULL) создать такой Dacl?


Это сообщение отредактировал(а) SVlexs510 - 13.12.2008, 16:14
PM MAIL   Вверх
J0ker
Дата 13.12.2008, 22:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 986
Регистрация: 17.9.2008

Репутация: -1
Всего: 14



--

Это сообщение отредактировал(а) J0ker - 13.12.2008, 22:49


--------------------
user posted image
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0386 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.