Perl для системного администрирования



Управление процессами в NT/2000 - часть 4


c:\winnt\system32\advapi32.dll

c:\winnt\system32\user32.dll

c:\winnt\systein32\gdi32.dll

c:\winnt\system32\rpcrt4.dll

c:\winnt\system32\userenv.dll

c:\winnt\system32\shell32.dll

c:\winnt\system32\shlwapi.dll

с:\winnt\system32\comctl32.dll

c:\winnt\system32\netapi32.dll

С:\winnt\system32\netrap. dll

c:\winnt\system32\samlib.dll

c:\winnt\system32\winmm. dll

с:\winnt\system32\cwcmmsys.dll

c:\winnt\system32\cwcfm3.dll

c:\winnt\system32\msgina.dll

c:\winnt\system32\rpclts1.dll

c:\winnt\system32\rpcltcl. all. . .

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

Дескриптор процесса можно рассматривать как открытое соединение с данным процессом. Чтобы выяснить разницу между дескриптором процесса и его идентификатором, проведем аналогию со стоянкой прицепов. Если каждый прицеп на стоянке считать процессом, то адрес прицепа можно считать идентификатором процесса. Это способ найти нужный прицеп. Дескриптор процесса - это что-то наподобие телефонных линий, труб и проводов, подведенных к прицепу. Когда прицеп подсоединен к этим коммуникациям, вы можете не только найти нужный прицеп, но и передавать в него информацию.

Для получения дескриптора процесса, если у нас есть его идентификатор, используем метод Ореп() из модуля Win32: : IProc. Ореп() принимает идентификатор процесса, флаг доступа, флаг наследования и ссылку на скалярное значение, в котором хранится дескриптор. В следующем примере запроса мы будем использовать флаги доступа, которых достаточно для получения информации о процессе. Подробную информацию об этих флагах можно найти в документации по Win32: :IProc и в разделе «Processes and Threads» документации Win32 SDK по основным службам, которую можно найти на http://msdn.microsoft.com. Дескрипторы процессов, открытые при помощи Ореп(), необходимо закрыть при помощи CloseHandle().

Зная дескриптор процесса, можно использовать метод Kill() для завершения его работы:




Содержание  Назад  Вперед