В Win32 вызовите GetTokenInformation , передав маркер маркера и константу TokenUser
. Он заполнит структуру TOKEN_USER для вас. Один из элементов в нем - SID пользователя. Это BLOB (двоичный), но вы можете превратить его в строку с помощью ConvertSidToStringSid .
Чтобы получить текущий дескриптор маркера, используйте OpenThreadToken или OpenProcessToken .
Если вы предпочитаете ATL, у него есть класс CAccessToken , в котором есть всевозможные интересные вещи.
.NET имеет свойство Thread.CurrentPrinciple , которое возвращает ссылку IPrincipal. Вы можете получить SID:
IPrincipal principal = Thread.CurrentPrincipal;
WindowsIdentity identity = principal.Identity as WindowsIdentity;
if (identity != null)
Console.WriteLine(identity.User);
Также в .NET вы можете использовать WindowsIdentity.GetCurrent (), который возвращает текущий идентификатор пользователя:
WindowsIdentity identity = WindowsIdentity.GetCurrent();
if (identity != null)
Console.WriteLine(identity.User);
Поскольку подчеркивания - это буквально буквы, bash не может знать, когда заканчивается имя вашей переменной и начинается буквальное подчеркивание. В этом случае правильный способ ссылки на переменные - это ${...}
, который однозначно отделяет имя от остальной части командной строки:
sample1="${env_abr1}_${cnt_abr1}"
sample2=${env_abr2}_${cnt_abr3}
В обоих случаях второе имя не требует специальной обработки , Любой другой (семантически действительный) небуквенный символ тоже подойдет, как вы указали в своем комментарии: