Читаем Системное программирование в среде Windows полностью

 DWORD iBit, iSid, UsrCnt = ACCT_NAME_SIZE;

 /* Таблицы имен пользователя (User), группы (Group) и прочих пользователей (Everyone), идентификаторов SID и так далее для LookupAccountName и создания SID. */

 LPCTSTR pGrpNms[3] = {EMPTY, EMPTY, _T("Everyone")};

 PSID pSidTable[3] = {NULL, NULL, NULL};

 SID_NAME_USE sNamUse[3] = {SidTypeUser, SidTypeGroup, SidTypeWellKnownGroup};

 TCHAR RefDomain[3][DOM_SIZE];

 DWORD RefDomCnt[3] = {DOM_SIZE, DOM_SIZE, DOM_SIZE};

 DWORD SidCnt[3] = {SID_SIZE, SID_SIZE, SID_SIZE};

 __try { /* Блок try-except для исключений при распределении памяти. */

  *рНеар = SAHeap;

  pSA = HeapAlloc(SAHeap, 0, sizeof (SECURITY_ATTRIBUTES));

  pSA->nLength = sizeof(SECURITY_ATTRIBUTES);

  pSA->bInheritHandle = FALSE;

  /* Программист может выполнить эти установки позже. */

  pSD = HeapAlloc(SAHeap, 0, sizeof(SECURITY_DESCRIPTOR));

  pSA->lpSecurityDescriptor = pSD;

  InitializeSecurityDescriptor(pSD, SECURITY DESCRIPTOR REVISION); 

  /* Получить SID пользователя, группы и прочих пользователей.

   * Другие важные подробности можно найти на Web-сайте. */

  pGrpNms[0] = UsrNam;

  pGrpNms[1] = GrpNam;

  for (iSid = 0; iSid < 3; iSid++) {

   pSidTable[iSid] = HeapAlloc(SAHeap, 0, SID_SIZE);

   LookupAccountName(NULL, pGrpNms[iSid], pSidTable[iSid], &SidCnt[iSid], RefDomain[iSid], &RefDomCnt[iSid], &sNamUse[iSid]);

  }

  SetSecurityDescriptorOwner(pSD, pSidTable[0], FALSE);

  SetSecurityDescriptorGroup(pSD, pSidTable[1], FALSE);

  pAcl = HeapAlloc(ProcHeap, HEAP_GENERATE_EXCEPTIONS, ACL_SIZE);

  InitializeAcl(pAcl, ACL_SIZE, ACL_REVISION);

  /* Добавить все элементы АСЕ, разрешающие и запрещающие доступ. */

  for (iBit = 0; iBit < 9; iBit++) {

   if ((UnixPerms >> (8 – iBit) & 0x1) != 0 && AceMasks[iBit%3] != 0) AddAccessAllowedAce(pAcl, ACL_REVISION, AceMasks [iBit%3], pSidTable [iBit/3]);

   else if (AceMasks[iBit%3] != 0) AddAccessDeniedAce(pAcl, ACL_REVISION, AceMasks [iBit%3], pSidTable [iBit/3]);

  }

  /* Добавить запрет доступа для всех АСЕ категории "Прочие". */

  Success = Success && AddAccessDeniedAce(pAcl, ACL_REVISION, STANDARD_RIGHTS_ALL | SPECIFIC_RIGHTS_ALL, pSidTable[2]);

  /* Связать ACL с атрибутом защиты. */

  SetSecurityDescriptorDacl(pSD, TRUE, pAcl, FALSE);

  return pSA;

 } /* Конец блока try-except. */

 __except(EXCEPTION_EXECUTE_HANDLER) { /* Освободить все ресурсы. */

  if (SAHeap != NULL) HeapDestroy(SAHeap);

  pSA = NULL;

 }

 return pSA;

} 

<p>Комментарии к программе 15.3</p>

Хотя структура программы 15.3 и может показаться несложной, выполняемую ею операцию вряд ли можно назвать простой. Кроме того, программа иллюстрирует целый ряд моментов, заслуживающих внимания, которые касаются использования средств безопасности Windows.

Перейти на страницу:

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных