[nanny] Add win32 Top
- From: Roberto Majadas <telemaco src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [nanny] Add win32 Top
- Date: Sun, 23 Jan 2011 18:02:41 +0000 (UTC)
commit a555bd703211635c99b466a561285d65af3ee806
Author: Roberto Majadas <roberto majadas openshine com>
Date: Tue Sep 21 11:05:16 2010 +0200
Add win32 Top
daemon/src/Makefile.am | 1 +
daemon/src/QuarterBack.py | 3 +
daemon/src/Win32Top.py | 120 +++++++++++++++++++++++++++++++++++++++++++++
3 files changed, 124 insertions(+), 0 deletions(-)
---
diff --git a/daemon/src/Makefile.am b/daemon/src/Makefile.am
index ea98bb8..c3b553f 100644
--- a/daemon/src/Makefile.am
+++ b/daemon/src/Makefile.am
@@ -18,6 +18,7 @@ corelib_PYTHON = __init__.py \
Win32UsersManager.py \
Win32SessionFiltering.py \
Win32Chrono.py \
+ Win32Top.py \
NannyPyroBus.py
if HAS_HACHOIR_REGEX
diff --git a/daemon/src/QuarterBack.py b/daemon/src/QuarterBack.py
index 5115184..449d500 100644
--- a/daemon/src/QuarterBack.py
+++ b/daemon/src/QuarterBack.py
@@ -44,6 +44,7 @@ elif os.name == "nt" :
from Win32SessionFiltering import Win32SessionFiltering as SessionFilter
from FilterManager import FilterManager as FilterManager
from Win32Chrono import Win32Chrono as Chrono
+ from Win32Top import Win32Top
def GetInHM(m):
@@ -103,6 +104,8 @@ class QuarterBack(gobject.GObject) :
self.__next_update_info = None
self.usersmanager = UsersManager()
+ if os.name == "nt" :
+ self.win32top = Win32Top(self)
self.chrono = Chrono(self)
self.firewall_filter = FirewallFilter(self)
diff --git a/daemon/src/Win32Top.py b/daemon/src/Win32Top.py
new file mode 100644
index 0000000..67772f8
--- /dev/null
+++ b/daemon/src/Win32Top.py
@@ -0,0 +1,120 @@
+#!/usr/bin/env python
+
+# Copyright (C) 2009,2010 Junta de Andalucia
+#
+# Authors:
+# Roberto Majadas <roberto.majadas at openshine.com>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301
+# USA
+
+import os
+import time
+import win32com.client
+import wmi
+import gobject
+from twisted.internet import reactor
+import copy
+
+class Win32Top(gobject.GObject) :
+ def __init__(self, quarterback) :
+ gobject.GObject.__init__(self)
+ self.quarterback = quarterback
+ self.process_list = {}
+ self.first_time = True
+
+ reactor.addSystemEventTrigger("before", "startup", self.start)
+ reactor.addSystemEventTrigger("before", "shutdown", self.stop)
+
+ def start(self):
+ print "Start Win32 Top"
+ gobject.timeout_add(1000, self.__update_info)
+
+ def stop(self):
+ print "Stop Win32 Top"
+
+ def __update_info(self):
+ if self.first_time == True:
+ print "[W32TOP] Initial process check start"
+
+ oWMI = win32com.client.GetObject(r"winmgmts:\\.\root\cimv2")
+ qry = "SELECT * FROM Win32_Process"
+ qry = oWMI.ExecQuery(qry)
+ users_list = self.quarterback.usersmanager.get_users()
+
+ if qry.count > 0:
+ pids_list = []
+ for result in qry:
+ pid = int(result.ProcessId)
+ pids_list.append(pid)
+ name = unicode(result.Name)
+ cdate = unicode(result.CreationDate)
+
+ if pid not in self.process_list :
+ try:
+ w = wmi.WMI()
+ p = w.Win32_Process(ProcessID=pid)
+ uid_name = p[0].GetOwner()[2]
+ uid_number = None
+ for uid, uname, ufname in users_list:
+ if uname == uid_name :
+ uid_number = uid
+ break
+ if uid_number == None :
+ uid_number = 0
+ except:
+ uid_number = 0
+
+ self.process_list[pid] = [uid_number, name, cdate]
+ if self.first_time == False:
+ print "[W32TOP] Add process (%s) : [uid: %s, name: '%s']" % (pid, uid_number, name)
+ else:
+ u, n, c = self.process_list[pid]
+ if c != cdate:
+ try:
+ uid_name = wmi.WMI().Win32_Process(ProcessID=pid).GetOwner()[0]
+ uid_number = None
+ for uid, uname, ufname in users_list:
+ if uname == uid_name :
+ uid_number = uid
+ break
+ if uid_number == None :
+ uid_number = 0
+ except:
+ uid_number = 0
+
+ self.process_list[pid] = [uid_number, name, cdate]
+ if self.first_time == False:
+ print "[W32TOP] Add process (%s) : [uid: %s, name: '%s']" % (pid, uid_number, name)
+
+ new_process_list = copy.copy(self.process_list)
+ for pid in self.process_list :
+ if pid not in pids_list :
+ uid_number, name, cdate = self.process_list[pid]
+ if self.first_time == False:
+ print "[W32TOP] Remove process (%s) : [uid: %s, name: '%s']" % (pid, uid_number, name)
+ new_process_list.pop(pid)
+ self.process_list = new_process_list
+
+ if self.first_time == True:
+ self.first_time = False
+ print "[W32TOP] Initial process check finished"
+ return True
+
+
+
+
+
+
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]