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 - идентификаторы подчиненных полномочий