На главную

On-line справка по Win32 API

Написать письмо
БЕСПЛАТНАЯ ежедневная online лотерея! Выигрывай каждый день БЕСПЛАТНО!
Список всех статей A-B-C-D-E-F-G-H-I-J-K-L-M-N-O-P-Q-R-S-T-U-V-W-X-Y-Z | Скачать Вниз

Denying Access



You can deny all access to an object by adding an empty discretionary access-control list (DACL) to the object's security descriptor. An empty DACL has no access-control entries (ACEs), which means that the DACL does not grant access to anyone. Note that this is different from a security descriptor that has no DACL; in that case, the system grants everyone full access to the object. You can also prevent a specified trustee from gaining access to an object by using a DACL that has one or more access-denied ACEs.

This topic includes examples that use the high-level access-control functions that are new for Windows NT version 4.0. For an example that uses the older low-level access control functions, see Denying Access Using Low-Level Functions.
The high-level examples use the SetEntriesInAcl function to create an ACL. Then they use the SetNamedSecurityInfo function to attach the ACL as the DACL of an object. Note that these examples can work with a variety of named securable objects, such as files, registry keys, and synchronization objects.

The first example shows how to add an empty DACL to an object's security descriptor. The effect is to deny all access to the object.

DWORD SetEmptyDACL(LPTSTR lpObjectName, SE_OBJECT_TYPE ObjectType)
{
DWORD dwRes;
PACL pDacl;

if (NULL == lpObjectName)
return ERROR_INVALID_PARAMETER;

// create an ACL with no ACEs

dwRes = SetEntriesInAcl(0, NULL, NULL, &pDacl);
if (ERROR_SUCCESS != dwRes)
return dwRes;

// attach the emtpy ACL as the object's DACL

dwRes = SetNamedSecurityInfo(lpObjectName, ObjectType,
DACL_SECURITY_INFORMATION,
NULL, NULL, pDacl, NULL);


// free the buffer returned by SetEntriesInAcl

LocalFree(pDacl);

return dwRes;
}


You can modify this example to deny access to a specified trustee. The following variation uses the BuildExplicitAccessWithName function to initialize an EXPLICIT_ACCESS structure with the data for an access-denied ACE. Then it uses the SetEntriesInAcl and SetNamedSecurityInfo functions to create the ACL and attach it to the object.

#include

DWORD dwRes;
PACL pDacl;
EXPLICIT_ACCESS ea;

// initialize an EXPLICIT_ACCESS structure to deny access

ZeroMemory(&ea, sizeof(EXPLICIT_ACCESS));
BuildExplicitAccessWithName(&ea,
"ludwig", // name of trustee
GENERIC_ALL, // type of access
DENY_ACCESS, // access mode
NO_INHERITANCE); // inheritance mode

// create an ACL with one access-denied ACE

dwRes = SetEntriesInAcl(1, &ea, NULL, &pDacl);

if (ERROR_SUCCESS != dwRes)
return dwRes;

// attach the ACL as the object's DACL

dwRes = SetNamedSecurityInfo(TEXT("myfile"), SE_FILE_OBJECT,
DACL_SECURITY_INFORMATION,
NULL, NULL, pDacl, NULL);

// free the buffer returned by SetEntriesInAcl

LocalFree(pDacl);



Пригласи друзей и счет твоего мобильника всегда будет положительным!
Предыдущая статья
 
Сайт Народ.Ру Интернет
Следующая статья
Пригласи друзей и счет твоего мобильника всегда будет положительным!

Отвергающий Доступ



Вы можете отвергнуть весь доступ к объекту добавляя пустым дискреционным иметь доступ к-управляющему списку (DACL) в объектный дескриптор безопасности. Пустой DACL не имеет иметь доступ к-управляющим данным (ПЕР.ТОКИ), который означает, что DACL не предоставляет доступ к каждому. Отметьте, что это отличается от дескриптора безопасности, что не имеет DACL; в этом случае, система предоставляет весь полный доступ к объекту. Вы можете также помешать определенному попечителю чтобы получать доступ к объекту используя DACL, что имеет один или более отвергнутых АСОВ доступа.

Эта тема включает примеры, которые используют высокоуровневый имеют доступ к-управляющим функциям, которые новые для версии Windows NT 4.0. Для примера, который использует более старый доступ низкого уровня управляющих функций, смотри Отвергать Доступа, использовавшего Функции Low-Level.
Высокоуровневые примеры используют функцию SetEntriesInAcl, чтобы создавать ACL. Затем они используют функцию SetNamedSecurityInfo, чтобы подключать ACL как DACL объект. Отметьте, что эти примеры могут работать с рядом поименованных securable объектов, как например, файлы, ключи регистрации, и объекты синхронизации.

Первый пример показывает как, чтобы добавлять пустой DACL к объектному дескриптору безопасности. Эффект должен отвергнуть весь доступ к объекту.

DWORD SetEmptyDACL(LPTSTR lpObjectName, SE_OBJECT_TYPE ObjectType)
{
DWORD dwRes;
PACL pDacl;

если возврат (НЕДЕЙСТВИТЕЛЬНЫЙ == lpObjectName) ERROR_INVALID_PARAMETER;

// создайте ACL без АСОВ

dwRes = SetEntriesInAcl(0, НЕДЕЙСТВИТЕЛЬНОЕ, НЕДЕЙСТВИТЕЛЬНОЕ, &pDacl);
если возврат (ERROR_SUCCESS != dwRes) dwRes;

// подключите emtpy ACL как объектный DACL

dwRes = SetNamedSecurityInfo(lpObjectName, ObjectType, DACL_SECURITY_INFORMATION, НЕДЕЙСТВИТЕЛЬНЫЙ, НЕДЕЙСТВИТЕЛЬНЫЙ, pDacl, НЕДЕЙСТВИТЕЛЬНЫЙ);


// освобождать буфер возвращался SetEntriesInAcl

LocalFree(pDacl);

возвращайте dwRes;
}


Вы можете модифицировать этот пример, чтобы отвергать доступ к определенному попечителю. Следующее изменение использует функцию BuildExplicitAccessWithName, чтобы инициализировать структуру EXPLICIT_ACCESS с данными для запрещенного АСА доступа. Затем это использует SetEntriesInAcl и функции SetNamedSecurityInfo, чтобы создавать ACL и подключать это к объекту.

#include

DWORD dwRes;
PACL pDacl;
EXPLICIT_ACCESS кажд.;

// инициализируйте структуру EXPLICIT_ACCESS, чтобы запрещать доступ

ZeroMemory(&ea, sizeof(EXPLICIT_ACCESS));
BuildExplicitAccessWithName(&ea, "ludwig", // ИМЯ попечителя GENERIC_ALL, // тип доступа DENY_ACCESS, // режим доступа NO_INHERITANCE); // режим наследства

// создайте ACL с одним запрещенным АСОМ доступа

dwRes = SetEntriesInAcl(1, &Кажд., НЕДЕЙСТВИТЕЛЬНЫЙ, &pDacl);

если возврат (ERROR_SUCCESS != dwRes) dwRes;

// подключите ACL как объектный DACL

dwRes = SetNamedSecurityInfo(ТЕКСТ("myfile"), SE_FILE_OBJECT, DACL_SECURITY_INFORMATION, НЕДЕЙСТВИТЕЛЬНЫЙ, НЕДЕЙСТВИТЕЛЬНЫЙ, pDacl, НЕДЕЙСТВИТЕЛЬНЫЙ);

// освобождать буфер возвращался SetEntriesInAcl

LocalFree(pDacl);



Вверх Version 1.3, Oct 26 2010 © 2007, 2010, mrhx Вверх
 mrhx software  Русский перевод OpenGL  Русский перевод Win32 API
 
Используются технологии uCoz