Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/15: Рейтинг темы: голосов - 15, средняя оценка - 4.67
4 / 4 / 0
Регистрация: 18.09.2011
Сообщений: 12

Получение прав на доступ к принтеру

18.09.2011, 13:39. Показов 2973. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день, собственно сабж. С файлами и папками всё просто и понятно, здесь же не всё так очевидно. МСДН вроде как молчит. Наверное должно быть можно как-то выдрать коллекцию установленных принтеров и работать с ней, но как это сделать я не знаю.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
18.09.2011, 13:39
Ответы с готовыми решениями:

Доступ к принтеру по сети
Ситуация такая - в сети у нас несколько рабочих групп.Хотелось бы сделать так,чтобы принтер был доступен только нашей.Это возможно,или он в...

Общий доступ к принтеру
Всем привет. Имеется принтер Samsung SCX - 4220. И 4 компьютера(ноутбук), у 3-х интернет через Wi-Fi маршрутизатор, у одного Yota. Системы...

Доступ к расшариному принтеру AD
Здравствуйте. Имеется WinServer 2008 r2. Поднят AD. К домену подключены некоторое кол-во компьютеров. Локальная сеть одна. Есть компьютеры...

6
168 / 140 / 23
Регистрация: 02.01.2011
Сообщений: 913
18.09.2011, 14:55
Смотрите в сторону
C#
1
2
3
4
5
6
7
8
9
namespace System.Drawing.Printing
{
    // Summary:
    //     Specifies information about how a document is printed, including the printer
    //     that prints it, when printing from a Windows Forms application.
    [Serializable]
    public class PrinterSettings : ICloneable
//......
    {
0
4 / 4 / 0
Регистрация: 18.09.2011
Сообщений: 12
18.09.2011, 15:50  [ТС]
iva_a, посмотрел, нужного там нет всё равно, нашлось нечто близкое:
http://msdn.microsoft.com/ru-r... fsy75.aspx

После чего гугл, вновь мсдн, и вот я вроде как нашёл то, что нужно:
http://msdn.microsoft.com/en-u... s.85).aspx

Только вот это ни капли не дотнет и я не особо представляю, что мне с этим делать. Может я вообще не то нашёл.
0
168 / 140 / 23
Регистрация: 02.01.2011
Сообщений: 913
18.09.2011, 16:27
А этот пример Вы смотрели?
C#
1
http://msdn.microsoft.com/ru-ru/library/system.drawing.printing.printersettings.aspx
Добавлено через 3 минуты
И этот
C#
1
http://msdn.microsoft.com/ru-ru/library/system.windows.forms.printdialog.aspx
Добавлено через 2 минуты
И еще
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
//C#. Сборник рецептов. Агуров П.В.
 
using System;
using IWshRuntimeLibrary;
 
namespace SetDefaultPrinter
{
    class DefaultPrinter
    {
        [STAThread]
        static void Main(string[] args)
        {
            WshNetwork network = new WshNetwork();
 
            // получить список принтеров
            IWshCollection Printers = network.EnumPrinterConnections();
            if (Printers.Count() > 0)
            {
                // индекс устанавливаемого принтера в списке принтеров
                object index = (object)"1";
                // установка принтера с выбранным индексом
                // как принтера по умолчанию
                network.SetDefaultPrinter((string)Printers.Item(ref index));
            }
        }
    }
}
1
4 / 4 / 0
Регистрация: 18.09.2011
Сообщений: 12
18.09.2011, 19:45  [ТС]
iva_a, в первых двух ничего интересного, а вот за 3-й спасибо, может там найдётся чего.

Добавлено через 2 часа 45 минут
И вновь нет, в IWshRuntimeLibrary ничего, связанного с безопасностью не нашлось.
0
168 / 140 / 23
Регистрация: 02.01.2011
Сообщений: 913
19.09.2011, 11:04
https://www.cyberforum.ru/csha... 10011.html
0
4 / 4 / 0
Регистрация: 18.09.2011
Сообщений: 12
20.09.2011, 14:58  [ТС]
iva_a, на эту тему натыкался в своих поисках, но мне нужен (увы) не список принтеров, а права доступа к ним. Через PrintDialog и PrinterSettings их не выцепить, поскольку там попросту нет соотв. функционала.

Добавлено через 3 часа 10 минут
Небольшой апдейт, нашёл кусок кода, который с помощью WMI работает с принтером.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
using System;
using System.Management;
namespace zedilabs.com
{
    class PrinterOffline
    {
        [STAThread]
        static void Main(string[] args)
        {
            // Set management scope
            
            ManagementScope scope = new ManagementScope(@"\root\cimv2");
            scope.Connect();
 
            // Select Printers from WMI Object Collections
 
            ManagementObjectSearcher searcher = new
             ManagementObjectSearcher("SELECT * FROM Win32_Printer");
 
            string printerName = "";
            foreach (ManagementObject printer in searcher.Get())
            {
                printerName = printer["Name"].ToString().ToLower();
                if (printerName.Equals(@"hp deskjet 930c"))
                {
                    Console.WriteLine("Printer = " + printer["Name"]);
                    if (printer["WorkOffline"].ToString().ToLower().Equals("true"))
                    {
                        // printer is offline by user
 
                        Console.WriteLine("Your Plug-N-Play printer is not connected.");
                    }
                    else
                    {
                        // printer is not offline
 
                        Console.WriteLine("Your Plug-N-Play printer is connected.");
                    }
                }
            }
            Console.ReadLine();
        }
    }
}
В самом классе Win32_Printer есть метод GetSecurityDescriptor, только вот я ни капли не понимаю что я вообще тут делаю, а занимаюсь копипастингом. Эх, помог бы кто разобраться.

Добавлено через 19 часов 4 минуты
И вновь апдейт, решение вроде как найдено (вдруг кому интересно)

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
using System;
using System.Management;
namespace zedilabs.com
{
    [Flags]
    enum Mask : uint
    {
        FileReadData = 0x00000001,
        FileWriteData = 0x00000002,
        FileAppendData = 0x00000004,
        FileReadEA = 0x00000008,
        FileWriteEA = 0x00000010,
        FileExecute = 0x00000020,
        FileDeleteChild = 0x00000040,
        FileReadAttributes = 0x00000080,
        FileWriteAttributes = 0x00000100,
 
        Delete = 0x00010000,
        ReadControl = 0x00020000,
        WriteDac = 0x00040000,
        WriteOwner = 0x00080000,
        Synchronize = 0x00100000,
 
        AccessSystemSecurity = 0x01000000,
        MaximumAllowed = 0x02000000,
 
        GenericAll = 0x10000000,
        GenericExecute = 0x20000000,
        GenericWrite = 0x40000000,
        GenericRead = 0x80000000
    }
    [Flags]
    enum AceFlags : int
    {
        ObjectInheritAce = 1,
        ContainerInheritAce = 2,
        NoPropagateInheritAce = 4,
        InheritOnlyAce = 8,
        InheritedAce = 16
    }
 
    [Flags]
    enum AceType : int
    {
        AccessAllowed = 0,
        AccessDenied = 1,
        Audit = 2
    }
    class PrinterOffline
    {
        [STAThread]
        static void Main(string[] args)
        {
            // Set management scope
 
            ManagementScope scope = new ManagementScope(@"\root\cimv2");
            scope.Connect();
 
            // Select Printers from WMI Object Collections
 
            ManagementObjectSearcher searcher = new
             ManagementObjectSearcher("SELECT * FROM Win32_Printer");
 
            string printerName = "";
            foreach (ManagementObject printer in searcher.Get())
            {
                printerName = printer["Name"].ToString().ToLower();
                ManagementBaseObject outParams = printer.InvokeMethod("GetSecurityDescriptor", null, null);
                ManagementBaseObject secDescriptor =
 ((ManagementBaseObject)(outParams.Properties["Descriptor"].Value));
                ManagementBaseObject[] dacl =
 ((ManagementBaseObject[])(secDescriptor.Properties["Dacl"].Value));
                DumpACEs(dacl);
            }
            Console.ReadLine();
        }
        static void DumpACEs(ManagementBaseObject[] dacl)
        {
            foreach (ManagementBaseObject mbo in dacl)
            {
                Console.WriteLine("\n---------\nMask: {0:X} - Flags: {1} - Type: {2}",
                mbo["AccessMask"], mbo["AceFlags"], mbo["AceType"]);
                // Access allowed/denied ACE
                if (Convert.ToInt32(mbo["AceType"]) == (int)AceType.AccessDenied)
                    Console.WriteLine("DENIED ACE TYPE");
                else
                    Console.WriteLine("ALLOWED ACE TYPE");
                // Dump trustees
                ManagementBaseObject Trustee = ((ManagementBaseObject)(mbo["Trustee"]));
                Console.WriteLine("Name: {0} - Domain: {1} - SID {2}\n",
                Trustee.Properties["Name"].Value,
                Trustee.Properties["Domain"].Value,
                Trustee.Properties["SIDString"].Value);
                // Dump ACE mask in readable form
                UInt32 mask = (UInt32)mbo["AccessMask"];
                Console.WriteLine(Enum.Format(typeof(Mask), mask, "g"));
            }
        }
    }
}
Выведет права доступа к каждому принтеру в системе, единственная проблема, что маска доступа описана для файла и было бы неплохо переписать её для принтера.
А ещё интересно, почему во вкладке безопасности принтера написано 4 группы а здесь каждая запись дублируется, причём ещё и с разными правами доступа.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
20.09.2011, 14:58
Помогаю со студенческими работами здесь

Общий доступ к принтеру
Есть сеть, как показано на рисунке, который во вложении. Необходимо настроить удаленный принтер на компе 192.168.Х.2 Пробовал так: 1....

Сетевой доступ к принтеру
Всем доброго времени суток! С недавнего времени работаю сисадмином, принял систему находящуюся в состоянии полного хаоса (у все...

Пропадает доступ к сетевому принтеру
Помогите кто сможет! Немного о структуре: в организации есть сервер на платформе Windows Server 2003. Через удаленный рабочий стол к нему...

Отключается сетевой доступ к принтеру
Имеются два компьютера, подключенные к сети. На одном Windows 7 и расшаренный принтер, на втором - Windows XP. Вот на ХР начали возникать...

Доступ в локальной сети к принтеру
Добрый день! Столкнулся со следующей проблемой: в локальной сети есть две машины, первая - Windows 7 (редакцию не помню) 64-битная, а...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru