From ed134b442ca19eda21bf0289b898e21f97e1736f Mon Sep 17 00:00:00 2001
From: esanchezm <noreply@pandorafms.org>
Date: Fri, 25 Aug 2006 13:02:03 +0000
Subject: [PATCH] 2006-08-15  Esteban Sanchez  <estebans@artica.es>

        * autogen.sh, configure.in, Makefile.am, Doxyfile.in: Added to
        repository. They are used to generate documentation, not to compile.

        * main.cc: Added some comments. Style correction.

        * pandora.[cc,h]: Added documentation comments. Changed visibility of
        some attributes.

        * pandora_agent_conf.[cc,h]: Added to Pandora namespace. Added
        documentation comments.

        * pandora_windows_service.[cc,h], pandora_strutils.[cc,h],
        windows/pandora_windows_infp.[cc,h], ssh/pandora_ssh_test.[cc,h]:
	Added documentation comments.

        * ssh/pandora_ssh_client.[cc,h]:Added documentation comments. Removed
        old method to connect with user and password. Style correction.

        * misc/pandora_file.[cc,h]: Added documentation comments. Renamed some
        parameters.

        * modules/pandora_module.[cc,h]: Added documentation comments. Put a
        name to the enumerators. Added a new class to agroupate all exceptions
        produced by Pandora_Module child class objects. Changed visibility of
        some attributes. Added some new methods and renamed others.

        * modules/pandora_module_cpuusage.[cc,h],
        modules/pandora_module_exec.[cc,h],
        modules/pandora_module_freememory.[cc,h],
        modules/pandora_module_freedisk.[cc,h], modules/pandora_module_proc.[cc,h],
        modules/pandora_module_service.[cc,h]: Added documentation comments.
        Some changes to adapt the objects to the Pandora_Module changes.

        * modules/pandora_module_list.[cc,h]: Added documentation comments.
        Some changes to adapt the objects to the Pandora_Module changes. Added
        to Pandora_Modules namespace.

        * windows/pandora_windows_wmi.[cc,h]: Added documentation comments.
        Renamed Pandora_Wmi_Error to Pandora_Wmi_Exception.

        * windows_service.[cc,h]: Added documentation comments. Changed
        visibility of some attributes. Style correction.



git-svn-id: https://svn.code.sf.net/p/pandora/code/trunk@150 c3f86ba8-e40f-0410-aaad-9ba5e7f4b01f
---
 pandora_agents/win32/ChangeLog                |  45 +++++
 pandora_agents/win32/Doxyfile.in              | 183 ++++++++++++++++++
 pandora_agents/win32/Makefile.am              |   0
 pandora_agents/win32/autogen.sh               |  43 ++++
 pandora_agents/win32/configure.in             |  10 +
 pandora_agents/win32/main.cc                  |  29 ++-
 pandora_agents/win32/misc/pandora_file.cc     |  38 +++-
 pandora_agents/win32/misc/pandora_file.h      |  25 ++-
 .../win32/modules/pandora_module.cc           | 178 ++++++++++++++++-
 pandora_agents/win32/modules/pandora_module.h | 159 ++++++++++-----
 .../win32/modules/pandora_module_cpuusage.cc  |  13 +-
 .../win32/modules/pandora_module_cpuusage.h   |   3 +
 .../win32/modules/pandora_module_exec.cc      |  14 +-
 .../win32/modules/pandora_module_exec.h       |   7 +
 .../win32/modules/pandora_module_factory.cc   |  17 +-
 .../win32/modules/pandora_module_factory.h    |   4 +-
 .../win32/modules/pandora_module_freedisk.cc  |  13 +-
 .../win32/modules/pandora_module_freedisk.h   |   4 +
 .../modules/pandora_module_freememory.cc      |  12 +-
 .../win32/modules/pandora_module_freememory.h |   3 +
 .../win32/modules/pandora_module_list.cc      |  58 ++++--
 .../win32/modules/pandora_module_list.h       |  58 +++---
 .../win32/modules/pandora_module_proc.cc      |  11 +-
 .../win32/modules/pandora_module_proc.h       |   3 +
 .../win32/modules/pandora_module_service.cc   |  11 +-
 .../win32/modules/pandora_module_service.h    |   4 +
 pandora_agents/win32/pandora.cc               |  98 +++++++++-
 pandora_agents/win32/pandora.h                |  24 ++-
 pandora_agents/win32/pandora_agent_conf.cc    |  34 +++-
 pandora_agents/win32/pandora_agent_conf.h     |  34 ++--
 pandora_agents/win32/pandora_strutils.cc      |  63 +++++-
 pandora_agents/win32/pandora_strutils.h       |  19 +-
 .../win32/pandora_windows_service.cc          |  23 ++-
 .../win32/pandora_windows_service.h           |  37 ++--
 .../win32/ssh/pandora_ssh_client.cc           |  99 +++++++---
 pandora_agents/win32/ssh/pandora_ssh_client.h |  88 ++++++---
 pandora_agents/win32/ssh/pandora_ssh_test.cc  |  36 +++-
 pandora_agents/win32/ssh/pandora_ssh_test.h   |  10 +-
 .../win32/windows/pandora_windows_info.cc     |  25 +++
 .../win32/windows/pandora_windows_info.h      |   3 +
 pandora_agents/win32/windows/pandora_wmi.cc   |  63 +++++-
 pandora_agents/win32/windows/pandora_wmi.h    |   8 +-
 pandora_agents/win32/windows_service.cc       |  73 ++++++-
 pandora_agents/win32/windows_service.h        |  63 +++---
 44 files changed, 1441 insertions(+), 304 deletions(-)
 create mode 100644 pandora_agents/win32/Doxyfile.in
 create mode 100644 pandora_agents/win32/Makefile.am
 create mode 100755 pandora_agents/win32/autogen.sh
 create mode 100644 pandora_agents/win32/configure.in

diff --git a/pandora_agents/win32/ChangeLog b/pandora_agents/win32/ChangeLog
index e72bab1c2c..4b241d689c 100644
--- a/pandora_agents/win32/ChangeLog
+++ b/pandora_agents/win32/ChangeLog
@@ -1,3 +1,48 @@
+2006-08-15  Esteban Sanchez  <estebans@artica.es>
+
+	* autogen.sh, configure.in, Makefile.am, Doxyfile.in: Added to
+	repository. They are used to generate documentation, not to compile.
+
+	* main.cc: Added some comments. Style correction.
+
+	* pandora.[cc,h]: Added documentation comments. Changed visibility of
+	some attributes.
+
+	* pandora_agent_conf.[cc,h]: Added to Pandora namespace. Added
+	documentation comments.
+
+	* pandora_windows_service.[cc,h], pandora_strutils.[cc,h],
+	windows/pandora_windows_infp.[cc,h], ssh/pandora_ssh_test.[cc,h]:
+	Added documentation comments.
+
+	* ssh/pandora_ssh_client.[cc,h]:Added documentation comments. Removed
+	old method to connect with user and password. Style correction.
+	
+	* misc/pandora_file.[cc,h]: Added documentation comments. Renamed some
+	parameters.
+
+	* modules/pandora_module.[cc,h]: Added documentation comments. Put a
+	name to the enumerators. Added a new class to agroupate all exceptions
+	produced by Pandora_Module child class objects. Changed visibility of
+	some attributes. Added some new methods and renamed others.
+
+	* modules/pandora_module_cpuusage.[cc,h],
+	modules/pandora_module_exec.[cc,h],
+	modules/pandora_module_freememory.[cc,h],
+	modules/pandora_module_freedisk.[cc,h], modules/pandora_module_proc.[cc,h],
+	modules/pandora_module_service.[cc,h]: Added documentation comments.
+	Some changes to adapt the objects to the Pandora_Module changes.
+
+	* modules/pandora_module_list.[cc,h]: Added documentation comments.
+	Some changes to adapt the objects to the Pandora_Module changes. Added
+	to Pandora_Modules namespace.
+		
+	* windows/pandora_windows_wmi.[cc,h]: Added documentation comments.
+	Renamed Pandora_Wmi_Error to Pandora_Wmi_Exception.
+
+	* windows_service.[cc,h]: Added documentation comments. Changed
+	visibility of some attributes. Style correction.
+
 2006-07-17  Esteban Sanchez  <estebans@artica.es>
 
 	* main.cc: Added "--help" option.
diff --git a/pandora_agents/win32/Doxyfile.in b/pandora_agents/win32/Doxyfile.in
new file mode 100644
index 0000000000..eb89bfe265
--- /dev/null
+++ b/pandora_agents/win32/Doxyfile.in
@@ -0,0 +1,183 @@
+# Doxyfile 0.1
+
+#---------------------------------------------------------------------------
+# General configuration options
+#---------------------------------------------------------------------------
+PROJECT_NAME           = pandora-agent-win32
+PROJECT_NUMBER         = @VERSION@
+OUTPUT_DIRECTORY       = doc/api
+OUTPUT_LANGUAGE        = English
+EXTRACT_ALL            = NO
+EXTRACT_PRIVATE        = NO
+EXTRACT_STATIC         = NO
+EXTRACT_LOCAL_METHODS  = NO
+HIDE_UNDOC_MEMBERS     = YES
+HIDE_UNDOC_CLASSES     = NO
+BRIEF_MEMBER_DESC      = YES
+REPEAT_BRIEF           = YES
+ALWAYS_DETAILED_SEC    = NO
+FULL_PATH_NAMES        = NO
+STRIP_FROM_PATH        = 
+INTERNAL_DOCS          = NO
+STRIP_CODE_COMMENTS    = YES
+CASE_SENSE_NAMES       = YES
+SHORT_NAMES            = NO
+HIDE_SCOPE_NAMES       = NO
+VERBATIM_HEADERS       = YES
+SHOW_INCLUDE_FILES     = YES
+JAVADOC_AUTOBRIEF      = YES
+INHERIT_DOCS           = YES
+INLINE_INFO            = YES
+SORT_MEMBER_DOCS       = YES
+DISTRIBUTE_GROUP_DOC   = NO
+TAB_SIZE               = 8
+GENERATE_TODOLIST      = YES
+GENERATE_TESTLIST      = YES
+GENERATE_BUGLIST       = YES
+ALIASES                = 
+ENABLED_SECTIONS       = 
+MAX_INITIALIZER_LINES  = 30
+OPTIMIZE_OUTPUT_FOR_C  = YES
+SHOW_USED_FILES        = YES
+#---------------------------------------------------------------------------
+# configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+QUIET                  = YES
+WARNINGS               = NO
+WARN_IF_UNDOCUMENTED   = NO
+WARN_FORMAT            = 
+WARN_LOGFILE           = 
+#---------------------------------------------------------------------------
+# configuration options related to the input files
+#---------------------------------------------------------------------------
+INPUT                  = @top_srcdir@/
+FILE_PATTERNS          = *.cc *.h
+RECURSIVE              = YES
+EXCLUDE                = ssh/libssh2 tinyxml windows/wmi
+
+# If the value of the INPUT tag contains directories, you can use the 
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude 
+# certain files from those directories.
+
+EXCLUDE_PATTERNS       = Makefile.* ChangeLog CHANGES CHANGES.* README \
+                         README.* *.png AUTHORS DESIGN DESIGN.* *.desktop \
+                         DESKTOP* COMMENTS HOWTO magic NOTES TODO THANKS \
+			 
+
+# The EXAMPLE_PATH tag can be used to specify one or more files or 
+# directories that contain example code fragments that are included (see 
+# the \include command).
+
+EXAMPLE_PATH           = 
+EXAMPLE_PATTERNS       = 
+EXAMPLE_RECURSIVE      = NO
+IMAGE_PATH             = 
+INPUT_FILTER           = 
+FILTER_SOURCE_FILES    = NO
+#---------------------------------------------------------------------------
+# configuration options related to source browsing
+#---------------------------------------------------------------------------
+SOURCE_BROWSER         = YES
+INLINE_SOURCES         = NO
+REFERENCED_BY_RELATION = YES
+REFERENCES_RELATION    = YES
+#---------------------------------------------------------------------------
+# configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+ALPHABETICAL_INDEX     = NO
+COLS_IN_ALPHA_INDEX    = 5
+IGNORE_PREFIX          = 
+#---------------------------------------------------------------------------
+# configuration options related to the HTML output
+#---------------------------------------------------------------------------
+GENERATE_HTML          = YES
+HTML_OUTPUT            = 
+HTML_HEADER            = 
+HTML_FOOTER            = 
+HTML_STYLESHEET        = 
+HTML_ALIGN_MEMBERS     = YES
+GENERATE_HTMLHELP      = NO
+GENERATE_CHI           = NO
+BINARY_TOC             = NO
+TOC_EXPAND             = NO
+DISABLE_INDEX          = NO
+ENUM_VALUES_PER_LINE   = 4
+GENERATE_TREEVIEW      = NO
+TREEVIEW_WIDTH         = 250
+#---------------------------------------------------------------------------
+# configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+GENERATE_LATEX         = NO
+LATEX_OUTPUT           = 
+COMPACT_LATEX          = NO
+PAPER_TYPE             = a4wide
+EXTRA_PACKAGES         = 
+LATEX_HEADER           = 
+PDF_HYPERLINKS         = NO
+USE_PDFLATEX           = NO
+LATEX_BATCHMODE        = NO
+#---------------------------------------------------------------------------
+# configuration options related to the RTF output
+#---------------------------------------------------------------------------
+GENERATE_RTF           = NO
+RTF_OUTPUT             = 
+COMPACT_RTF            = NO
+RTF_HYPERLINKS         = NO
+RTF_STYLESHEET_FILE    = 
+RTF_EXTENSIONS_FILE    = 
+#---------------------------------------------------------------------------
+# configuration options related to the man page output
+#---------------------------------------------------------------------------
+GENERATE_MAN           = YES
+MAN_OUTPUT             = man
+MAN_EXTENSION          = .3
+MAN_LINKS              = YES
+#---------------------------------------------------------------------------
+# configuration options related to the XML output
+#---------------------------------------------------------------------------
+GENERATE_XML           = NO
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor   
+#---------------------------------------------------------------------------
+ENABLE_PREPROCESSING   = YES
+MACRO_EXPANSION        = YES
+EXPAND_ONLY_PREDEF     = YES
+SEARCH_INCLUDES        = YES
+INCLUDE_PATH           = 
+INCLUDE_FILE_PATTERNS  = 
+PREDEFINED             = "PANDORA_BEGIN_DECLS=" 			\
+			 "PANDORA_END_DECLS=" 			\
+			 "DOXYGEN_SHOULD_SKIP_THIS" 		\
+			 "_PANDORA_DEFINE_GLOBAL_LOCK(name)="	\
+			 "_PANDORA_GNUC_PRINTF(from,to)="
+SKIP_FUNCTION_MACROS   = YES
+#---------------------------------------------------------------------------
+# Configuration::addtions related to external references   
+#---------------------------------------------------------------------------
+TAGFILES               = 
+GENERATE_TAGFILE       = 
+ALLEXTERNALS           = NO
+PERL_PATH              = 
+#---------------------------------------------------------------------------
+# Configuration options related to the dot tool   
+#---------------------------------------------------------------------------
+CLASS_DIAGRAMS         = YES
+HAVE_DOT               = YES
+CLASS_GRAPH            = YES
+COLLABORATION_GRAPH    = YES
+TEMPLATE_RELATIONS     = YES
+HIDE_UNDOC_RELATIONS   = YES
+INCLUDE_GRAPH          = YES
+INCLUDED_BY_GRAPH      = YES
+GRAPHICAL_HIERARCHY    = YES
+DOT_PATH               = 
+DOTFILE_DIRS           = 
+MAX_DOT_GRAPH_WIDTH    = 640
+MAX_DOT_GRAPH_HEIGHT   = 1024
+GENERATE_LEGEND        = YES
+DOT_CLEANUP            = YES
+DOT_IMAGE_FORMAT       = png
+#---------------------------------------------------------------------------
+# Configuration::addtions related to the search engine   
+#---------------------------------------------------------------------------
+SEARCHENGINE           = NO
diff --git a/pandora_agents/win32/Makefile.am b/pandora_agents/win32/Makefile.am
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/pandora_agents/win32/autogen.sh b/pandora_agents/win32/autogen.sh
new file mode 100755
index 0000000000..286c49b20e
--- /dev/null
+++ b/pandora_agents/win32/autogen.sh
@@ -0,0 +1,43 @@
+#! /bin/sh
+
+# $Id: autogen.sh,v 1.4 2002/12/02 01:39:49 murrayc Exp $
+#
+# Copyright (c) 2002  Daniel Elstner  <daniel.elstner@gmx.net>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License VERSION 2 as
+# published by the Free Software Foundation.  You are not allowed to
+# use any other version of the license; unless you got the explicit
+# permission from the author to do so.
+#
+# 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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+dir=`echo "$0" | sed 's,[^/]*$,,'`
+test "x${dir}" = "x" && dir='.'
+
+if test "x`cd "${dir}" 2>/dev/null && pwd`" != "x`pwd`"
+then
+    echo "This script must be executed directly from the source directory."
+    exit 1
+fi
+
+rm -f config.cache acconfig.h
+
+echo "- Running aclocal."       && \
+aclocal                         && \
+echo "- Running autoconf."      && \
+autoconf                        && \
+echo "- Running automake."      && \
+automake --add-missing --gnu    && \
+echo                            && \
+./configure "$@"                && exit 0
+
+exit 1
+
diff --git a/pandora_agents/win32/configure.in b/pandora_agents/win32/configure.in
new file mode 100644
index 0000000000..f52386be2f
--- /dev/null
+++ b/pandora_agents/win32/configure.in
@@ -0,0 +1,10 @@
+AC_PREREQ(2.59)
+
+AC_INIT([pandora-agent-win32], [1.0.0])
+
+AM_INIT_AUTOMAKE(AC_PACKAGE_NAME, AC_PACKAGE_VERSION)
+
+AC_OUTPUT([
+Doxyfile
+Makefile
+])
diff --git a/pandora_agents/win32/main.cc b/pandora_agents/win32/main.cc
index a7f16ab0be..62e25838d9 100644
--- a/pandora_agents/win32/main.cc
+++ b/pandora_agents/win32/main.cc
@@ -44,19 +44,25 @@ main (int argc, char *argv[]) {
         pos = aux.rfind ("\\");
         aux.erase (pos + 1);
         Pandora::setPandoraInstallDir (aux);
-        
+
+	/* Check the parameters */
         for (int i = 1; i < argc; i++) {
                 if (_stricmp(argv[i], SERVICE_INSTALL_CMDLINE_PARAM) == 0) {
+			/* Install parameter */
                         service->install (Pandora::getPandoraInstallPath ().c_str ());
                         
                         delete service;
+			
                         return 0;
                 } else if (_stricmp(argv[i], SERVICE_UNINSTALL_CMDLINE_PARAM) == 0) {
+			/* Uninstall parameter */
                         service->uninstall ();
                         
                         delete service;
+			
                         return 0;
 		} else if (_stricmp(argv[i], SSH_TEST_CMDLINE_PARAM) == 0) {
+			/* SSH test parameter */
                         SSH::Pandora_SSH_Test ssh_test;
 			
                         delete service;
@@ -66,24 +72,33 @@ main (int argc, char *argv[]) {
                         } catch (Pandora_Exception e) {
                                 return 1;
                         }
+			
                         return 0;
                 }  else if (_stricmp(argv[i], HELP_CMDLINE_PARAM) == 0) {
+			/* Help parameter */
 			cout << "Usage: " << argv[0] << " [OPTION]" << endl << endl;
 			cout << "Available options are:" << endl;
-			cout << "\t" << SERVICE_INSTALL_CMDLINE_PARAM << ":   Install the Pandora Agent service." << endl;
-			cout << "\t" << SERVICE_UNINSTALL_CMDLINE_PARAM << ": Uninstall the Pandora Agent service." << endl;
-			cout << "\t" << SSH_TEST_CMDLINE_PARAM << ":  Test the SSH Pandora Agent configuration." << endl;
+			cout << "\t" << SERVICE_INSTALL_CMDLINE_PARAM;
+			cout <<	":   Install the Pandora Agent service." << endl;
+			cout << "\t" << SERVICE_UNINSTALL_CMDLINE_PARAM;
+			cout << ": Uninstall the Pandora Agent service." << endl;
+			cout << "\t" << SSH_TEST_CMDLINE_PARAM;
+			cout << ":  Test the SSH Pandora Agent configuration." << endl;
 			
                         return 0;
                 } else {
-                        cout << "Usage: " << argv[0] << " [" << SERVICE_INSTALL_CMDLINE_PARAM
-                             << "] [" << SERVICE_UNINSTALL_CMDLINE_PARAM << "]" << endl;
-			cerr << "Run " << argv[0] << "with " << HELP_CMDLINE_PARAM << " parameter for more info." << endl;
+			/* No parameter recognized */
+                        cout << "Usage: " << argv[0] << " [" << SERVICE_INSTALL_CMDLINE_PARAM;
+			cout << "] [" << SERVICE_UNINSTALL_CMDLINE_PARAM << "]" << endl;
+			cout << "Run " << argv[0] << "with " << HELP_CMDLINE_PARAM;
+			cout << " parameter for more info." << endl;
+			
                         return 1;
                 }
         }
         service->run ();
 	
 	delete service;
+	
         return 0;
 }
diff --git a/pandora_agents/win32/misc/pandora_file.cc b/pandora_agents/win32/misc/pandora_file.cc
index 0dc96b54f4..c2fca02bb6 100644
--- a/pandora_agents/win32/misc/pandora_file.cc
+++ b/pandora_agents/win32/misc/pandora_file.cc
@@ -25,10 +25,20 @@
 
 using namespace std;
 
+/**
+ * Reads a file and returns its content.
+ *
+ * @param filepath Path of the file to read.
+ *
+ * @return File content.
+ *
+ * @exception File_Not_Found throwed if the path is incorrect or the
+ *            file does not exists or could not be opened.
+ **/
 string
-Pandora_File::readFile (const string filename) {
+Pandora_File::readFile (const string filepath) {
         string   line, result;
-        ifstream myfile (filename.c_str ());
+        ifstream myfile (filepath.c_str ());
         
         if (! myfile.is_open ()) {
                 throw File_Not_Found ();
@@ -44,16 +54,32 @@ Pandora_File::readFile (const string filename) {
         return result;
 }
 
+/**
+ * Delete a file from a directory.
+ *
+ * @param filepath Path of the file to delete.
+ *
+ * @exception Delete_Error if the file could not be deleted.
+ */
 void
-Pandora_File::removeFile (const string filename) {
-        if (remove (filename.c_str ()) == -1) {
+Pandora_File::removeFile (const string filepath) {
+        if (remove (filepath.c_str ()) == -1) {
                  throw Delete_Error ();
         }
 }
 
+/**
+ * Write data into a text file.
+ *
+ * @param filepath Path of the file to write in.
+ * @param data Data to be written.
+ *
+ * @exception File_Not_Found throwed if the path is incorrect or the
+ *            file does not exists or could not be opened.
+ */
 void
-Pandora_File::writeFile (const string filename, const string data) {
-        ofstream  file (filename.c_str ());
+Pandora_File::writeFile (const string filepath, const string data) {
+        ofstream  file (filepath.c_str ());
         
         if (! file.is_open ()) {
                 throw File_Not_Found ();
diff --git a/pandora_agents/win32/misc/pandora_file.h b/pandora_agents/win32/misc/pandora_file.h
index 54323135e9..a2a6afdb74 100644
--- a/pandora_agents/win32/misc/pandora_file.h
+++ b/pandora_agents/win32/misc/pandora_file.h
@@ -26,13 +26,30 @@
 
 using namespace std;
 
+/**
+ * File operations.
+ */
 namespace Pandora_File {
-        class File_Not_Found : Pandora::Pandora_Exception {
+	/**
+	 * File super-class exception.
+	 */
+        class File_Exception : Pandora::Pandora_Exception {
         };
-        
-        class Delete_Error : Pandora::Pandora_Exception {
+	
+	/**
+	 * Exception throwed when a file could not be found when doing
+	 * a file operation.
+	 */
+        class File_Not_Found : Pandora_File::File_Exception {
         };
-        
+
+        /**
+	 * Exception throwed when a file could not be deleted on a delete
+	 * operation.
+	 */
+        class Delete_Error : Pandora_File::File_Exception {
+        };
+
         string readFile   (const string filename);
         void   removeFile (const string filename);
         void   writeFile  (const string filename, const string data);
diff --git a/pandora_agents/win32/modules/pandora_module.cc b/pandora_agents/win32/modules/pandora_module.cc
index 249c0a159b..24760e0db6 100644
--- a/pandora_agents/win32/modules/pandora_module.cc
+++ b/pandora_agents/win32/modules/pandora_module.cc
@@ -26,6 +26,13 @@ using namespace Pandora;
 using namespace Pandora_Modules;
 using namespace Pandora_Strutils;
 
+/** 
+ * Creates a Pandora_Module.
+ *
+ * Initializes all attributes. The default interval is set to 1 loop.
+ * 
+ * @param name Module name.
+ */
 Pandora_Module::Pandora_Module (string name) {
         this->module_name     = name;
         this->executions      = 0;
@@ -36,11 +43,23 @@ Pandora_Module::Pandora_Module (string name) {
         this->has_limits      = false;
 }
 
+/** 
+ * Virtual destructor of Pandora_Module.
+ *
+ * Should be redefined by child classes.
+ */
 Pandora_Module::~Pandora_Module () {
 }
 
-int
-Pandora_Module::getModuleType (string type) {
+/** 
+ * Get the Module_Type from a string type.
+ * 
+ * @param type String type.
+ * 
+ * @return The Module_Type which represents the type.
+ */
+Module_Type
+Pandora_Module::parseModuleTypeFromString (string type) {
         if (type == module_generic_data_str) {
                 return TYPE_GENERIC_DATA;
         } else if (type == module_generic_data_inc_str) {
@@ -54,26 +73,104 @@ Pandora_Module::getModuleType (string type) {
         }
 }
 
+/** 
+ * Get the Module_Kind from a string Kind.
+ * 
+ * @param kind String Kind.
+ * 
+ * @return The Module_Kind which represents the Kind.
+ */
+Module_Kind
+Pandora_Module::parseModuleKindFromString (string kind) {
+        if (kind == module_exec_str) {
+                return MODULE_EXEC;
+        } else if (kind == module_proc_str) {
+                return MODULE_PROC;
+        } else if (kind == module_service_str) {
+                return MODULE_SERVICE;
+        } else if (kind == module_freedisk_str) {
+                return MODULE_FREEDISK;
+        } else if (kind == module_freememory_str) {
+                return MODULE_FREEMEMORY;
+        } else if (kind == module_cpuusage_str) {
+                return MODULE_CPUUSAGE;
+        } else {
+                return MODULE_0;
+        }
+}
+
+/** 
+ * Get the name of the module.
+ * 
+ * @return The name of the module.
+ */
 string
 Pandora_Module::getName () const {
         return this->module_name;
 }
 
+/** 
+ * Get the description of the module.
+ * 
+ * @return The module description.
+ */
+string
+Pandora_Module::getDescription () const {
+	return this->module_description;
+}
+
+/** 
+ * Get the module type in a human readable string.
+ * 
+ * @return The module type..
+ */
 string
 Pandora_Module::getTypeString () const {
         return this->module_type_str;
 }
 
-int
+/** 
+ * Get the module type in a integer value.
+ * 
+ * @return The module type in a integer value.
+ */
+Module_Type
 Pandora_Module::getTypeInt () const {
         return this->module_type;
 }
 
-int
+/** 
+ * Get the kind of the module in a integer_value.
+ * 
+ * @return The module kind in a integer value.
+ */
+Module_Kind
 Pandora_Module::getModuleKind () const {
         return this->module_kind;
 }
 
+/** 
+ * Get the type of the module in a integer_value.
+ * 
+ * @return The module type in a integer value.
+ */
+Module_Type
+Pandora_Module::getModuleType () const {
+        return this->module_type;
+}
+
+/** 
+ * Get the module output.
+ *
+ * After running the module, this function will return the output,
+ * based on the module_type and the interval.
+ *
+ * @return The output in a string.
+ *
+ * @exception Output_Error Throwed if the module_type is not correct.
+ * @exception Value_Error Throwed when the output is not in
+ *            the interval range.
+ */
 string
 Pandora_Module::getOutput () const {
         switch (this->module_type) {
@@ -90,7 +187,7 @@ Pandora_Module::getOutput () const {
                 
                 if (this->has_limits) {
                         if (value >= this->max || value <= this->min) {
-                                throw Interval_Error ();
+                                throw Value_Error ();
                         }
                 }
                 
@@ -100,6 +197,16 @@ Pandora_Module::getOutput () const {
         }
 }
 
+/** 
+ * Run the module and generates the output.
+ *
+ * It is used by the child classes to check the execution interval
+ * value and increment the executions variable.
+ * 
+ * @exception Interval_Not_Fulfilled Throwed when the execution
+ *            interval value indicates that the module doesn't have
+ *            to execute.
+ */
 void
 Pandora_Module::run () {
                     
@@ -120,6 +227,23 @@ Pandora_Module::run () {
         has_output = true;
 }
 
+/** 
+ * Get the XML output of the value.
+ *
+ * The output is a element of the TinyXML library. A sample output of
+ * a module is:
+ * @verbatim
+ <module>
+   <name>Conexiones abiertas</name>
+   <type>generic_data</type>
+   <data>5</data>
+   <description>Conexiones abiertas</description>
+ </module>
+   @endverbatim
+ *
+ * @return A pointer to the TiXmlElement if successful which has to be
+ *         freed by the caller. NULL if the XML could not be created.
+ */
 TiXmlElement *
 Pandora_Module::getXml () {
         string        data;
@@ -141,7 +265,7 @@ Pandora_Module::getXml () {
                             this->module_name.c_str ());
                             
                 return NULL;
-        } catch (Interval_Error e) {
+        } catch (Value_Error e) {
                 pandoraLog ("The returned value was not in the interval on module %s",
                             this->module_name.c_str ());
                 
@@ -183,29 +307,69 @@ Pandora_Module::getXml () {
         return root;
 }
 
+/** 
+ * Set the max value the module can have.
+ *
+ * The range is closed, so the value is included.
+ *
+ * @param value Max value to set.
+ */
 void
 Pandora_Module::setMax (int value) {
         this->has_limits = true;
         this->max        = value;
 }
 
+/** 
+ * Set the min value the module can have.
+ *
+ * The range is closed, so the value is included.
+ *
+ * @param value Min value to set.
+ */
 void
 Pandora_Module::setMin (int value) {
         this->has_limits = true;
         this->min        = value;
 }
 
+/** 
+ * Set the module type from a string type.
+ * 
+ * @param type String type.
+ */
 void
 Pandora_Module::setType (string type) {
         this->module_type_str = type;
-        this->module_type     = getModuleType (type);
+        this->module_type     = parseModuleTypeFromString (type);
 }
 
+/** 
+ * Set the module kind from a string kind.
+ * 
+ * @param kind String kind.
+ */
+void
+Pandora_Module::setKind (string kind) {
+        this->module_kind_str = kind;
+        this->module_kind     = parseModuleKindFromString (kind);
+}
+
+/** 
+ * Set the interval execution.
+ * 
+ * @param interval Interval between executions.
+ */
 void
 Pandora_Module::setInterval (int interval) {
         this->module_interval = interval;
 }
 
+/** 
+ * Set the module description.
+ * 
+ * @param description Description of the module.
+ */
 void
 Pandora_Module::setDescription (string description) {
         this->module_description = description;
diff --git a/pandora_agents/win32/modules/pandora_module.h b/pandora_agents/win32/modules/pandora_module.h
index 8ca64da795..00c30e92dd 100644
--- a/pandora_agents/win32/modules/pandora_module.h
+++ b/pandora_agents/win32/modules/pandora_module.h
@@ -26,30 +26,47 @@
 #include <list>
 #include <string>
 
+/**
+ * Definition of Pandora modules.
+ */
 namespace Pandora_Modules {
 
-        enum {
-                TYPE_0,
-                TYPE_GENERIC_DATA,
-                TYPE_GENERIC_DATA_INC,
-                TYPE_GENERIC_PROC,
-                TYPE_GENERIC_DATA_STRING
-        };
+	/**
+	 * Defines the type of the module.
+	 *
+	 * The type of a module is the value type the module can have.
+	 */
+        typedef enum {
+                TYPE_0,                  /**< Invalid value               */
+                TYPE_GENERIC_DATA,       /**< The value is an integer     */
+                TYPE_GENERIC_DATA_INC,   /**< The value is an integer with
+					  *  incremental diferences       */
+                TYPE_GENERIC_PROC,       /**< The value is a 0 or a 1     */
+                TYPE_GENERIC_DATA_STRING /**< The value is a string       */
+        } Module_Type;
 
         const string module_generic_data_str        = "generic_data";
         const string module_generic_data_inc_str    = "generic_data_inc";
         const string module_generic_proc_str        = "generic_proc";
         const string module_generic_data_string_str = "generic_data_string";
 
-        enum {
-                MODULE_0,
-                MODULE_EXEC,
-                MODULE_PROC,
-		MODULE_SERVICE,
-		MODULE_FREEDISK,
-		MODULE_CPUUSAGE,
-		MODULE_FREEMEMORY
-        };
+	/**
+	 * Defines the kind of the module.
+	 *
+	 * The kind of a module is the work the module does.
+	 */
+        typedef enum {
+                MODULE_0,         /**< Invalid kind                    */
+                MODULE_EXEC,      /**< The module run a custom command */
+                MODULE_PROC,      /**< The module checks for a running
+				   *   process                         */
+		MODULE_SERVICE,   /**< The module checks for a running
+				   *   service                         */
+		MODULE_FREEDISK,  /**< The module checks the free      */
+		MODULE_CPUUSAGE,  /**< The module checks the CPU usage */
+		MODULE_FREEMEMORY /**< The module checks the amount of 
+				   *   freememory in the system        */
+        } Module_Kind;
         
         const string module_exec_str                = "module_exec";
         const string module_proc_str                = "module_proc";
@@ -58,49 +75,89 @@ namespace Pandora_Modules {
 	const string module_freememory_str          = "module_freememory";
 	const string module_cpuusage_str            = "module_cpuusage";
 
-        class Output_Error           : public Pandora::Pandora_Exception { };
-        class Interval_Error         : public Pandora::Pandora_Exception { };
-        class Interval_Not_Fulfilled : public Pandora::Pandora_Exception { };
-        
+	/**
+	 * Pandora module super-class exception.
+	 */
+        class Module_Exception : public Pandora::Pandora_Exception    { };
+	
+	/**
+	 * An error happened with the module output.
+	 */
+        class Output_Error : public Pandora_Modules::Module_Exception { };
+	
+	/**
+	 * The module value is not correct, usually beacause of the limits.
+	 */
+        class Value_Error : public Pandora_Modules::Module_Exception  { };
+	
+	/**
+	 * The module does not satisfy its interval.
+	 */
+        class Interval_Not_Fulfilled : public Pandora_Modules::Module_Exception { };
+
+        /**
+	 * Pandora module super-class.
+	 *
+	 * Every defined module must inherit of this class.
+	 */
         class Pandora_Module {
+	private:
+		int         module_interval;
+                int         executions;
+                int         max, min;
+                bool        has_limits;
+		string      module_type_str;
+                Module_Type module_type;
+		string      module_kind_str;
+                Module_Kind module_kind;
         protected:
-                string module_name;
-                string module_type_str;
-                int    module_type;
-                string module_kind_str;
-                string module_description;
-                int    module_kind;
-                int    module_interval;
-                int    executions;
-                string output;
-                int    max, min;
-                bool   has_limits;
-                bool   has_output;
+		/**
+		 * Module output generated at execution.
+		 */
+		string      output;
+		/**
+		 * Indicates if the module generated output in
+		 * his last execution.
+		 */
+		bool        has_output;
+		/**
+		 * The name of the module.
+		 */
+                string      module_name;
+		/**
+		 * The description of the module.
+		 */
+                string      module_description;
         public:
-                Pandora_Module           (string name);
-                virtual ~Pandora_Module  ();
+                Pandora_Module                    (string name);
+                virtual ~Pandora_Module           ();
+
+                static Module_Type
+			parseModuleTypeFromString (string type);
+		
+		static Module_Kind
+			parseModuleKindFromString (string kind);
+		
+                void               setInterval    (int interval);
                 
-                static int getModuleType (string type);
+                TiXmlElement      *getXml         ();
                 
-                void   setInterval       (int interval);
+                virtual void       run            ();
                 
-                /* Get the XML output of the agent. */
-                TiXmlElement *getXml     ();
+                virtual string     getOutput      () const;
                 
-                /* Execute the agent */
-                virtual void   run       ();
+                string             getName        () const;
+		string             getDescription () const;
+                string             getTypeString  () const;
+                Module_Type        getTypeInt     () const;
+                Module_Type        getModuleType  () const;
+		Module_Kind        getModuleKind  () const;
                 
-                virtual string getOutput () const;
-                
-                string getName           () const;
-                string getTypeString     () const;
-                int    getTypeInt        () const;
-                int    getModuleKind     () const;
-                
-                void   setType           (string type);
-                void   setDescription    (string description);
-                void   setMax            (int value);
-                void   setMin            (int value);
+                void               setType        (string type);
+		void               setKind        (string kind);
+                void               setDescription (string description);
+                void               setMax         (int value);
+                void               setMin         (int value);
         };
 }
 
diff --git a/pandora_agents/win32/modules/pandora_module_cpuusage.cc b/pandora_agents/win32/modules/pandora_module_cpuusage.cc
index 1b0191a24f..e72f7f3cbd 100644
--- a/pandora_agents/win32/modules/pandora_module_cpuusage.cc
+++ b/pandora_agents/win32/modules/pandora_module_cpuusage.cc
@@ -27,13 +27,18 @@ using namespace Pandora;
 using namespace Pandora_Modules;
 using namespace Pandora_Strutils;
 
+/** 
+ * Creates a Pandora_Module_Cpuusage object.
+ * 
+ * @param name Module name.
+ * @param cpu_id CPU id to control. It's 0 in monoprocessor systems.
+ */
 Pandora_Module_Cpuusage::Pandora_Module_Cpuusage (string name, int cpu_id)
 	: Pandora_Module (name) {
         
         this->cpu_id = cpu_id;
 	
-        this->module_kind_str = module_cpuusage_str;
-        this->module_kind     = MODULE_CPUUSAGE;
+        this->setKind (module_cpuusage_str);
 }
 
 void
@@ -49,8 +54,8 @@ Pandora_Module_Cpuusage::run () {
 	try {
 		res = Pandora_Wmi::getCpuUsagePercentage (this->cpu_id);
 		
-		output = inttostr (res);
-	} catch (Pandora_Wmi::Pandora_Wmi_Error e) {
+		this->output = inttostr (res);
+	} catch (Pandora_Wmi::Pandora_Wmi_Exception e) {
 		this->has_output = false;
 	}
 }
diff --git a/pandora_agents/win32/modules/pandora_module_cpuusage.h b/pandora_agents/win32/modules/pandora_module_cpuusage.h
index f4c54c4be4..efbcc0d49f 100644
--- a/pandora_agents/win32/modules/pandora_module_cpuusage.h
+++ b/pandora_agents/win32/modules/pandora_module_cpuusage.h
@@ -25,6 +25,9 @@
 #include "pandora_module.h"
 
 namespace Pandora_Modules {
+	/**
+	 * Module to retrieve the CPU usage percentage.
+	 */
         class Pandora_Module_Cpuusage : public Pandora_Module {
         private:
                 int cpu_id;
diff --git a/pandora_agents/win32/modules/pandora_module_exec.cc b/pandora_agents/win32/modules/pandora_module_exec.cc
index 6b9ad5bf3f..4bfccaf10b 100644
--- a/pandora_agents/win32/modules/pandora_module_exec.cc
+++ b/pandora_agents/win32/modules/pandora_module_exec.cc
@@ -28,12 +28,17 @@ using namespace Pandora;
 using namespace Pandora_Strutils;
 using namespace Pandora_Modules;
 
+/** 
+ * Creates a Pandora_Module_Exec object.
+ * 
+ * @param name Module name
+ * @param exec Command to be executed.
+ */
 Pandora_Module_Exec::Pandora_Module_Exec (string name, string exec)
                                          : Pandora_Module (name) {
         this->module_exec = "cmd.exe /c \"" + exec + "\"";
         
-        this->module_kind_str = module_exec_str;
-        this->module_kind     = MODULE_EXEC;
+        this->setKind (module_exec_str);
 }
 
 void
@@ -48,6 +53,7 @@ Pandora_Module_Exec::run () {
         try {
                 Pandora_Module::run ();
         } catch (Interval_Not_Fulfilled e) {
+		this->has_output = false;
                 return;
         }
         
@@ -62,6 +68,7 @@ Pandora_Module_Exec::run () {
         job = CreateJobObject (&attributes, this->module_name.c_str ());
         if (job == NULL) {
                 pandoraLog ("CreateJobObject bad. Err: %d", GetLastError ());
+		this->has_output = false;
                 return;
         }
         
@@ -70,6 +77,7 @@ Pandora_Module_Exec::run () {
         
         if (! CreatePipe (&out_read, &new_stdout, &attributes, 0)) {
                 pandoraLog ("CreatePipe failed. Err: %d", GetLastError ());
+		this->has_output = false;
                 return;
         }
         
@@ -100,6 +108,7 @@ Pandora_Module_Exec::run () {
                              working_dir.c_str (), &si, &pi)) {
                 pandoraLog ("Pandora_Module_Exec: %s CreateProcess failed. Err: %d",
                             this->module_name.c_str (), GetLastError ());
+		this->has_output = false;
         } else {
                 char          buffer[BUFSIZE + 1];
                 unsigned long read, avail;
@@ -123,6 +132,7 @@ Pandora_Module_Exec::run () {
                         
                         pandoraLog ("Pandora_Module_Exec: %s did not executed well (retcode: %d)",
                                     this->module_name.c_str (), retval);
+			this->has_output = false;
                 }
                 
                 PeekNamedPipe (out_read, buffer, BUFSIZE, &read, &avail, NULL);
diff --git a/pandora_agents/win32/modules/pandora_module_exec.h b/pandora_agents/win32/modules/pandora_module_exec.h
index 5b1c4c23b8..686f723402 100644
--- a/pandora_agents/win32/modules/pandora_module_exec.h
+++ b/pandora_agents/win32/modules/pandora_module_exec.h
@@ -24,6 +24,13 @@
 #include "pandora_module.h"
 
 namespace Pandora_Modules {
+	/**
+	 * Module to execute a custom command using the Windows command
+	 * line.
+	 *
+	 * Any custom order that want to be executed can be put in
+	 * the <code>util</code> directory into the Pandora agent path.
+	 */
         class Pandora_Module_Exec : public Pandora_Module {
         private:
                 string module_exec;        
diff --git a/pandora_agents/win32/modules/pandora_module_factory.cc b/pandora_agents/win32/modules/pandora_module_factory.cc
index 7bdbcb7a80..fdbf25615a 100644
--- a/pandora_agents/win32/modules/pandora_module_factory.cc
+++ b/pandora_agents/win32/modules/pandora_module_factory.cc
@@ -62,6 +62,14 @@ parseLine (string line, string token) {
         return retstr;
 }
 
+/** 
+ * Creates a Pandora_Module object based on a string definition.
+ *
+ * @param definition Module definition readed from the configuration file.
+ * 
+ * @return A new Pandora_Module object. NULL if the definition is
+ *         incorrect.
+ */
 Pandora_Module *
 Pandora_Module_Factory::getModuleFromDefinition (string definition) {
         list<string>           tokens;
@@ -72,6 +80,7 @@ Pandora_Module_Factory::getModuleFromDefinition (string definition) {
 	string                 module_freedisk, module_cpuusage, module_freememory;
         Pandora_Module        *module;
         bool                   numeric;
+	Module_Type            type;
 
 	module_name        = "";
 	module_type        = "";
@@ -82,8 +91,7 @@ Pandora_Module_Factory::getModuleFromDefinition (string definition) {
 	module_exec        = "";
 	module_proc        = "";
 	module_service     = "";
-		
-		
+
         stringtok (tokens, definition, "\n");
         
         /* Pick the first and the last value of the token list */
@@ -171,8 +179,9 @@ Pandora_Module_Factory::getModuleFromDefinition (string definition) {
 	if (module_description != "") {
                 module->setDescription (module_description);
         }
-	
-        switch (Pandora_Module::getModuleType (module_type)) {
+
+	type = Pandora_Module::parseModuleTypeFromString (module_type);
+        switch (type) {
         case TYPE_GENERIC_DATA:
         case TYPE_GENERIC_DATA_INC:
         case TYPE_GENERIC_PROC:
diff --git a/pandora_agents/win32/modules/pandora_module_factory.h b/pandora_agents/win32/modules/pandora_module_factory.h
index 5eae7412d1..78b02936bc 100644
--- a/pandora_agents/win32/modules/pandora_module_factory.h
+++ b/pandora_agents/win32/modules/pandora_module_factory.h
@@ -28,9 +28,11 @@
 using namespace std;
 using namespace Pandora_Modules;
 
+/**
+ * Factoy to create Pandora_Module objects by parsing a definition.
+ */
 namespace Pandora_Module_Factory {
         Pandora_Module * getModuleFromDefinition (string definition);
-        string           getModuleResult         (Pandora_Module *module);
 }
 
 #endif
diff --git a/pandora_agents/win32/modules/pandora_module_freedisk.cc b/pandora_agents/win32/modules/pandora_module_freedisk.cc
index 4badf4cb38..825066cf71 100644
--- a/pandora_agents/win32/modules/pandora_module_freedisk.cc
+++ b/pandora_agents/win32/modules/pandora_module_freedisk.cc
@@ -29,6 +29,12 @@ using namespace Pandora;
 using namespace Pandora_Modules;
 using namespace Pandora_Strutils;
 
+/** 
+ * Creates a Pandora_Module_Freedisk object.
+ * 
+ * @param name Module name.
+ * @param disk_id Logical drive id to be monitorized. Usually it's "C:"
+ */
 Pandora_Module_Freedisk::Pandora_Module_Freedisk (string name, string disk_id)
 	: Pandora_Module (name) {
         
@@ -37,8 +43,7 @@ Pandora_Module_Freedisk::Pandora_Module_Freedisk (string name, string disk_id)
         transform (disk_id.begin (), disk_id.end (),
                    this->disk_id.begin (), (int (*) (int)) toupper);
 	
-        this->module_kind_str = module_freedisk_str;
-        this->module_kind     = MODULE_FREEDISK;
+        this->setKind (module_freedisk_str);
 }
 
 void
@@ -54,8 +59,8 @@ Pandora_Module_Freedisk::run () {
 	try {
 		res = Pandora_Wmi::getDiskFreeSpace (this->disk_id);
 			
-		output = longtostr (res);
-	} catch (Pandora_Wmi::Pandora_Wmi_Error e) {
+		this->output = longtostr (res);
+	} catch (Pandora_Wmi::Pandora_Wmi_Exception e) {
 		this->has_output = false;
 	}
 }
diff --git a/pandora_agents/win32/modules/pandora_module_freedisk.h b/pandora_agents/win32/modules/pandora_module_freedisk.h
index 13369eae2b..c7b9893999 100644
--- a/pandora_agents/win32/modules/pandora_module_freedisk.h
+++ b/pandora_agents/win32/modules/pandora_module_freedisk.h
@@ -25,6 +25,10 @@
 #include "pandora_module.h"
 
 namespace Pandora_Modules {
+	/**
+	 * Module to retrieve the free space available in a logical volume
+	 * disk.
+	 */
         class Pandora_Module_Freedisk : public Pandora_Module {
         private:
                 string disk_id;
diff --git a/pandora_agents/win32/modules/pandora_module_freememory.cc b/pandora_agents/win32/modules/pandora_module_freememory.cc
index 61e4d1dfa6..d8992adc2b 100644
--- a/pandora_agents/win32/modules/pandora_module_freememory.cc
+++ b/pandora_agents/win32/modules/pandora_module_freememory.cc
@@ -27,11 +27,15 @@ using namespace Pandora;
 using namespace Pandora_Modules;
 using namespace Pandora_Strutils;
 
+/** 
+ * Creates a Pandora_Module_Freememory object.
+ * 
+ * @param name Module name.
+ */
 Pandora_Module_Freememory::Pandora_Module_Freememory (string name)
 	: Pandora_Module (name) {
 	
-        this->module_kind_str = module_freememory_str;
-        this->module_kind     = MODULE_FREEMEMORY;
+        this->setKind (module_freememory_str);
 }
 
 void
@@ -47,8 +51,8 @@ Pandora_Module_Freememory::run () {
 	try {
 		res = Pandora_Wmi::getFreememory ();
 		
-		output = longtostr (res);
-	} catch (Pandora_Wmi::Pandora_Wmi_Error e) {
+		this->output = longtostr (res);
+	} catch (Pandora_Wmi::Pandora_Wmi_Exception e) {
 		this->has_output = false;
 	}
 }
diff --git a/pandora_agents/win32/modules/pandora_module_freememory.h b/pandora_agents/win32/modules/pandora_module_freememory.h
index c2ad0014f3..8bac0bb1bc 100644
--- a/pandora_agents/win32/modules/pandora_module_freememory.h
+++ b/pandora_agents/win32/modules/pandora_module_freememory.h
@@ -24,6 +24,9 @@
 #include "pandora_module.h"
 
 namespace Pandora_Modules {
+	/**
+	 * Module to retrieve the free memory amount of the system.
+	 */
         class Pandora_Module_Freememory : public Pandora_Module {
         public:
                 Pandora_Module_Freememory (string name);
diff --git a/pandora_agents/win32/modules/pandora_module_list.cc b/pandora_agents/win32/modules/pandora_module_list.cc
index f98315c90f..4793789d98 100644
--- a/pandora_agents/win32/modules/pandora_module_list.cc
+++ b/pandora_agents/win32/modules/pandora_module_list.cc
@@ -29,9 +29,16 @@
 #include <fstream>
 
 using namespace std;
-using namespace Pandora;
 
-Pandora_Module_List::Pandora_Module_List (string filename) {
+/** 
+ * Read and set a key-value set from a file.
+ *
+ * It parses the file and create a Pandora_Module object with
+ *
+ * @param filename Path to the configuration file that includes the
+ *        module definitions.
+ */
+Pandora_Modules::Pandora_Module_List::Pandora_Module_List (string filename) {
         ifstream     file (filename.c_str ());
         string       buffer;
         unsigned int pos;
@@ -74,7 +81,12 @@ Pandora_Module_List::Pandora_Module_List (string filename) {
         *current = modules->begin ();
 }
 
-Pandora_Module_List::~Pandora_Module_List () {
+/** 
+ * Destroy the list.
+ *
+ * Note it also deletes all modules from the list.
+ */
+Pandora_Modules::Pandora_Module_List::~Pandora_Module_List () {
 	Pandora_Module                       *module;
 	std::list<Pandora_Module *>::iterator iter;
 	
@@ -93,7 +105,7 @@ Pandora_Module_List::~Pandora_Module_List () {
 }
 
 void
-Pandora_Module_List::parseModuleDefinition (string definition) {
+Pandora_Modules::Pandora_Module_List::parseModuleDefinition (string definition) {
         Pandora_Module            *module;
         Pandora_Module_Exec       *module_exec;
         Pandora_Module_Proc       *module_proc;
@@ -144,49 +156,73 @@ Pandora_Module_List::parseModuleDefinition (string definition) {
         }
 }
 
+
+/** 
+ * Get the Pandora_Module that is pointed by the internal current pointer.
+ * 
+ * @return The current Pandora_Module.
+ */
 Pandora_Module *
-Pandora_Module_List::getCurrentValue () { 
+Pandora_Modules::Pandora_Module_List::getCurrentValue () { 
         return *(*current);
 }
 
+/** 
+ * Move the current pointer to the first element of the list.
+ */
 void
-Pandora_Module_List::goFirst () {
+Pandora_Modules::Pandora_Module_List::goFirst () {
         if (modules != NULL) {
                 *current = modules->begin ();
         }
 }
 
+/** 
+ * Move the current pointer to the last element of the list.
+ */
 void
-Pandora_Module_List::goLast () {
+Pandora_Modules::Pandora_Module_List::goLast () {
         if (modules != NULL) {
                 *current = modules->end ();
         }
 }
 
+/** 
+ * Move the current pointer to the next element of the list.
+ */
 void
-Pandora_Module_List::goNext () {
+Pandora_Modules::Pandora_Module_List::goNext () {
         if (current != NULL && !isLast ()) {
                 (*current)++;
         }
 }
 
+/** 
+ * Move the current pointer to the previous element of the list.
+ */
 void
-Pandora_Module_List::goPrev () {
+Pandora_Modules::Pandora_Module_List::goPrev () {
         if (current != NULL && !isFirst ()) {
                 (*current)--;
         }
 }
 
+/** 
+ * Check if the current pointer is the last one of the list.
+ */
 bool
-Pandora_Module_List::isLast () {
+Pandora_Modules::Pandora_Module_List::isLast () {
         if (current == NULL || modules == NULL) {
                 return true;
         }
         return *current == modules->end ();
 }
 
+/** 
+ * Check if the current pointer is the first one of the list.
+ */
 bool
-Pandora_Module_List::isFirst () {
+Pandora_Modules::Pandora_Module_List::isFirst () {
         if (current == NULL || modules == NULL) {
                 return true;
         }
diff --git a/pandora_agents/win32/modules/pandora_module_list.h b/pandora_agents/win32/modules/pandora_module_list.h
index 65d5c6717d..6c83289ae5 100644
--- a/pandora_agents/win32/modules/pandora_module_list.h
+++ b/pandora_agents/win32/modules/pandora_module_list.h
@@ -28,32 +28,36 @@
 
 using namespace std;
 using namespace Pandora;
-using namespace Pandora_Modules;
-
-class Pandora_Module_List {
-protected:
-        list<Pandora_Module *>           *modules;
-        list<Pandora_Module *>::iterator *current;
-private:
-        void             parseModuleDefinition (string definition);
-public:
-        /* Read and set a key-value set from a file. */
-        Pandora_Module_List                    (string filename);
-        
-        ~Pandora_Module_List                   ();
-        
-        Pandora_Module * getCurrentValue       ();
-        
-        /* Move to the first element of the list */
-        void             goFirst               ();
-        
-        /* Move to the last element of the list */
-        void             goLast                ();
-        void             goNext                ();
-        void             goPrev                ();
-        
-        bool             isLast                ();
-        bool             isFirst               ();
-};
 
+namespace Pandora_Modules {
+	/**
+	 * Class to handle a list of Pandora_Module objects.
+	 *
+	 * It provides a set of methods to iterate through the list
+	 * by using a internal "current module" pointer.
+	 */
+	class Pandora_Module_List {
+	private:
+		list<Pandora_Module *>           *modules;
+		list<Pandora_Module *>::iterator *current;
+		void             parseModuleDefinition (string definition);
+	public:
+		Pandora_Module_List                    (string filename);
+		
+		~Pandora_Module_List                   ();
+		
+		Pandora_Module * getCurrentValue       ();
+		
+		/* Move to the first element of the list */
+		void             goFirst               ();
+		
+		/* Move to the last element of the list */
+		void             goLast                ();
+		void             goNext                ();
+		void             goPrev                ();
+		
+		bool             isLast                ();
+		bool             isFirst               ();
+	};
+}
 #endif /* __PANDORA_MODULE_LIST_H__ */
diff --git a/pandora_agents/win32/modules/pandora_module_proc.cc b/pandora_agents/win32/modules/pandora_module_proc.cc
index 3934cab2f9..e2d06b87ad 100644
--- a/pandora_agents/win32/modules/pandora_module_proc.cc
+++ b/pandora_agents/win32/modules/pandora_module_proc.cc
@@ -28,6 +28,12 @@ using namespace Pandora;
 using namespace Pandora_Modules;
 using namespace Pandora_Strutils;
 
+/** 
+ * Creates a Pandora_Module_Proc object.
+ * 
+ * @param name Module name.
+ * @param process_name Process name to check.
+ */
 Pandora_Module_Proc::Pandora_Module_Proc (string name, string process_name)
 	: Pandora_Module (name) {
         
@@ -35,8 +41,7 @@ Pandora_Module_Proc::Pandora_Module_Proc (string name, string process_name)
         transform (process_name.begin (), process_name.end (),
                    this->process_name.begin (), (int (*) (int)) tolower);
 	
-        this->module_kind_str = module_proc_str;
-        this->module_kind     = MODULE_PROC;
+        this->setKind (module_proc_str);
 }
 
 void
@@ -51,5 +56,5 @@ Pandora_Module_Proc::run () {
         
 	res = Pandora_Wmi::isProcessRunning (this->process_name);
 	
-        output = inttostr (res);
+        this->output = inttostr (res);
 }
diff --git a/pandora_agents/win32/modules/pandora_module_proc.h b/pandora_agents/win32/modules/pandora_module_proc.h
index 0e833ed134..da89db024d 100644
--- a/pandora_agents/win32/modules/pandora_module_proc.h
+++ b/pandora_agents/win32/modules/pandora_module_proc.h
@@ -24,6 +24,9 @@
 #include "pandora_module.h"
 
 namespace Pandora_Modules {
+	/**
+	 * Module to check that a process is running on the system.
+	 */
         class Pandora_Module_Proc : public Pandora_Module {
         private:
                 string process_name;
diff --git a/pandora_agents/win32/modules/pandora_module_service.cc b/pandora_agents/win32/modules/pandora_module_service.cc
index 9d6c87fbf8..881d84be95 100644
--- a/pandora_agents/win32/modules/pandora_module_service.cc
+++ b/pandora_agents/win32/modules/pandora_module_service.cc
@@ -29,6 +29,12 @@ using namespace Pandora;
 using namespace Pandora_Modules;
 using namespace Pandora_Strutils;
 
+/** 
+ * Creates a Pandora_Module_Service object.
+ * 
+ * @param name Module name.
+ * @param service_name Service internal name to check.
+ */
 Pandora_Module_Service::Pandora_Module_Service (string name, string service_name)
 	: Pandora_Module (name) {
         
@@ -37,8 +43,7 @@ Pandora_Module_Service::Pandora_Module_Service (string name, string service_name
         transform (service_name.begin (), service_name.end (),
                    this->service_name.begin (), (int (*) (int)) tolower);
 	
-        this->module_kind_str = module_service_str;
-        this->module_kind     = MODULE_SERVICE;
+        this->setKind (module_service_str);
 }
 
 void
@@ -52,5 +57,5 @@ Pandora_Module_Service::run () {
         }
         
         res = Pandora_Wmi::isServiceRunning (this->service_name);
-        output = inttostr (res);
+        this->output = inttostr (res);
 }
diff --git a/pandora_agents/win32/modules/pandora_module_service.h b/pandora_agents/win32/modules/pandora_module_service.h
index 47ccb97c56..5aaa7ab7de 100644
--- a/pandora_agents/win32/modules/pandora_module_service.h
+++ b/pandora_agents/win32/modules/pandora_module_service.h
@@ -25,6 +25,10 @@
 #include "pandora_module.h"
 
 namespace Pandora_Modules {
+	/**
+	 * Module to check that a windows service is running on the
+	 * system.
+	 */
         class Pandora_Module_Service : public Pandora_Module {
         private:
                 string service_name;
diff --git a/pandora_agents/win32/pandora.cc b/pandora_agents/win32/pandora.cc
index 43bd7ddd1d..5c910b8033 100644
--- a/pandora_agents/win32/pandora.cc
+++ b/pandora_agents/win32/pandora.cc
@@ -37,6 +37,13 @@ string pandora_dir;
 bool   pandora_debug;
 string pandora_version = PANDORA_VERSION;
 
+/**
+ * Parses a string and initialize the key and the value.
+ * 
+ * The string should be in the format:
+ *  - <code>key value</code>
+ *  - <code>key "value with blankspaces"</code>
+ */
 void
 Key_Value::parseLine (string str) {
         unsigned int           pos;
@@ -68,11 +75,21 @@ Key_Value::parseLine (string str) {
         }
 }
 
+/**
+ * Get the key of the object.
+ * 
+ * @return The key
+ */
 string
 Key_Value::getKey () {
         return key;
 }
 
+/**
+ * Get the value of the object.
+ * 
+ * @return The value
+ */
 string
 Key_Value::getValue () {
         return value;
@@ -104,6 +121,15 @@ pandoraWriteLog (string filename, string line) {
         cout << line << endl;
 }
 
+/**
+ * Write a message in the log file.
+ *
+ * The log file is used to write the output of errors and problems of the
+ * agent.
+ *
+ * @param format String output format.
+ * @param ... Variable argument list
+ */
 void
 Pandora::pandoraLog (char *format, ...) {
         va_list    args;
@@ -116,6 +142,15 @@ Pandora::pandoraLog (char *format, ...) {
         pandoraWriteLog ("pandora-log.log", (char *) msg);
 }
 
+/**
+ * Write a message in the debug file.
+ *
+ * The log file is used to write the output of debugging information of the
+ * agent.
+ *
+ * @param format String output format.
+ * @param ... Variable argument list
+ */
 void
 Pandora::pandoraDebug (char *format, ...) {
         if (pandora_debug) {
@@ -131,38 +166,95 @@ Pandora::pandoraDebug (char *format, ...) {
         return;
 }
 
+/**
+ * Secure free of a pointer.
+ *
+ * @param pointer pointer to free.
+ */
 void
-Pandora::pandoraFree (void * e) {
-        if (e != NULL)
-                free (e);
+Pandora::pandoraFree (void * pointer) {
+        if (pointer != NULL)
+                free (pointer);
         return;       
 }
 
+/**
+ * Set the installation directory of the application.
+ *
+ * This directory is the path to the directory which holds
+ * the binary file.
+ *
+ * @param dir The path to the directory. 
+ *
+ * @see getPandoraInstallDir
+ */
 void
 Pandora::setPandoraInstallDir (string dir) {
         pandora_dir = dir;
 }
 
+/**
+ * Get the installation directory of the application.
+ *
+ * This directory is the path to the directory which holds
+ * the binary file.
+ *
+ * @return The path to the directory.
+ *
+ * @see setPandoraInstallDir
+ */
 string
 Pandora::getPandoraInstallDir () {
         return pandora_dir;
 }
 
+/**
+ * Set the installation path of the application.
+ *
+ * This the complete path to the binary file.
+ *
+ * @param path The path to the binary file. 
+ *
+ * @see getPandoraInstallPath
+ */
 void
 Pandora::setPandoraInstallPath (string path) {
         pandora_path = path;
 }
 
+/**
+ * Get the installation path of the application.
+ *
+ * This the complete path to the binary file.
+ *
+ * @return The path.
+ *
+ * @see setPandoraInstallPath
+ */
 string
 Pandora::getPandoraInstallPath () {
         return pandora_path;
 }
 
+/**
+ * Set the debug flag.
+ *
+ * If the flag is false output wil be generated.
+ *
+ * @param dbg Turns the debug flag on/off.
+ * 
+ * @see pandoraDebug
+ */
 void
 Pandora::setPandoraDebug  (bool dbg) {
         pandora_debug = dbg;
 }
 
+/**
+ * Get the version of the agent.
+ *
+ * @return The version.
+ */
 string
 Pandora::getPandoraAgentVersion () {
         return pandora_version;
diff --git a/pandora_agents/win32/pandora.h b/pandora_agents/win32/pandora.h
index b094d2a551..f918b9ec8c 100644
--- a/pandora_agents/win32/pandora.h
+++ b/pandora_agents/win32/pandora.h
@@ -29,12 +29,18 @@ using namespace std;
 
 #define	PANDORA_DEBUG 1
 
+/**
+ * Main application.
+ */
 namespace Pandora {
-          
+	/**
+	 * A Key_Value object holds a relation between a value and a
+	 * unique key value.
+	 */
         class Key_Value {
-        protected:
-                string key;
-                string value;
+        private:
+		string key;
+		string value;
         public:
                 void   parseLine (string str);
                 string getKey    ();
@@ -45,7 +51,7 @@ namespace Pandora {
         const char * const name          = "PandoraAgent";
         const char * const display_name  = "Pandora agent";
         const char * const description   = "The Pandora Agent service";
-        
+
         void   setPandoraInstallDir   (string dir);
         string getPandoraInstallDir   ();
         void   setPandoraInstallPath  (string path);
@@ -56,7 +62,13 @@ namespace Pandora {
         void   pandoraDebug           (char *format, ...);
         void   pandoraLog             (char *format, ...);
         void   pandoraFree            (void * e);
-        
+
+	/**
+	 * Super-class exception.
+	 *
+	 * Other exceptions generated in the application should inherate from
+	 * this class. This allow a easier handling on throw and catch blocks.
+	 */
         class Pandora_Exception { };
 }
 
diff --git a/pandora_agents/win32/pandora_agent_conf.cc b/pandora_agents/win32/pandora_agent_conf.cc
index 742010b64d..673ad0128c 100644
--- a/pandora_agents/win32/pandora_agent_conf.cc
+++ b/pandora_agents/win32/pandora_agent_conf.cc
@@ -23,10 +23,22 @@
 #include "pandora.h"
 
 using namespace std;
+using namespace Pandora;
 
 #define MAX_KEYS 100
 
-Pandora_Agent_Conf::Pandora_Agent_Conf (string filename) {
+/**
+ * Creates a new Pandora_Agent_Conf.
+ * 
+ * It parses the filename and initialize the internal structures
+ * of configuration values. The configuration file consist of a number of
+ * lines of some of these forms:
+ *  - <code>name value</code>
+ *  - <code>name "value with blankspaces"</code>
+ *
+ * @param filename Configuration file to open.
+ */
+Pandora::Pandora_Agent_Conf::Pandora_Agent_Conf (string filename) {
         ifstream     file (filename.c_str ());
         string       buffer;
         unsigned int pos;
@@ -56,12 +68,26 @@ Pandora_Agent_Conf::Pandora_Agent_Conf (string filename) {
         file.close ();
 }
 
-Pandora_Agent_Conf::~Pandora_Agent_Conf () {
-        delete key_values;
+/**
+ * Destroy a Pandora_Agent_Conf object.
+ */
+Pandora::Pandora_Agent_Conf::~Pandora_Agent_Conf () {
+        delete key_values; 
 }
 
+/**
+ * Queries for a configuration value.
+ * 
+ * This method search in the key_values attribute for a
+ * configuration value which match the key supplied.
+ *
+ * @param key Key to look for.
+ *
+ * @return The value of the configuration key looked for.
+ *         If it could not be found then an empty string is returned.
+ */
 string
-Pandora_Agent_Conf::getValue (const string key) {
+Pandora::Pandora_Agent_Conf::getValue (const string key) {
         std::list<Key_Value>::iterator i = key_values->begin ();
         
         while (i != key_values->end ()) {
diff --git a/pandora_agents/win32/pandora_agent_conf.h b/pandora_agents/win32/pandora_agent_conf.h
index 41af2d096f..6ac5ac0429 100644
--- a/pandora_agents/win32/pandora_agent_conf.h
+++ b/pandora_agents/win32/pandora_agent_conf.h
@@ -26,19 +26,25 @@
 #include <list>
 
 using namespace std;
-using namespace Pandora;
 
-class Pandora_Agent_Conf {
-protected:
-        list<Key_Value> *key_values; /* Key-value list */
-public:
-        /* Read and set a key-value set from a file. */
-        Pandora_Agent_Conf       (string filename);
-        
-        ~Pandora_Agent_Conf      ();
-        
-        /* Get the value of a key from a key-value set. */
-        string getValue        (const string key);
-};
+namespace Pandora {
+        /**
+	 * Agent main configuration class.
+	 *
+	 * Stores a list of Key_Value objects with the agent configuration.
+	 * It parses a configuration file and supplies a function to get the
+	 * configuration values.
+	 */
+	class Pandora_Agent_Conf {
+	private:
+		list<Key_Value> *key_values;
+	public:
+		Pandora_Agent_Conf       (string filename);
+		
+		~Pandora_Agent_Conf      ();
+		
+		string getValue        (const string key);
+	};
+}
 
-#endif /* __BABEL_AGENT_CONF_H__ */
+#endif /* __PANDORA_AGENT_CONF_H__ */
diff --git a/pandora_agents/win32/pandora_strutils.cc b/pandora_agents/win32/pandora_strutils.cc
index df79337d6e..b401de9280 100644
--- a/pandora_agents/win32/pandora_strutils.cc
+++ b/pandora_agents/win32/pandora_strutils.cc
@@ -27,6 +27,15 @@
 
 using namespace Pandora;
 
+/** 
+ * Removes heading and tailing blank spaces from a string.
+ *
+ * The blank spaces removed are " ", "\t", "\r" and "\n".
+ * 
+ * @param str String to be trimmed.
+ * 
+ * @return The trimmed string.
+ */
 string
 Pandora_Strutils::trim (const string str) {
         char *            delims = " \t\r\n";
@@ -47,11 +56,25 @@ Pandora_Strutils::trim (const string str) {
         return result;
 }
 
+/** 
+ * Transform an integer variable into a string.
+ * 
+ * @param i Integer to transform.
+ * 
+ * @return A string with the integer value.
+ */
 string
 Pandora_Strutils::inttostr (const int i) {
         return longtostr (i);
 }
 
+/** 
+ * Transform a long variable into a string.
+ * 
+ * @param i Long variable to transform
+ * 
+ * @return A string with the long value.
+ */
 string
 Pandora_Strutils::longtostr (const long i) {
 	std::ostringstream o;
@@ -61,6 +84,13 @@ Pandora_Strutils::longtostr (const long i) {
         return o.str();
 }
 
+/** 
+ * Transform a long variable into hexadecimal.
+ * 
+ * @param i Long variable to transform.
+ * 
+ * @return The hexadecimal value of the long variable.
+ */
 string
 Pandora_Strutils::longtohex (const long i) {
         std::ostringstream o;
@@ -69,6 +99,16 @@ Pandora_Strutils::longtohex (const long i) {
         return o.str();
 }
 
+/** 
+ * Tranform a string into a integer.
+ * 
+ * @param str String to convert.
+ * 
+ * @return The integer value of the string.
+ *
+ * @exception Invalid_Conversion throwed if the string has non-
+ *            decimal values.
+ */
 int
 Pandora_Strutils::strtoint (const string str) {
         int result;
@@ -79,6 +119,15 @@ Pandora_Strutils::strtoint (const string str) {
         return result;
 }
 
+/** 
+ * Replace every occurence of a pattern in a string with other substring.
+ * 
+ * @param in Objective string.
+ * @param pattern Pattern to be replaced.
+ * @param rep Substring that replace every occurence of the pattern.
+ * 
+ * @return The input string with all pattern occurence replaced.
+ */
 string
 Pandora_Strutils::strreplace (string in, string pattern, string rep) {
         int i = in.find (pattern);
@@ -107,9 +156,19 @@ isseparator (char c, char const * const wstr) {
         return (strchr (wstr, c) != NULL);
 }
 
+/** 
+ * Split a string into diferent tokens, divided by one or many
+ * field separators.
+ * 
+ * @param l Returned string list with every tokens. Must be initialized
+ *        before calling the function.
+ * @param s Input string.
+ * @param separators Field separators string. I.e. " \t" will separate
+ *        with every " " and "\t". Can be ommited and will be " \t\n".
+ */
 void
 Pandora_Strutils::stringtok (list<string> &l, string const &s, 
-                           char const * const separators) {
+                             char const * const separators) {
     
         const string::size_type  strsize = s.size();
         string::size_type        i = 0;
@@ -136,5 +195,3 @@ Pandora_Strutils::stringtok (list<string> &l, string const &s,
                 i = j + 1;
         }
 }
-
-
diff --git a/pandora_agents/win32/pandora_strutils.h b/pandora_agents/win32/pandora_strutils.h
index 10ec226187..d063e326f1 100644
--- a/pandora_agents/win32/pandora_strutils.h
+++ b/pandora_agents/win32/pandora_strutils.h
@@ -27,13 +27,22 @@
 
 using namespace std;
 
+/**
+ * Operations with strings.
+ */
 namespace Pandora_Strutils {
-        class Invalid_Conversion : Pandora::Pandora_Exception {};
-        
-        /* Strip blank spaces characters from the end and the beginning of a
-           string. */
+        /**
+	 * String super-class exception.
+	 */
+        class String_Exception : Pandora::Pandora_Exception {};
+	
+	/**
+	 * Exception throwed when a conversion could no be successful.
+	 */
+        class Invalid_Conversion : Pandora_Strutils::String_Exception {};
+	
         string trim        (const string str);
-        
+
         string inttostr    (const int i);
         string longtostr   (const long i);
         string longtohex   (const long i);
diff --git a/pandora_agents/win32/pandora_windows_service.cc b/pandora_agents/win32/pandora_windows_service.cc
index 1e1aa73a5d..0fc333afe3 100644
--- a/pandora_agents/win32/pandora_windows_service.cc
+++ b/pandora_agents/win32/pandora_windows_service.cc
@@ -38,18 +38,31 @@ using namespace Pandora_Strutils;
 
 string enabled_values[] = {"enabled", "1", "on", "yes", "si", "sí", "ok", ""};
 
+/** 
+ * Creates a new Pandora_Windows_Service.
+ * 
+ * @param svc_name Internal service name
+ * @param svc_display_name Service name that will appear in the
+ *        Windows service administration tool.
+ * @param svc_description Long description of the service.
+ */
 Pandora_Windows_Service::Pandora_Windows_Service (const char * svc_name,
-                                              const char * svc_display_name,
-                                              const char * svc_description)
+						  const char * svc_display_name,
+						  const char * svc_description)
         : Windows_Service (svc_name, svc_display_name, svc_description) {
 
-        this->setInitFunction ((void (Windows_Service::*) ()) &Pandora_Windows_Service::pandora_init);
-        this->setRunFunction ((void (Windows_Service::*) ()) &Pandora_Windows_Service::pandora_run);
+        this->setInitFunction ((void (Windows_Service::*) ())
+			       &Pandora_Windows_Service::pandora_init);
+        this->setRunFunction ((void (Windows_Service::*) ())
+			      &Pandora_Windows_Service::pandora_run);
         execution_number = 0;
         this->modules    = NULL;
         this->conf       = NULL;
 }
 
+/** 
+ * Destroys a Pandora_Windows_Service object.
+ */
 Pandora_Windows_Service::~Pandora_Windows_Service () {
         if (this->conf != NULL) {
                 delete this->conf;
@@ -86,7 +99,7 @@ Pandora_Windows_Service::pandora_init () {
         
         conf_file = Pandora::getPandoraInstallDir ();
         conf_file += "pandora_agent.conf";
-        this->conf = new Pandora_Agent_Conf (conf_file);
+        this->conf = new Pandora::Pandora_Agent_Conf (conf_file);
         this->modules = new Pandora_Module_List (conf_file);
 
         /* Get the interval value (in minutes) and set it to the service */
diff --git a/pandora_agents/win32/pandora_windows_service.h b/pandora_agents/win32/pandora_windows_service.h
index 7ac534fd73..83f7e18d9b 100644
--- a/pandora_agents/win32/pandora_windows_service.h
+++ b/pandora_agents/win32/pandora_windows_service.h
@@ -30,23 +30,28 @@
 
 using namespace std;
 
-class Pandora_Windows_Service : public Windows_Service {
-private:
-        SSH::Pandora_Ssh_Client *ssh_client;
-        Pandora_Agent_Conf      *conf;
-        Pandora_Module_List     *modules;
-        long                     execution_number;
-        string                   agent_name;
+namespace Pandora {
+	/**
+	 * Class to implement the Pandora Windows service.
+	 */
+	class Pandora_Windows_Service : public Windows_Service {
+	private:
+		SSH::Pandora_Ssh_Client              *ssh_client;
+		Pandora_Agent_Conf                   *conf;
+		Pandora_Modules::Pandora_Module_List *modules;
+		long                                  execution_number;
+		string                                agent_name;
         
-        TiXmlElement * getXmlHeader ();
+		TiXmlElement  *getXmlHeader ();
 	
-        void           pandora_run  ();
-        void           pandora_init ();
-public:
-        Pandora_Windows_Service     (const char * svc_name,
-                                     const char * svc_display_name,
-                                     const char * svc_description);
-        ~Pandora_Windows_Service    ();
-};
+		void           pandora_run  ();
+		void           pandora_init ();
+	public:
+		Pandora_Windows_Service     (const char * svc_name,
+					     const char * svc_display_name,
+					     const char * svc_description);
+		~Pandora_Windows_Service    ();
+	};
+}
 
 #endif
diff --git a/pandora_agents/win32/ssh/pandora_ssh_client.cc b/pandora_agents/win32/ssh/pandora_ssh_client.cc
index 20299682f9..0c182ae0a1 100644
--- a/pandora_agents/win32/ssh/pandora_ssh_client.cc
+++ b/pandora_agents/win32/ssh/pandora_ssh_client.cc
@@ -36,18 +36,37 @@ using namespace std;
 using namespace SSH;
 using namespace Pandora;
 
+/**
+ * Creates a Connection_Failed exception.
+ *
+ * @param e Numeric error code.
+ */
 Connection_Failed::Connection_Failed (int e) {
         err_number = e;
 }
 
+/**
+ * Get the numeric error code.
+ *
+ * @return The numeric code.
+ */
 int
 Connection_Failed::getError () {
         return err_number;
 }
+
+/**
+ * Creates a Scp_Failed exception.
+ *
+ * @param e Error description.
+ */
 Scp_Failed::Scp_Failed (char *e) {
         errmsg = strdup (e);
 }
 
+/**
+ * Creates a SSH client object and initialize its attributes.
+ */
 Pandora_Ssh_Client::Pandora_Ssh_Client () {
         sock        = 0;
         fingerprint = "";
@@ -56,6 +75,13 @@ Pandora_Ssh_Client::Pandora_Ssh_Client () {
         return;
 }
 
+/**
+ * Destroy a SSH client object.
+ *
+ * It also disconnect the client from the host if connected.
+ *
+ * @see disconnect
+ */
 Pandora_Ssh_Client::~Pandora_Ssh_Client () {
         if (session != NULL) {
                 disconnect ();
@@ -64,7 +90,11 @@ Pandora_Ssh_Client::~Pandora_Ssh_Client () {
         return;
 }
 
-/* Disconnects from remote host. It will close all open connections and channels. */
+/**
+ * Disconnects from remote host.
+ *
+ * It will close all open connections and channels.
+ */
 void
 Pandora_Ssh_Client::disconnect () {
         if (channel != NULL) {
@@ -142,28 +172,22 @@ Pandora_Ssh_Client::newConnection (const string host, const int port) {
         fingerprint.erase (fingerprint.length () - 1, 2);
 }
 
-/* Connects to specified host and port using a username and a password */
-void
-Pandora_Ssh_Client::connectWithUserPass (const string host, const int port,
-                                       const string username, const string passwd) {
-        try {
-                newConnection (host, port);
-        } catch (Session_Already_Opened e) {
-        }
-        
-        if (session != NULL) {
-                if (libssh2_userauth_password (session, username.c_str (),
-                                               passwd.c_str ())) {
-                        disconnect ();
-                        throw Authentication_Failed ();
-        	}
-        }
-	return;
-}
-
-/* Connects to specified host and port using a username and a public/private key.
+/**
+ * Connects to specified host and port using a username and a public/private key.
+ *
  * The keys are the filename that contains the public and the private keys.
- * The passphrase is the password for these keys. */
+ * The passphrase is the password for these keys.
+ *
+ * @param host Remote host to connect to.
+ * @param port Remote port to connect to.
+ * @param username Remote host username to connect to.
+ * @param filename_pubkey Path to the public key file.
+ * @param filename_privkey Path to the private key file.
+ * @param passphrase Passphrase of the keys.
+ *
+ * @exception Authentication_Failed throwed when the atuhentication could not
+ *            be done.
+ */
 void
 Pandora_Ssh_Client::connectWithPublicKey (const string host, const int port,
                                         const string username, const string filename_pubkey,
@@ -186,13 +210,28 @@ Pandora_Ssh_Client::connectWithPublicKey (const string host, const int port,
 	return;
 }
                              
-/* Copy a file using a SSH connection (scp).
+/**
+ * Copy a file using a SSH connection via scp method.
+ *
  * The function receives a filename in the local filesystem and copies all
  * its content to the remote host. The remote filename will be the 
  * basename of the local file and will be copied in the remote actual
- * directory. */
+ * directory.
+ *
+ * @param remote_filename Remote path to copy the local file in.
+ * @param filename Path to the local file.
+ *
+ * @exception Session_Not_Opened Throwed if the session was not opened before
+ *           calling this function.
+ * @exception Pandora_File::File_Not_Found Throwed if the local file does not
+ *            exists.
+ * @exception Channel_Error Throwd if there was an error with the SSH channel.
+ * @exception Scp_Failed Throwed if the scp operations failed when copying the
+ *            file.
+ */
 void
-Pandora_Ssh_Client::scpFileFilename (const string remote_filename, const string filename) {
+Pandora_Ssh_Client::scpFileFilename (const string remote_filename,
+				     const string filename) {
         LIBSSH2_CHANNEL *scp_channel;
         size_t           to_send, sent;
         char            *errmsg;
@@ -207,7 +246,7 @@ Pandora_Ssh_Client::scpFileFilename (const string remote_filename, const string
         } catch (Pandora_File::File_Not_Found e) {
                 pandoraLog ("Pandora_Ssh_Client: File %s not found",
                           filename.c_str());
-                return;
+		throw e;
         }
         
         to_send = buffer.length ();
@@ -243,6 +282,14 @@ Pandora_Ssh_Client::scpFileFilename (const string remote_filename, const string
         libssh2_channel_free (scp_channel);
 }
 
+/** 
+ * Get the fingerprint of the remote host.
+ * 
+ * The finger print is a unical identifier of the host. It's a method
+ * to ensure that the host is the host we supposed.
+ *
+ * @return The fingerprint of the remote host.
+ */
 string
 Pandora_Ssh_Client::getFingerprint () {
         return this->fingerprint;    
diff --git a/pandora_agents/win32/ssh/pandora_ssh_client.h b/pandora_agents/win32/ssh/pandora_ssh_client.h
index 877d0b7454..d87813f3ca 100644
--- a/pandora_agents/win32/ssh/pandora_ssh_client.h
+++ b/pandora_agents/win32/ssh/pandora_ssh_client.h
@@ -27,41 +27,81 @@
 
 using namespace std;
 
+/**
+ * SSH connection classes.
+ */
 namespace SSH {
-        /* SSH Client exceptions */
-        class Session_Already_Opened : public Pandora::Pandora_Exception {
+       /**
+	 * A SSH super-class exception.
+	 */
+        class SSH_Exception          : public Pandora::Pandora_Exception {
+        };
+	
+        /**
+	 * A SSH session has already be opened and a new
+	 * connection is attemped without closing it.
+	 */
+        class Session_Already_Opened : public SSH::SSH_Exception {
         };
 
-        class Session_Not_Opened     : public Pandora::Pandora_Exception {
+	/**
+	 * A SSH operations is tried and a session
+	 * has still not be opened.
+	 */
+        class Session_Not_Opened     : public SSH::SSH_Exception {
         };
 
-        class Session_Error          : public Pandora::Pandora_Exception {
+	/**
+	 * There were unknown problems with the SSH session.
+	 */
+        class Session_Error          : public SSH::SSH_Exception {
         };
-                        
-        class Authentication_Failed  : public Pandora::Pandora_Exception {
+	
+	/**
+	 * The SSH authentication fails when connecting.
+	 */
+        class Authentication_Failed  : public SSH::SSH_Exception {
         };
 
-        class Resolv_Failed          : public Pandora::Pandora_Exception {
+	/**
+	 * The host could not be resolved.	   
+	 */
+        class Resolv_Failed          : public SSH::SSH_Exception {
         };
 
-        class Socket_Error           : public Pandora::Pandora_Exception {
+	/**
+	 * Unknown socket error.
+	 */
+        class Socket_Error           : public SSH::SSH_Exception {
         };
-        
-        class File_Error             : public Pandora::Pandora_Exception {
+
+	/**
+	 * An error happened with a file.
+	 */
+        class File_Error             : public SSH::SSH_Exception {
         };
-        
-        class Channel_Error          : public Pandora::Pandora_Exception {
+
+	/**
+	 * An error occured with the SSH channel.
+	 */
+        class Channel_Error          : public SSH::SSH_Exception {
         };
-        
-        class Connection_Failed      : public Pandora::Pandora_Exception {
+
+	/**
+	 * Connection failed with the host.
+	 */
+        class Connection_Failed      : public SSH::SSH_Exception {
         private:
                 int err_number;
         public:
                 Connection_Failed (int e);
                 int getError ();
         };
-        
-        class Scp_Failed             : public Pandora::Pandora_Exception {
+
+	/**
+	 * The scp operation failed due to some unknow error.
+	 */	
+        class Scp_Failed             : public SSH::SSH_Exception {
         private:
                 char *errmsg;
         public:
@@ -69,7 +109,9 @@ namespace SSH {
                 ~Scp_Failed () { Pandora::pandoraFree (errmsg); };
         };
         
-        /* SSH Client class */
+        /**
+	 * Client to perform a SSH connection to a host.
+	 */
         class Pandora_Ssh_Client {
         private:
                 int              sock;
@@ -82,21 +124,11 @@ namespace SSH {
                 Pandora_Ssh_Client          ();
                 ~Pandora_Ssh_Client         ();
             
-                /* Connects to specified host and port using a username and a password 
-                 *
-                 * Throws:  Authentication_Failed */
-                void connectWithUserPass  (const string host, const int port,
-                                           const string username, const string passwd);
-                /* Connects to specified host and port using a username and a public/private key.
-                 * The keys are the filename that contains the public and the private keys.
-                 * The passphrase is the password for these keys.
-                 *
-                 * Throws:  Authentication_Failed */
                 void connectWithPublicKey (const string host, const int port,
                                            const string username, const string filename_pubkey,
                                            const string filename_privkey, const string passphrase);
                 
-                /* Disconnects from remote host. It will close all open connections and channels. */
+            
                 void disconnect           ();
                                              
                 /* Copy a file using a SSH connection (scp).
diff --git a/pandora_agents/win32/ssh/pandora_ssh_test.cc b/pandora_agents/win32/ssh/pandora_ssh_test.cc
index 4135af47cd..bc0ba5a468 100644
--- a/pandora_agents/win32/ssh/pandora_ssh_test.cc
+++ b/pandora_agents/win32/ssh/pandora_ssh_test.cc
@@ -26,21 +26,47 @@
 using namespace std;
 using namespace SSH;
 
+/** 
+ * Creates a Pandora_SSH_Test.
+ *
+ * It will read the configuration file and prepares
+ * all the information to perform a SSH test.
+ */
 Pandora_SSH_Test::Pandora_SSH_Test () {
         string conf_file;
         
         conf_file = Pandora::getPandoraInstallDir ();
         conf_file += "pandora_agent.conf";
-        conf = new Pandora_Agent_Conf (conf_file);
+        conf = new Pandora::Pandora_Agent_Conf (conf_file);
         
         ssh_client = new SSH::Pandora_Ssh_Client ();
 }
 
+/** 
+ * Deletes a Pandora_SSH_Test object.
+ */
 Pandora_SSH_Test::~Pandora_SSH_Test () {
         delete conf;
         delete ssh_client;
 }
 
+/** 
+ * Executes a SSH test.
+ *
+ * It will generate a lot of output to the stdout.
+ *
+ * @exception Authentication_Failed Throwed if the authentication process
+ *            failed when connecting to the host.
+ * @exception Socket_Error Throwed when something goes bad with the sockets.
+ * @exception Resolv_Failed Throwed when the remote host could not be resolved
+ *            to a valid IP.
+ * @exception Connection_Failed Throwed if the TCP/IP connection to the host
+ *            failed or could not be done. It includes timeouts, route failures,
+ *            etc
+ * @exception Session_Error Throwed if there was problem with the SSH session.
+ * @exception Pandora::Pandora_Exception Throwed if there was an unespecified
+ *            error.
+ */
 void
 Pandora_SSH_Test::test () {
         string            pubkey_file, privkey_file, tmp_filename;
@@ -107,7 +133,7 @@ Pandora_SSH_Test::test () {
         saved = doc->SaveFile();
         delete doc;
         if (!saved) {
-                Pandora_Exception e;
+                Pandora::Pandora_Exception e;
                 cout << "Error when saving the XML in " << tmp_filepath << endl;
                 cout << "Check the configuration file" << endl;
                 throw e;
@@ -131,7 +157,7 @@ Pandora_SSH_Test::test () {
                 cout << "Check the network configuration." << endl;
                 try {
                         Pandora_File::removeFile (tmp_filepath);
-                } catch (Pandora_Exception e) {
+                } catch (Pandora::Pandora_Exception e) {
                 }
                 throw e;
         } catch (Scp_Failed e) {
@@ -140,10 +166,10 @@ Pandora_SSH_Test::test () {
                 cout << "Check the network configuration." << endl;
                 try {
                         Pandora_File::removeFile (tmp_filepath);
-                } catch (Pandora_Exception e) {
+                } catch (Pandora::Pandora_Exception e) {
                 }
                 throw e;
-        } catch (Pandora_Exception e) {
+        } catch (Pandora::Pandora_Exception e) {
                 ssh_client->disconnect();
                 cout << "An unhandled exception happened." << endl;
                 throw e;
diff --git a/pandora_agents/win32/ssh/pandora_ssh_test.h b/pandora_agents/win32/ssh/pandora_ssh_test.h
index 6ae69d3583..7af3a45138 100644
--- a/pandora_agents/win32/ssh/pandora_ssh_test.h
+++ b/pandora_agents/win32/ssh/pandora_ssh_test.h
@@ -25,10 +25,16 @@
 #include "../pandora_agent_conf.h"
 
 namespace SSH {
+	/**
+	 * Class to perform a test of the SSH configuration.
+	 *
+	 * An object of this class will read the configuration file
+	 * and copy a blank xml file into remote server path.
+	 */
         class Pandora_SSH_Test {
         private:
-                Pandora_Ssh_Client *ssh_client;
-                Pandora_Agent_Conf *conf;
+                Pandora_Ssh_Client          *ssh_client;
+                Pandora::Pandora_Agent_Conf *conf;
         public:
                 Pandora_SSH_Test  ();
                 ~Pandora_SSH_Test ();
diff --git a/pandora_agents/win32/windows/pandora_windows_info.cc b/pandora_agents/win32/windows/pandora_windows_info.cc
index 64d6fb2ad7..306edc7e61 100644
--- a/pandora_agents/win32/windows/pandora_windows_info.cc
+++ b/pandora_agents/win32/windows/pandora_windows_info.cc
@@ -26,26 +26,51 @@
 using namespace Pandora_Strutils;
 using namespace Pandora_Windows_Info;
 
+/** 
+ * Get the name of the running operating system.
+ * 
+ * @return The name of the operating system.
+ */
 string
 Pandora_Windows_Info::getOSName () {
         return Pandora_Wmi::getOSName ();
 }
 
+/** 
+ * Get the versioof the running operating system.
+ * 
+ * @return The version of the operating system.
+ */
 string
 Pandora_Windows_Info::getOSVersion () {
         return Pandora_Wmi::getOSVersion ();
 }
 
+/** 
+ * Get the build of the running operating system.
+ * 
+ * @return The build of the operating system.
+ */
 string
 Pandora_Windows_Info::getOSBuild () {
         return Pandora_Wmi::getOSBuild();
 }
 
+/** 
+ * Get the system name of the running operating system.
+ * 
+ * @return The system name of the operating system.
+ */
 string
 Pandora_Windows_Info::getSystemName () {
         return Pandora_Wmi::getSystemName ();
 }
 
+/** 
+ * Get the system path of the running operating system.
+ * 
+ * @return The system path of the operating system.
+ */
 string
 Pandora_Windows_Info::getSystemPath () {
 	char buffer[MAX_PATH];
diff --git a/pandora_agents/win32/windows/pandora_windows_info.h b/pandora_agents/win32/windows/pandora_windows_info.h
index 169effe31f..7abb9e5f60 100644
--- a/pandora_agents/win32/windows/pandora_windows_info.h
+++ b/pandora_agents/win32/windows/pandora_windows_info.h
@@ -30,6 +30,9 @@
 using namespace Pandora;
 using namespace std;
 
+/**
+ * Windows information functions.
+ */
 namespace Pandora_Windows_Info {
         
         string getOSName     ();
diff --git a/pandora_agents/win32/windows/pandora_wmi.cc b/pandora_agents/win32/windows/pandora_wmi.cc
index ba58dae1a5..1b1b53d121 100644
--- a/pandora_agents/win32/windows/pandora_wmi.cc
+++ b/pandora_agents/win32/windows/pandora_wmi.cc
@@ -45,6 +45,13 @@ getWmiStr (LPCWSTR computer) {
 	return wmi_str;
 }
 
+/** 
+ * Check if a process is running.
+ * 
+ * @param process_name Name of the process with extension.
+ * 
+ * @return Number of instances of the process running.
+ */
 int
 Pandora_Wmi::isProcessRunning (string process_name) {
         CDhInitialize init;
@@ -83,6 +90,14 @@ Pandora_Wmi::isProcessRunning (string process_name) {
 	return result;
 }
 
+/** 
+ * Check if a Windows service is running.
+ * 
+ * @param service_name Internal name of the service to check.
+ * 
+ * @retval 1 The service is running
+ * @retval 0 The service is stopped
+ */
 int
 Pandora_Wmi::isServiceRunning (string service_name) {
         CDhInitialize init;
@@ -128,6 +143,13 @@ Pandora_Wmi::isServiceRunning (string service_name) {
 	return 0;
 }
 
+/** 
+ * Get the free space in a logical disk drive.
+ * 
+ * @param disk_id Disk drive letter (C.
+ * 
+ * @return Free space amount in MB.
+ */
 long
 Pandora_Wmi::getDiskFreeSpace (string disk_id) {
 	CDhInitialize init;
@@ -162,7 +184,7 @@ Pandora_Wmi::getDiskFreeSpace (string disk_id) {
 				try {
 					space = Pandora_Strutils::strtoint (space_str);
 				} catch (Pandora_Exception e) {
-					throw Pandora_Wmi_Error ();
+					throw Pandora_Wmi_Exception ();
 				}
 				
 				return space / 1024 / 1024;
@@ -173,9 +195,16 @@ Pandora_Wmi::getDiskFreeSpace (string disk_id) {
 		pandoraLog ("getDiskFreeSpace error. %s", errstr.c_str ());
 	}
         
-	throw Pandora_Wmi_Error ();
+	throw Pandora_Wmi_Exception ();
 }
 
+/** 
+ * Get the CPU usage percentage in the last minutes.
+ * 
+ * @param cpu_id CPU identifier.
+ * 
+ * @return The usage percentage of the CPU.
+ */
 int
 Pandora_Wmi::getCpuUsagePercentage (int cpu_id) {
 	CDhInitialize init;
@@ -216,10 +245,14 @@ Pandora_Wmi::getCpuUsagePercentage (int cpu_id) {
 		pandoraLog ("getCpuUsagePercentage error. %s", errstr.c_str ());
 	}
         
-	throw Pandora_Wmi_Error ();
+	throw Pandora_Wmi_Exception ();
 }
 
-
+/** 
+ * Get the amount of free memory in the system
+ *
+ * @return The amount of free memory in MB.
+ */
 long
 Pandora_Wmi::getFreememory () {
 	CDhInitialize init;
@@ -247,9 +280,14 @@ Pandora_Wmi::getFreememory () {
 		pandoraLog ("getFreememory error. %s", errstr.c_str ());
 	}
         
-	throw Pandora_Wmi_Error ();	
+	throw Pandora_Wmi_Exception ();	
 }
 
+/**
+ * Get the name of the operating system.
+ * 
+ * @return The name of the operating system.
+ */
 string
 Pandora_Wmi::getOSName () {
         CDhInitialize init;
@@ -282,6 +320,11 @@ Pandora_Wmi::getOSName () {
 	return ret;
 }
 
+/** 
+ * Get the version of the operating system.
+ * 
+ * @return The version of the operaing system.
+ */
 string
 Pandora_Wmi::getOSVersion () {
         CDhInitialize init;
@@ -314,6 +357,11 @@ Pandora_Wmi::getOSVersion () {
 	return ret;
 }
 
+/** 
+ * Get the build of the operating system.
+ * 
+ * @return The build of the operating system.
+ */
 string
 Pandora_Wmi::getOSBuild () {
         CDhInitialize init;
@@ -346,6 +394,11 @@ Pandora_Wmi::getOSBuild () {
 	return ret;
 }
 
+/** 
+ * Get the system name of the operating system.
+ * 
+ * @return The system name of the operating system.
+ */
 string
 Pandora_Wmi::getSystemName () {
         CDhInitialize init;
diff --git a/pandora_agents/win32/windows/pandora_wmi.h b/pandora_agents/win32/windows/pandora_wmi.h
index 21f2dd785e..8700715919 100644
--- a/pandora_agents/win32/windows/pandora_wmi.h
+++ b/pandora_agents/win32/windows/pandora_wmi.h
@@ -29,8 +29,14 @@
 using namespace Pandora;
 using namespace std;
 
+/**
+ * Operations with the Windows Management Instrumentation (WMI)
+ */
 namespace Pandora_Wmi {
-        class Pandora_Wmi_Error : public Pandora_Exception { };
+	/**
+	 * Exception super-class when doing a WMI operation.
+	 */
+        class Pandora_Wmi_Exception : public Pandora_Exception { };
 	
         int    isProcessRunning      (string process_name);
 	int    isServiceRunning      (string service_name);
diff --git a/pandora_agents/win32/windows_service.cc b/pandora_agents/win32/windows_service.cc
index 92cdf022d6..e3f12f1f71 100644
--- a/pandora_agents/win32/windows_service.cc
+++ b/pandora_agents/win32/windows_service.cc
@@ -40,12 +40,24 @@ static void  SetWindowsServiceStatus             (DWORD dwCurrentState,
                                                   DWORD dwWaitHint);
 static void  ErrorStopService                    (LPTSTR lpszAPI);
 
+/**
+ * Set the values of the service to run.
+ *
+ * All the attributes are set to NULL.
+ */
 Windows_Service::Windows_Service () {
         service_name          = NULL;
         service_display_name  = NULL;
         service_description   = NULL;
 }
-
+/** 
+ * Set the values of the service to run.
+ *
+ * @param svc_name Internal service name.
+ * @param svc_display_name Service name to display in the Windows
+ *        service administration utility.
+ * @param svc_description Long description of the service.
+ */
 Windows_Service::Windows_Service (const char * svc_name,
                                   const char * svc_display_name,
                                   const char * svc_description) {
@@ -59,21 +71,44 @@ Windows_Service::Windows_Service (const char * svc_name,
         current_service       = this;
 }
 
+/** 
+ * Destroy the service
+ */
 Windows_Service::~Windows_Service () {
 }
 
+/**
+ * Set the function to run on service execution.
+ *
+ * @param f Pointer to execution function.
+ */
 void
 Windows_Service::setRunFunction (void (Windows_Service::*f) ()) {
         run_function = f;
         current_service->run_function = f;
 }
 
+/**
+ * Set the function to initialize the service.
+ *
+ * This functions is executed before the run function.
+ *
+ * @param f Pointer to init function.
+ */
 void
 Windows_Service::setInitFunction (void (Windows_Service::*f) ()) {
         init_function = f;
         current_service->init_function = f;
 }
 
+/** 
+ * Exec the run function.
+ * 
+ * If the sleep_time is set to a greater value than 0, then the
+ * function will execute infinitely.
+ * Notice: This function does not have to be called from the main
+ * function
+ */
 void
 Windows_Service::execRunFunction () {
         if (run_function != NULL) {
@@ -86,6 +121,9 @@ Windows_Service::execRunFunction () {
         }
 }
 
+/** 
+ * Exec the init function.
+ */
 void
 Windows_Service::execInitFunction () {
         if (init_function != NULL) {
@@ -93,17 +131,36 @@ Windows_Service::execInitFunction () {
         }
 }
 
+/** 
+ * Get the internal service name.
+ * 
+ * @return The internal service name.
+ */
 LPSTR
 Windows_Service::getServiceName () {
         return service_name;
 }
 
+/** 
+ * Set the time between executions.
+ *
+ * If it's set to 0 (default value), the service will execute
+ * the run function once. Else it's executed infinitely every
+ * s seconds
+ *
+ * @param s Seconds between executions.
+ */
 void
 Windows_Service::setSleepTime (unsigned int s) {
         sleep_time = s;
         current_service->sleep_time = sleep_time;
 }
 
+/** 
+ * Install the service in the Windows services system.
+ * 
+ * @param application_binary_path Path to binary file.
+ */
 void
 Windows_Service::install (LPCTSTR application_binary_path) { 
         SC_HANDLE           sc_manager;
@@ -225,6 +282,9 @@ Windows_Service::install (LPCTSTR application_binary_path) {
         CloseServiceHandle (sc_manager);
 } 
 
+/** 
+ * Uninstall the service from the system.
+ */
 void
 Windows_Service::uninstall () { 
         SC_HANDLE sc_manager, sc_service;
@@ -336,8 +396,13 @@ Windows_Service::uninstall () {
 } 
 
 
-/* this is the entry point which is called from main() */
-int
+/** 
+ * Run the service.
+ *
+ * This function must be called from main function to
+ * start the service when started by Windows services system.
+ */
+void
 Windows_Service::run () {
         SERVICE_TABLE_ENTRY ste_dispatch_table[] = 
         { 
@@ -353,8 +418,6 @@ Windows_Service::run () {
                 memset (msg, sizeof (msg), '\0');
                 svc_format_message (msg, sizeof (msg));
         }
-
-        return (0);
 } 
 
 static void WINAPI
diff --git a/pandora_agents/win32/windows_service.h b/pandora_agents/win32/windows_service.h
index 20ba606e67..c97c4eb71a 100644
--- a/pandora_agents/win32/windows_service.h
+++ b/pandora_agents/win32/windows_service.h
@@ -25,57 +25,44 @@
 #include <windows.h>
 #include <winsvc.h>  /* for Service stuff */
 
+/**
+ * Class to install and use a Windows service easily.
+ *
+ * If you want to use it, create a child class that
+ * set the init_function and run_function. Then use
+ * install function to perform the service installation
+ * and the run function on the main function to start it.
+ * Notice: A program can have only one object of this class.
+ */
 class Windows_Service {
-protected:
+private:
         char     *service_name;
         char     *service_display_name;
         char     *service_description;
         HANDLE    stop_event;
         int       sleep_time;
         SC_HANDLE sc_service;
-        /* Pointer to functions that will run the service */
+        
         void (Windows_Service::*run_function)  ();
         void (Windows_Service::*init_function) ();
 public:
-        Windows_Service ();
+        Windows_Service        ();
         
-        /* Set the values of the service to run.
-           Notice: A program can have ONLY ONE object of this class. */
-        Windows_Service  (const char * svc_name, const char * svc_display_name,
-                          const char * svc_description);
+        Windows_Service        (const char * svc_name,
+			        const char * svc_display_name,
+			        const char * svc_description);
         
-        ~Windows_Service ();
+        ~Windows_Service       ();
         
-        /* Install the service in the Windows registry. */
-        void install    (LPCTSTR application_binary_path);
-        
-        /* Uninstall the service, removint the key in the Windows registry. */
-        void uninstall  ();
-        
-        /* Run the service, which has to be installed previously.
-         * The service will execute the function indicated in the 
-         * setRunFunction */
-        int  run              ();
-        
-        /* Set the function that will be called on service start. This
-         * is called the "run function" */
-        void setRunFunction (void (Windows_Service::*f) ());
-        
-        /* Set the function that will be called on service init.  This
-         * is called the "init function" */
-        void setInitFunction (void (Windows_Service::*f) ());
+        void  install          (LPCTSTR application_binary_path);
+        void  uninstall        ();
+        void  run              ();
+        void  setRunFunction   (void (Windows_Service::*f) ());
+        void  setInitFunction  (void (Windows_Service::*f) ());
+        LPSTR getServiceName   ();
+        void  setSleepTime     (unsigned int s);
 
-        /* Calls the functions. There's no need to be called from the outside of this
-         * class. They are used in a internal method because of another Windows 
-         * matter... */
-        void execRunFunction ();
-        void execInitFunction ();
-        
-        LPSTR getServiceName  ();
-        
-        /* Set the time that the service will sleep between each execution of
-         * the work funtion. If this value is not set, the service will run this
-         * function once. */
-        void setSleepTime     (unsigned int s);
+	void  execRunFunction  ();
+        void  execInitFunction ();
 };
 #endif /* __WINDOWS_SERVICE_H__ */