Организация стока поверхностных вод: Наибольшее количество влаги на земном шаре испаряется с поверхности морей и океанов (88‰)...
Опора деревянной одностоечной и способы укрепление угловых опор: Опоры ВЛ - конструкции, предназначенные для поддерживания проводов на необходимой высоте над землей, водой...
Топ:
Комплексной системы оценки состояния охраны труда на производственном объекте (КСОТ-П): Цели и задачи Комплексной системы оценки состояния охраны труда и определению факторов рисков по охране труда...
История развития методов оптимизации: теорема Куна-Таккера, метод Лагранжа, роль выпуклости в оптимизации...
Оценка эффективности инструментов коммуникационной политики: Внешние коммуникации - обмен информацией между организацией и её внешней средой...
Интересное:
Влияние предпринимательской среды на эффективное функционирование предприятия: Предпринимательская среда – это совокупность внешних и внутренних факторов, оказывающих влияние на функционирование фирмы...
Лечение прогрессирующих форм рака: Одним из наиболее важных достижений экспериментальной химиотерапии опухолей, начатой в 60-х и реализованной в 70-х годах, является...
Подходы к решению темы фильма: Существует три основных типа исторического фильма, имеющих между собой много общего...
Дисциплины:
2017-06-11 | 515 |
5.00
из
|
Заказать работу |
Первая задача - перечисление привилегий данной учетной записи - решается при помощи функции LsaEnumerateAccountRights. Эта функция перечисляет привилегии пользователя с заданным идентификатором безопасности Sid в отношении системы с объектом политики PolicyHandle, передаваемыми ей в качестве параметров.
Обычно учетная запись, если не предпринимать специальных мер, не имеет привилегий. Привилегиями обладает группа, к которой принадлежит данный пользователь. Поэтому не нужно удивляться, если число привилегий, которыми обладает конкретный пользователь, в том числе и администратор системы, окажется равным 0. Напротив, набор привилегий в маркере представляет собой совокупность привилегий пользователя и групп, к которым приписан данный пользователь. С другой стороны, если добавить привилегию пользователю и вызвать функцию LsaEnumerateAccountRights, то вновь добавленная привилегия сразу же будет замечена, тогда как в маркере доступа процессов данного пользователя ее не окажется. Это связано с тем, что такой маркер формируется на этапе входа пользователя в систему, поэтому, иногда, для того, чтобы новая привилегия пользователя попала в его маркер доступа, целесообразно осуществить повторный вход в систему.
Прогон программы перечисления привилегий пользователя
В качестве примера рассмотрим программу, задача которой - вывод списка привилегий текущего пользователя.
#ifndef UNICODE
#define UNICODE
#endif
#include <windows.h>
#include <stdio.h>
#include "ntsecapi.h"
BOOL GetUserSID(TOKEN_USER *, PDWORD pdwSize);
void main(void){
PSID pSid;
DWORD TokenUserBufSize=256;
TOKEN_USER *pUser;
HANDLE hHeap;
LSA_HANDLE hPolicy=NULL;
LSA_OBJECT_ATTRIBUTES ObjAttributes = {0};
ULONG Count = 0, i = 0, PrivDispBufLen = 512, Language = 0;
PLSA_UNICODE_STRING Privileges = NULL;
WCHAR PrivBuf[512], PrivDispBuf[512];
CHAR TempPrivDispBuf[512], TempPrivBuf[512];
BOOL Return;
hHeap = GetProcessHeap();
pUser = (TOKEN_USER *)HeapAlloc(hHeap, HEAP_ZERO_MEMORY, TokenUserBufSize);
if(!GetUserSID(pUser, &TokenUserBufSize)) printf("GetUserSid Error\n");
pSid = pUser->User.Sid;
if(!IsValidSid(pSid)) { printf("Sid Error\n"); return; }
ObjAttributes.Length = sizeof(ObjAttributes);
LsaOpenPolicy(NULL, &ObjAttributes, POLICY_VIEW_LOCAL_INFORMATION| POLICY_LOOKUP_NAMES| POLICY_CREATE_ACCOUNT, &hPolicy);
LsaEnumerateAccountRights(hPolicy, pSid, &Privileges, &Count);
printf("Current user has %d privileges:\n",Count);
for(i = 0; i < Count; i ++) {
lstrcpyn(PrivBuf, Privileges[i].Buffer, Privileges[i].Length);
PrivBuf[Privileges[i].Length] = 0;
PrivDispBufLen = 512;
Return = LookupPrivilegeDisplayName(NULL, PrivBuf, PrivDispBuf, &PrivDispBufLen, &Language);
if(!Return) lstrcpy(PrivDispBuf, TEXT("Дружественное имя привилегии не найдено"));
CharToOem(PrivDispBuf, TempPrivDispBuf);
CharToOem(PrivBuf, TempPrivBuf);
printf("%s (%s)\n", TempPrivBuf, TempPrivDispBuf);
}
if(Privileges) LsaFreeMemory(Privileges);
LsaClose(hPolicy);
HeapFree(hHeap,0,pUser);
}
BOOL GetUserSID(TOKEN_USER * pUser, PDWORD pdwSize) {
BOOL fSuccess = FALSE;
HANDLE hToken = NULL;
DWORD dwSize;
if (!OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, &hToken)) return FALSE;
if (!GetTokenInformation(hToken, TokenUser, pUser, *pdwSize, &dwSize))
return FALSE;
fSuccess = TRUE;
if (hToken!= NULL) CloseHandle(hToken);
return(fSuccess);
}
Данная программа получает маркер доступа текущего процесса, извлекает из него Sid пользователя, при помощи функции LsaOpenPolicy открывает объект политики безопасности и вызывает функцию LsaEnumerateAccountRights для получения списка привилегий. Функция LookupPrivilegeDisplayName преобразует программное имя привилегии в дружественное имя. Для вывода имени привилегии на экран на русском языке используется функция CharToOem. Если число привилегий оказывается равным нулю, то с учетом замечания, сделанного выше, рекомендуется добавить пользователю, от имени которого запускается программа, одну или несколько привилегий с помощью административной консоли управления.
Поперечные профили набережных и береговой полосы: На городских территориях берегоукрепление проектируют с учетом технических и экономических требований, но особое значение придают эстетическим...
Автоматическое растормаживание колес: Тормозные устройства колес предназначены для уменьшения длины пробега и улучшения маневрирования ВС при...
Механическое удерживание земляных масс: Механическое удерживание земляных масс на склоне обеспечивают контрфорсными сооружениями различных конструкций...
Индивидуальные и групповые автопоилки: для животных. Схемы и конструкции...
© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!