Автор работы: Пользователь скрыл имя, 15 Мая 2013 в 05:41, магистерская работа
У результаті виконання магістерської роботи отримано наступні наукові та практичні результати:
вдосконалено методи для нагромадження і аналізу кількісних даних про використання комп’ютерних ресурсів, що на відміну від існуючих враховують тривалість інтерактивної взаємодії з користувачем.
розроблено Web-орієнтоване програмне забезпечення для аналізу і візуалізації даних про користування комп’ютерними ресурсами вищих навчальних закладів.
Веб-орієнтований додаток, який ми називатимемо CompResAnalyseApp, призначений для працівника ВНЗ (далі користувача), що бажає аналізувати роботу студентів з комп’ютерними ресурсами лабораторії. Ресурсами студенти користуються виключно за допомогою прикладних програм. Прикладні програми можуть бути оригінальними, тобто тими, що були встановлені інженерами лабораторії або принесеними студентом самовільно.
Додаток потрібно розробити як „настільну” програму Java або веб-додаток на основі технології Java server pages, він повинен мати графічний інтерфейс користувача (GUI), що є простим та зручним у використанні.
На початку роботи з додатком користувач повинен сформувати список ІР-адрес підконтрольних робочих станцій аудиторії ВНЗ. Користувач повинен мати можливість переглядати якими прикладними програмами і скільки часу студенти користуються на підконтрольних робочих станціях. Також повинен мати змогу категоризувати виконувані файли прикладних програм на наступні категорії: текстові процесори, браузери, засоби розробки, засоби моделювання, засоби відтворення (аудіо-відео програвачі, переглядачі зображень та текстів), службове ПЗ (для роботи з принтером, DVD-записувачем), розважальне ПЗ (ігри), шкідливе ПЗ (троянські коні) та невідоме ПЗ. Остання категорія включає програми, розроблені користувачем самостійно в процесі роботи на занятті чи принесені ним ззовні (зі змінних носіїв, комп’ютерних мереж).
Інформацію про користування комп’ютерними ресурсами додаток повинен подавати в двох режимах: статичному та динамічному. При виборі „статичного” режиму користувач повинен обрати дату, починаючи з якої система обчислюватиме показники функціонування ПЗ: загальна та середньодобова тривалість роботи з програмами, середньодобова частка роботи з кожною програмою, середня тривалість роботи з ПК протягом доби.
У „динамічному” режимі користувач матиме змогу в режимі реального часу стежити за динамікою частки машинного часу, що затрачається на виконання програм кожної категорії в нинішню добу.
Іменники |
Пояснення |
Претенденти на класи та атрибути |
додаток |
Додаток – це основа розроблюваної системи. Оскільки даний додаток являє собою „настільний” або веб-орієнтований додаток з графічним інтерфейсом користувача, то ми скористаємося відповідними зразками дизайну (design patterns), що дозволять спростити задачу кодування. |
CompResAnalyseApp |
працівник ВНЗ |
Працівник ВНЗ є користувачем системи і не є її частиною. Якщо б проектована система була орієнтована на роботу з багатьма працівниками, то слід було б створити клас Worker, але у цій магістерській роботі буде лише один авторизований працівник, що має доступ до всіх функцій системи. |
|
користувач |
те саме, що й попереднє. За межами системи. |
|
аналіз роботи студентів з комп’ютерними ресурсами |
аналіз роботи студентів з комп’ютерними ресурсами – це головне завдання проектованої системи. Проте, як було виявлено в першому розділі, студенти можуть отримувати доступ до ресурсів лише за допомогою прикладних програм, тому створимо клас для іменника „тривалість роботи з програмами”, див. нижче. |
|
лабораторія |
студенти працюють у множині лабораторій. Якби розроблювана система проектувалася для аналізу використання ресурсів багатьох лабораторій одночасно, то слід було б створити клас „Laboratory”. Однак, зважаючи на те, що в кожній лабораторії буде встановлено окрему копію цієї системи (в офісі інженера лабораторії, так званому акваріумі), то створення такого класу не є доцільним. |
|
прикладна програма |
Оскільки студенти можуть
користуватися ресурсами |
Application |
інженер лабораторії |
те саме, що працівник ВНЗ (див. вище) |
|
Java |
мова розробки системи, звісно ніяких додаткових класів на це поняття створювати не слід. |
|
веб-додаток |
оскільки у темі магістерської зазначено, що проектована система є веб-орієнтованою, а найприроднішим виразом таких систем є веб-додатки, то у даній роботі розроблятиметься семе веб-додаток |
|
технологія Java server pages |
Технологія розробки веб-додатків на мові Java |
|
графічний інтерфейс користувача |
при розгляді поняття
„додаток” (див. вище) ми вже зупинялися
на деталях графічного інтерфейсу користувача.
Сценарії взаємодії з інтерфейсом
системи було описано на попередньому
етапі об’єктно-орієнтованого |
|
список ІР-адрес |
Колекція стрічок, що описує ІР адреси комп’ютерів однієї аудиторії. Технологічно це буде клас IPaddresses, нащадок стандартної колекції java.util.ArrayList. У ньому повинні бути методи додавання, вилучення та модифікації елементів колекції. |
IPaddresses extends java.util.ArrayList |
аудиторія ВНЗ |
те саме, що й лабораторія (див. вище) |
|
виконувані файли |
Колекція стрічок з шляхами до виконуваних файлів. Атрибут класу „Прикладна програма” (див. вище). |
Application.exeFiles |
Категорії |
Можна реалізувати як перелічуваний тип (enum Category), що має константи, описані далі. |
Category |
текстові процесори |
Константа перелічуваного типу Category. Під цією категорією маємо на увазі текстові редактори: Microsoft®Word, Блокнот і т.п. |
Category.TEXT_EDITOR |
браузери |
Константа перелічуваного типу Category. До цієї категорії належать оглядачі інтернету: Opera, Chrome, Microsoft®IE, FireFox і т.п. |
Category.BROWSER |
засоби розробки |
Константа перелічуваного типу Category. До цієї категорії належать інтегровані середовища розробки та проблемно-орієнтовані текстові редактори: NetBeans, Eclipse, MS Visual studio, Notepad++ і т.п. |
Category.IDE |
засоби моделювання |
Константа перелічуваного типу Category. До цієї категорії належать середовища моделювання процесів, явищ, об’єктів, систем: Matlab, Mathcad, Workbench, PCAD, AutoCAD, 3DMAX, Macromedia Flash Designer, Photoshop, Corel Draw і т.п. |
Category.MODELLING |
засоби відтворення |
Константа перелічуваного типу Category. До цієї категорії належать переглядачі рисунків, аудіо та відео програвачі: ACDSee, WinDjView, Adobe Reader, Winamp, Windows Media Player і т.п. |
Category.VIEW |
службове ПЗ |
Константа перелічуваного типу Category. До цієї категорії належать утиліти для роботи з периферією (жорсткі диски, лазерні приводи, принтери): засіб дефрагментації, Nero Express, GUI до драйвера принтера, сканера і т.п. |
Category.SERVICE |
розважальне ПЗ |
Константа перелічуваного типу Category. До цієї категорії належать різноманітні ігри: Star craft, War craft, Quake, Sims, шахи, пасьянс та ін. |
Category.GAME |
шкідливе ПЗ |
Константа перелічуваного типу Category. До цієї категорії належать віруси, черв’яки та троянські коні. Їхній список постійно поновлюється, тому для успішного їх виявлення слід користуватися найновішими базами антивірусу. |
Category.MALWARE |
невідоме ПЗ |
Константа перелічуваного типу Category. До цієї категорії належить ПЗ, що не ввійшло в жодну з перелічених вище категорій, або те ПЗ, яке ще не було класифіковане. |
Category.UNKNOWN |
заняття |
Описана в специфікації система аналізу використання ресурсів ВНЗ дозволяє аналізувати динаміку показників лише в розрізі однієї доби. Проте в наступних версіях (магістерських роботах інших студентів) слід було б розмежувати аналіз за прийнятим у ВНЗ графіком аудиторного часу занять, наприклад: перше заняття починається з 800, друге – 995, третє – 1110 і т.д. |
|
„статичний” режим |
Клас, що міститиме атрибути із значеннями відповідних показників користування комп’ютерними ресурсами в лабораторії (див. далі). |
StaticModeAnalysis |
„динамічний” режим |
Клас, що виконує подібні до попереднього функції, але для динамічного режиму. |
DynamicModeAnalysis |
дата |
Стандартний клас java.util.Date |
java.util.Date |
тривалість роботи з програмою |
Клас, що містить атрибут асоціації з об’єктом прикладної програми (Application, див. вище) та атрибут кількості часових відліків, протягом яких вікно програми було у фокусі. |
Duration { Application application; long elapsed; } |
загальна тривалість роботи з програмами |
Атрибут класу аналізу в „статичному” режимі, колекція об’єктів класу Duration. |
ArrayList <Duration> StaticModeAnalysis.total |
середня тривалість роботи з програмами |
Розраховується для кожного об’єкту Duration в колекції StaticModeAnalysis.total, шляхом ділення атрибуту Duration.elapsed на кількість діб, в межах яких обчислюються показники. |
|
частка тривалості роботи з програмою |
Клас з атрибутами додатку Application application та значенням частки double part. |
DurationPart { Application application; double part; } |
середня частка тривалості роботи з програмами |
Атрибут класу аналізу в „статичному” режимі, що є класом-колекцією об’єктів „спостереження” Measurement extends Duration {Date date; }, що містить методи обчислення суми відліків в задану добу (сумарна тривалість роботи всіх програм в цю добу) long sum(Date d), значення кількості відліків активності заданої програми в задану добу long elapsed(Date d, Application a), обчислення значення частки для заданої програми “а” і дати “d” double part(Date d, Application a) як elapsed(d, a)/sum(d), середньої частки тривалості роботи з програмою “а” double average(Application a) для всіх дат, що присутні в колекції та середніх часток тривалості роботи всіх програм List<DurationPart> averages(). |
StaticModeAnalysis.averagepart MeasurementArray extends ArrayList< Measurement> { long sum(Date d); long elapsed(Date d, Application a); double part(Date d, Application a){ return elapsed(d, a)/sum(d); } double average(Application a); List<DurationPart> averages(); } |
#include <windows.h>
#include <fstream>
#include <tlhelp32.h>
using namespace std;
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance, LPSTR lpCmdLine,
int nCmdShow)
{
while(true){
ofstream out("active_proc_log.txt", ios_base::out | ios_base::app);
HWND active_window = GetForegroundWindow();
DWORD pid;
DWORD tid = GetWindowThreadProcessId(
HANDLE hSnapshot=
TH32CS_SNAPPROCESS,
0);
PROCESSENTRY32 pinfo;
Process32First(
hSnapshot,
&pinfo);
do{
if (pid == pinfo.th32ProcessID){
out << pinfo.szExeFile <<"\n";
break;
}
} while(Process32Next(hSnapshot, &pinfo));
out.close();
Sleep(60000);
}
return 0;
}
#include <windows.h>
#include <fstream>
#include <iostream>
#include <strstream>
#include <tlhelp32.h>
#define BUF_SIZE 1024
#define SBUF 100
#define DATESTR_SIZE 11
#define NATURAL_SIGNS_NUMBER 10
#define LOGFILENAME "loggg.txt"
using namespace std;
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
char natural_number_format[SBUF];
sprintf(natural_number_format,
unsigned long COUNTER;
streampos TODAY_POS;
char CURDATE[DATESTR_SIZE], buf[BUF_SIZE];
ofstream out;
// Створити файл-протокол, якщо його ще немає:
out.open(LOGFILENAME,ios::app)
out.close();
bool for_first_time = true;
while(true){
// Крок 1. Відкрити файл-протокол Ф в режимі зчитування (input).
ifstream in(LOGFILENAME);
int fstate = in.rdstate();
if (fstate & ios::badbit || fstate & ios::failbit){
string tmp = "Cannot open file ";
tmp+=LOGFILENAME;
tmp+="\n";
MessageBox(NULL,tmp.c_str(),"
return 1;
}
if (!for_first_time)
in.seekg(TODAY_POS);
// Крок 2. Отримати поточну дату у
// вигляді стрічки CURDATE="дд.
SYSTEMTIME stCURDATE;
GetLocalTime (&stCURDATE);
sprintf(CURDATE,"%02d.%02d.%
// Крок 3. Записати у змінну TODAY_POS позицію у файлі Ф,
// де є стрічка, що починається на CURDATE.
bool curdatestr_found = false;
while (!in.eof()) {
TODAY_POS = in.tellg();
in.getline(buf,BUF_SIZE);
if (in.tellg() == TODAY_POS){
MessageBox(NULL,"Malformed file! No new line signs\n","Error",0);
return 1;
}
istrstream ss(buf);
char tmp_date[DATESTR_SIZE];
ss >> tmp_date;
if ((new string(tmp_date))->compare(
curdatestr_found = true;
break;
}
}
for_first_time = false;
//Крок 5. Присвоїти змінній active_window ідентифікатор поточного активного вікна.
HWND active_window = GetForegroundWindow();
//Крок 6. Реалізувати відображення (2.3), визначивши ідентифікатор
// процесу, якому належить вікно з ідентифікатором active_window.
DWORD pid;
DWORD tid = GetWindowThreadProcessId(
// Крок 7. Реалізувати відображення (2.5), знайшовши стрічку executable з
// назвою виконуваного файлу, образом якого є процес.
string executable;
HANDLE hSnapshot=
TH32CS_SNAPPROCESS,
0);
PROCESSENTRY32 pinfo;
Process32First(
hSnapshot,
&pinfo);
do{
if (pid == pinfo.th32ProcessID){
executable = pinfo.szExeFile;
break;
}
} while(Process32Next(hSnapshot, &pinfo));
//Крок 8. Поки поточна позиція файла не дорівнює EOF
// розшукувати стрічку, що
streampos current_pos;
bool counter_added = false;
if (curdatestr_found){
// Перемістити поточну позицію файла до TODAY_POS:
in.seekg(TODAY_POS);
while (!in.eof()){
current_pos = in.tellg();
in.getline(buf,BUF_SIZE);
if (in.tellg() == current_pos){
MessageBox(NULL,"Malformed file! No new line signs\n","Error",0);
return 1;
}
istrstream ss(buf);
char t[SBUF], executable_to_test[SBUF]; // Перевірити чи executable_to_test == executable
ss >> t >> executable_to_test;
if (executable.compare(
// якщо таку стрічку знайдено, то прочитати третю значущу компоненту
// стрічки (лічильник) у змінну COUNTER, що є натуральним числом у
// форматі 0000000001.
char *tmp = buf + ss.tellg();
for (; *tmp<'0' || *tmp>'9'; tmp++)
current_pos += tmp - buf + 1;
ss >> COUNTER;
// Збільшити COUNTER на одиницю.
COUNTER++; counter_added = true;
in.close();
out.open(LOGFILENAME, ios::in | ios::out);
//Перемістити поточну позицію файла на початок натурального числа.
out.seekp(current_pos);
// Записати нове значення
// цифр
sprintf(buf,natural_number_
out << buf;
out.close();
//і перейти на крок 10.
break;
}
}
}
if (!counter_added){
//Крок 9. Записати у файл Ф стрічку CURDATE+white_space+ + white_space+"0000000001"
// та символ переходу на нову стрічку "\n".
in.close();
out.open(LOGFILENAME, ios::app);
sprintf(buf,natural_number_
out << CURDATE << "\t" << executable.c_str() << "\t" << buf << "\n";
out.close();
}
//Крок 10. Закрити файл Ф (для остаточного злиття буфера
// у файл, щоб він був доступний для аналізу і щоб запобігти
// втраті зібраних даних на
випадок аварійного зупину
in.close();
//Крок 11. Користувач подав команду на зупинку алгоритму?
// Якщо так, то завершити
// Крок 12. Очікувати протягом вказаної кількості мілісекунд.
Sleep(1000);
//Крок 13. Перейти на крок 1.
}
return 0;
}
Вміст файла „C:\Program Files\Apache Software Foundation\Tomcat
6.0\webapps\CompResAnalyseApp\
<html>
<title>
Веб-орієнтована система
</title>
<!-- тут меню основних способів використання системи -->
<p> <a href="edit_ips.jsp"> Редагувати список IP-адрес підконтрольних ПК </a> </p>
<p><a href="soft_categorization.jsp"
<p><a href="static_view.jsp"> Перегляд
статистики використання комп'
статичному режимі </a></p>
<p><a href="dynamic_view.jsp"> Перегляд статистики використання комп'ютерних ресурсів у
динамічному режимі </a></p>
</html>
Вміст файла „C:\Program Files\Apache Software
Foundation\Tomcat 6.0\webapps\CompResAnalyseApp\
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/
<%-- Запис у базу даних має
бути перед заповненням
<jsp:useBean id="ac" class="ra.
<%-- В useBean властивість scope буває page, request, session, application --%>
<a href = "?recategorize=1"> категоризувати наново </a>
<c:if test="${param.recategorize==1}
<% ac.fillDB(); %>
<c:redirect url="soft_categorization.jsp" />
</c:if>
<html>
<% ac.readFromDB(); %>
<table border="1" width="100%">
<c:forEach var="anApplication" items="${ac}">
<tr>
<td>${anApplication.category}<
<td><a href="categorize.jsp?exeFile=$
</tr>
</c:forEach>
</table>
</html>
Вміст файла „C:\Program Files\Apache Software
Foundation\Tomcat 6.0\webapps\CompResAnalyseApp\
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/
<html>
<title> Призначення категорії
для ресурсу (виконуваного
<body>
<h1> Призначення категорії для ресурсу (виконуваного файла) ${param.exeFile} </h1>
<jsp:useBean id="app" class="ra.Application" scope="session" />
<jsp:setProperty name="app" property="*" />
<jsp:useBean id="c" class="ra.AllCategories" scope="request" />
<c:forEach var="aCategory" items="${c.values}">
<p><a href="setCategory.jsp?
</c:forEach>
</body>
</html>
Вміст файла „C:\Program Files\Apache Software
Foundation\Tomcat 6.0\webapps\CompResAnalyseApp\
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/
<jsp:useBean id="app" class="ra.Application" scope="session" />
<jsp:setProperty name="app" property="*" />
<jsp:useBean id="ac" class="ra.ApplicationCollectio
<h1> Присвоюємо категорію ${app.
<% ac.updateDB(app); %>
<c:redirect url="soft_categorization.jsp" />
Вміст файла „C:\Program Files\Apache Software
Foundation\Tomcat 6.0\webapps\CompResAnalyseApp\
package ra;
public class Application{
String exeFile;
public String getExeFile(){return exeFile;}
public void setExeFile(String s){exeFile=s;}
Category category;
public String getCategory(){return category.toString();}
public void setCategory(String s){ category = Category.valueOf(s);}
}
Вміст файла „C:\Program Files\Apache Software
Foundation\Tomcat 6.0\webapps\CompResAnalyseApp\
package ra;
public class AllCategories{
public Category[] getValues(){
return Category.values();
}
}
Вміст файла „C:\Program Files\Apache Software
Foundation\Tomcat 6.0\webapps\CompResAnalyseApp\
package ra;
public enum Category{
TEXT_EDITOR,
BROWSER,
IDE,
MODELLING,
VIEW,
SERVICE,
GAME,
MALWARE,
UNKNOWN;
}
Вміст файла „C:\Program Files\Apache Software
Foundation\Tomcat 6.0\webapps\CompResAnalyseApp\
package ra;
import java.util.*;
import java.sql.*;
import java.io.*;
public class ApplicationCollection extends ArrayList<Application>{
Connection con = (new ConnectionBean()).con;
public ApplicationCollection()throws Exception{
}
public void readFromDB()throws Exception{
ResultSet rs = con.createStatement().
while (rs.next()){
Application a = new Application();
a.exeFile = rs.getString("exe");
a.category = Category.valueOf(rs.getString(
add(a);
}
}
public void fillDB()throws Exception{
con.createStatement().
Scanner sc = new Scanner(new File("D:/loggg.txt"));
while (sc.hasNextLine()){
String str = sc.nextLine();
String[] nn = str.split("\t", 3);
insertToDB(nn[1]);
}
}
public void insertToDB(String s) throws Exception{
try{
PreparedStatement ps = con.prepareStatement("insert into application (exe,category) values(?,?)");
ps.setString(1,s);
ps.setString(2,Category.
ps.executeUpdate();
} catch (SQLException e){
Application a = new Application();
a.exeFile = s;
a.category = Category.UNKNOWN;
updateDB(a);
}
}
public void updateDB(Application a) throws Exception{
PreparedStatement ps = con.prepareStatement("update application SET category=? where exe=?");
ps.setString(1,a.category.
ps.setString(2,a.exeFile);
ps.executeUpdate();
}
}
Вміст файла „C:\Program Files\Apache Software
Foundation\Tomcat 6.0\webapps\CompResAnalyseApp\
package ra;
import java.sql.*;
import java.util.*;
public class ConnectionBean{
public Connection con;
public ConnectionBean() throws Exception{
/*
Конструктор кожного біна має бути public!!!
Інакше буде помилка:"
org.apache.jasper.
*/
con = DriverManager.getConnection("
}
}
Дата |
Ресурс (прикладна програма) |
Тривалість, |
01.04.2011 |
MSDEV.EXE |
911 |
01.04.2011 |
taskmgr.exe |
237 |
01.04.2011 |
TOTALCMD.EXE |
865 |
01.04.2011 |
explorer.exe |
157 |
01.04.2011 |
calc.exe |
19 |
01.04.2011 |
hh.exe |
131 |
01.04.2011 |
WINWORD.EXE |
4419 |
01.04.2011 |
birthdaylist.exe |
113 |
01.04.2011 |
Lingvo.exe |
28 |
01.04.2011 |
cmd.exe |
18 |
01.04.2011 |
chrome.exe |
15 |
01.04.2011 |
notepad++.exe |
29 |
02.04.2011 |
explorer.exe |
544 |
02.04.2011 |
TOTALCMD.EXE |
44 |
02.04.2011 |
WINWORD.EXE |
8569 |
02.04.2011 |
taskmgr.exe |
38 |
02.04.2011 |
calc.exe |
222 |
02.04.2011 |
MSDEV.EXE |
22 |
03.04.2011 |
taskmgr.exe |
95 |
03.04.2011 |
WINWORD.EXE |
7662 |
03.04.2011 |
explorer.exe |
269 |
03.04.2011 |
TOTALCMD.EXE |
1842 |
03.04.2011 |
EXCEL.EXE |
10 |
03.04.2011 |
cmd.exe |
43 |
03.04.2011 |
rundll32.exe |
1 |
04.04.2011 |
explorer.exe |
307 |
04.04.2011 |
taskmgr.exe |
75 |
04.04.2011 |
TOTALCMD.EXE |
927 |
04.04.2011 |
WINWORD.EXE |
5458 |
04.04.2011 |
Lingvo.exe |
166 |
04.04.2011 |
AcroRd32.exe |
313 |
04.04.2011 |
EXCEL.EXE |
2 |
04.04.2011 |
calc.exe |
2 |
04.04.2011 |
hh.exe |
148 |
04.04.2011 |
audacity.exe |
1644 |
04.04.2011 |
notepad.exe |
326 |
05.04.2011 |
explorer.exe |
82 |
05.04.2011 |
taskmgr.exe |
1 |
05.04.2011 |
TOTALCMD.EXE |
616 |
05.04.2011 |
WINWORD.EXE |
93 |
07.04.2011 |
explorer.exe |
168 |
07.04.2011 |
taskmgr.exe |
39 |
07.04.2011 |
WINWORD.EXE |
1590 |
07.04.2011 |
TOTALCMD.EXE |
520 |
07.04.2011 |
hh.exe |
1471 |
07.04.2011 |
chrome.exe |
477 |
07.04.2011 |
AcroRd32.exe |
1499 |
07.04.2011 |
notepad++.exe |
1508 |
07.04.2011 |
firefox.exe |
218 |
07.04.2011 |
opera.exe |
648 |
08.04.2011 |
explorer.exe |
299 |
08.04.2011 |
taskmgr.exe |
4 |
08.04.2011 |
TOTALCMD.EXE |
1 |
08.04.2011 |
AcroRd32.exe |
5 |
08.04.2011 |
WINWORD.EXE |
6380 |
08.04.2011 |
diaw.exe |
925 |
10.04.2011 |
MSDEV.EXE |
12 |
10.04.2011 |
taskmgr.exe |
23 |
10.04.2011 |
explorer.exe |
52 |
10.04.2011 |
TOTALCMD.EXE |
329 |
10.04.2011 |
WINWORD.EXE |
8181 |
11.04.2011 |
explorer.exe |
138 |
<p class="dash041e_0431_044b_ |