unit untSecDesc;interfaceuses Windows, Messages, SysUtils, StrUtils, LM;
type _ACE_HEADER = record AceType: BYTE; AceFlags: BYTE; AceSize: WORD; end; ACE_HEADER = ^_ACE_HEADER; PACE_HEADER = ^ACE_HEADER;
type _ACCESS_ALLOWED_ACE = record Header: ACE_HEADER; Mask: ACCESS_MASK; SidStart: DWORD; end; ACCESS_ALLOWED_ACE = ^_ACCESS_ALLOWED_ACE;
const RTN_OK: Integer = 0; RTN_USAGE: Integer = 1; RTN_ERROR: Integer = 13;
SID_SIZE: Integer = 96; ACL_REVISION: Integer = 1;//#pragma comment(lib,”NetApi32.lib”) // Note: UNICODE entry point and argv. This way, we don”t need to bother // with converting commandline args to Unicode //
Этот вопрос решил, а вот теперь возникает ошибка при AddAccessAllowedAce 1344. Это значит, скорее всего, что размер dwAclSize определён неправильно. Кто-нибудь делал такое?
dwAclSize:= SizeOf(ACL) + 1 * (SizeOf(ACCESS_ALLOWED_ACE) – SizeOf(DWORD)) + GetLengthSid(MypSid) ;
MypDacl:= HeapAlloc(GetProcessHeap(), 0, dwAclSize); if MypDacl = nil then Exit; if not InitializeAcl(MypDacl^, dwAclSize, ACL_REVISION) then Exit; if not AddAccessAllowedAce(MypDacl^, ACL_REVISION, GENERIC_ALL, MypSid) then begin MessageBox(0, PChar(“AddAccessAllowedAce error! № “+ IntToStr(GetLastError())+ ” – “+ SysErrorMessage(GetLastError())), PChar(“Error!”), MB_OK); // 1344 ERROR_ALLOTTED_SPACE_EXCEEDED Exit; end;
Вот что постоянно раз в 5-ть минут кидается в лог: Винда вин2к серв русская, все имена, группы и прочая ерунда английская т.к. все было мигрированно с вин НТ4
Для диагностики этого события выполните вход с неадминистративной учетной записью и на http://support.microsoft.com выполните поиск раздела “Troubleshooting 1202 events” (“Диагностика события 1202”).Не удалось разрешить в SID учетную запись или один из объектов групповой политики (GPO). Эта ошибка скорее всего вызвана неправильно введенной или удаленной учетной записью, на которую имеется ссылка в ветви “Права пользователя” или “Группы с ограниченным доступом” GPO. Для диагностики этого события администратору домена следует выполнить следующие действия:
1. Определить учетные записи, которые не удалось разрешить в SID: в командной строке введите: FIND /I “Не удалось найти” %SYSTEMROOT%SecurityLogswinlogon.logСтрока, следующая за “Не удалось найти” в результирующей информации FIND определяет проблемные имена учетных записей.Пример: Не удается найти JohnDough.В этом случае, не удалось определить SID для имени пользователя “JohnDough”. Вероятно, это вызвано тем, что учетная запись была удалена, переименована или просто пишется по-другому (например: “JohnDoe”).
2. Определить те GPO, которые содержат несопоставимое имя учетной записи:В командной строке введите: FIND /I “JohnDough” %SYSTEMROOT%SecurityTemplatespoliciesgpt*.* Результиру ющая информация команды FIND может выглядеть примерно так: ———- GPT00000.DOM ———- GPT00001.DOM SeRemoteShutdownPrivilege=JohnDough Это указывает, что из всех GPO, примененных к этому компьютеру, несопоставимая учетная запись существует только в одном GPO. Конкретно, в кэшированном GPO под именем GPT00001.DOM. Теперь нужно определить понятное имя для этого GPO.
В моём случае ошибка возникла при добавлении второго контроллера Windows 2008 R2 x86 Rus (SRV1) к существующему домену с контроллером Windows 2008 x64 Rus (SRV2) с помощью команды:
Поскольку SRV2 функционирует на базе архитектуры x64, а SRV1 на базе x86, то для запуска adprep используется файл adprep32.exe.
Решение: папку “ru-ru” переименовать в “en-us”.