Здравствуйте, Бабуин, Вы писали:
Б>использован вызов WTSEnumerateProcesses, получен SID — но LookupAccountSid
Б>не идентифицирует аккаунт, сообщая об ошибке 1332.
Б>Попытки вытащить данные из сессии через WTSQuerySessionInformation — безуспешны,
Б>соответствующие позиции(домен, логин) возвращаемой структуры данных пусты.
Б>Отображаются только имена локальных аккаунтов(SYSTEM, WETWORK SERVICE)
Б>Приложение выполняется с полномочиями сисадмина, вызов tasklist /S <host>
Б>с этими полномочиями отрабатывает успешно, отображая аккаунты процессов.
Б>О каких нюансах я не ведаю? Есть какие-то особенности? или вообще — иные
Б>способы получить такие данные?
Хм, ошибка 1332 вроде как однозначно говорит, что в доступных Вашему провайдеру безопасности базах такой сид не числится. А SYSTEM, WETWORK SERVICE, они на любой системе одинаковы, потому как well-known. В связи с чем несколько глупых вопросов, если не возражаете
Имя системы при вызове LookupAccountSid указано верно? Сам полученный SID на вид как, нормальный? Можете его сравнить с реальным SID того пользователя, от которого работает целевое приложение? Может это вообще не доменный пользователь, может её под локальным запустили? Сисадмин, от которого запускаете своё приложение, он доменный?
Ещё можно ApiMon'ом посмотреть, что tasklist дёргает. По крайней мере, wbemXXX либы она загружает.
Здравствуйте, Аноним, Вы писали:
А>Хм, ошибка 1332 вроде как однозначно говорит, что в доступных Вашему провайдеру безопасности базах такой сид не числится. А SYSTEM, WETWORK SERVICE, они на любой системе одинаковы, потому как well-known. В связи с чем несколько глупых вопросов, если не возражаете
А>Имя системы при вызове LookupAccountSid указано верно? Сам полученный SID на вид как, нормальный? Можете его сравнить с реальным SID того пользователя, от которого работает целевое приложение? Может это вообще не доменный пользователь, может её под локальным запустили? Сисадмин, от которого запускаете своё приложение, он доменный?
А>Ещё можно ApiMon'ом посмотреть, что tasklist дёргает. По крайней мере, wbemXXX либы она загружает.
Возражаю?! Уважаемый, я торжествую, что получил хотя бы малость Вашего великодушного внимания!!
После дня мучений получил такие достижения и результаты:
Получаемый SID корректный. Нечего лучше, чем извлечь информацию через
const string SidSearchFormat = "
LDAP://<SID={0}>";
DirectoryEntry(string.Format(SidSearchFormat, SIO.ToString()));
я не нашел. Это даже корректно работает, и извлекает кучу атрибутов элемента AD.
Даже для удаленных систем...но! Проверка показала, что работает — да не всегда.
Если я опрашиваю, скажем, сервер — всё отлично. Но применительно к рабочим станциям
я ещё на вызове hserver = WTSOpenServer(args[0]) получаю ошибку с кодом 5(Access Denied).
Типа, недостаточно прав — хотя вызов проходит с полномочиями сисадмина, а например
интерактивно удаленный рабочий стол на системе я получаю без проблем.
Удаленные операционки РС — от WinXP и выше...
С другой стороны, используя WMI-интерфейс, я без проблем получаю процессы и владельцев
с рабочих станций, но не могу получить доступ к серверам.
При вызове
ManagementScope oMs = new ManagementScope("\\\\" + args[0] +"\\root\\cimv2", connectoptions);
Console.WriteLine("*");
oMs.Connect();
возникает ошибка
Необработанное исключение: System.Runtime.InteropServices.COMException (0x800706
BA): Сервер RPC недоступен. (Исключение из HRESULT: 0x800706BA)
в System.Runtime.InteropServices.Marshal.ThrowExceptionForHRInternal(Int32 er
rorCode, IntPtr errorInfo)
Есть один нюанс — сервера обитают в одной подсети, РС — в другой. Вероятно, проблема именно в этом.
и вот сижу в депрессии есть вариант WMI, который работает только в моей подсетке.
И есть вариант WST* API, который работает только между моей РС и серверами...
черт знает что. Вот такие гниловате плоды собраны за день