Получение имени домена пользователя для задания печати из API диспетчера очереди печати

Как я могу узнать доменное имя пользователя, выполняющего печать, с учетом идентификатора задания для печати?

Я могу получить имя пользователя, например, из JOB_INFO_2, полученного с помощью GetJob, но ни одна из структур JOB_INFO_ # не содержит доменного имени пользователя.

Я могу получить домен сервера печати, используя IPGlobalProperties.GetIPGlobalProperties().DomainName, но он может не совпадать с доменом пользователя, поэтому это ненадежное решение.


person Lawrence Johnston    schedule 30.07.2013    source источник
comment
Верно ли, что пользователь может печатать на принтере в другом домене без предоставления действительного входа в систему для этого домена? Я сам не знаю, но мне интересно, может быть, домен сервера печати достаточно хорош.   -  person Roger Rowland    schedule 06.08.2013
comment
Первоначально это было зарегистрировано как ошибка в NT 4.0 ›член pUserName структуры JOB_INFO_2 не включает домен Информация.   -  person randcd    schedule 11.08.2013
comment
@randcd - ссылка не в нужное место.   -  person Carey Gregory    schedule 11.08.2013
comment
@CareyGregory у меня работает нормально. Что не так со страницей? Сообщенная проблема - одна из числа, перечисленных в той же статье, хотя в то время это была структура GDI или была объединена с ними ради ошибки. Возможно, к нему никогда не обращались, поскольку вариант использования был бы довольно второстепенным.   -  person randcd    schedule 11.08.2013
comment
@randcd - Извините, я искал более подробный отчет об ошибке, но теперь я понимаю, о чем вы говорите. Думаю, это говорит нам о том, как скоро Microsoft исправит это. NT4 устарел на 13 лет?   -  person Carey Gregory    schedule 11.08.2013


Ответы (2)


Я не знаю наверняка, но мне приходит в голову, что, возможно, имя пользователя будет включать в себя домен пользователя (что-то вроде name @ domain), и, возможно, это произойдет только в том случае, если пользователь печатает на принтере в другом домене. Возможно, стоит написать код и проверить это.

person Stuart    schedule 07.08.2013
comment
Я знаю, что он не включает домен для пользователя в том же домене, но похоже, что стоит проверить, чтобы убедиться, что поведение одинаково для пользователя из другого домена. - person Lawrence Johnston; 10.08.2013
comment
У меня нет доступа к среде, где я мог бы проверить это сам, поэтому, если вы это проверите, поделитесь результатами. - person Stuart; 12.08.2013

Чтобы найти пользователь по имени пользователя. Как только пользователь будет найден, получите домен с этим свойством UserPrincipal Context.

Вам нужно будет добавить ссылку на System.DirectoryServices.AccountManagement.

person Cakez0r    schedule 12.08.2013
comment
Разместите рабочий код, который демонстрирует вашу идею и приносит вам 50 баллов. На вознаграждение действует 24-часовой льготный период. - person Carey Gregory; 13.08.2013
comment
Спасибо за идею. Я попробую. - person Lawrence Johnston; 16.08.2013