SID(security identifier) - идентификатор безопасности. Данная структура уникально идентифицирует пользователя или группу в домене Windows NT. Именно по этому идентификатору определяют пользователей. Не по имени и по паролю, а по этому идентификатору. Например, Вы создали учетную запись. Потом стерли ее. Если снова создать запись с тем же именем и паролем SID будет уже другой и права не сохраняться. SID создается при создании учетной записи. Так же его имеют и все машины в сети. Отсюда понятна проблема, которая может случиться. Если у вас один первичный контролер домена, то после выхода его из строя и инсталляции снова Windows NT Server все и всех придется заново регистрировать и давать привилегии. Все строить на простой идеи. Этот идентификатор генерируется при создании учетной записи. Повторное создание приведет к генерации нового SID и это не зависит от паролей и имен.
Сам SID для программиста это структура.
typedef struct _SID { BYTE Revision; BYTE SubAuthorityCount; SID_IDENTIFIER_AUTHORITY IdentifierAuthority; DWORD SubAuthority[ANYSIZE_ARRAY]; } SID; typedef PVOID PSID;
Хранится все это в виде двоичных значений. Но есть ряд функций преобразования:
ConvertSidToStringSid - SID->String ConvertStringSidToSid - String->SID
В виде строки SID выглядит примерно вот так.
S-1-5-21-859275398-5967894345-141239485734-1105
Строковое представление SID имеет определенный формат S-I-R-S
S - с этой буквы начинается SID R - число представляющее уровень контроля I - идентификатор полномочий S - идентификаторы подчиненных полномочий