using System;
using System.Collections.Generic;
using System.Text;
using System.Management;
using InsomniaSoftware.Server;
using InsomniaSoftware.Server.Sources;
using InsomniaSoftware.Server.Tools;
namespace SystemBrowser
{
class SystemInformation
{
static string pageHead = "<html><head><title>System information - query window</title><style type=\"text/css\"><!--.spacer { position: relative; left: 30px; } .border { border: solid 2px gray; }--></style></head>\n<body>";
static KeyValuePair<string, string>[] sysInfoClasses = { new KeyValuePair<string, string>("BIOS", "Win32_BIOS"),
new KeyValuePair<string, string>("Processor", "Win32_Processor"),
new KeyValuePair<string, string>("Memory", "Win32_PhysicalMemory"),
new KeyValuePair<string, string>("Logical disks", "Win32_LogicalDisk"),
new KeyValuePair<string, string>("Video controller", "Win32_VideoController"),
new KeyValuePair<string, string>("Network adapters", "Win32_NetworkAdapter") };
public static ObjectType GetSystemInformation(string subPath, HttpRequest request, object userData, out Source source)
{
source = null;
Session sess = null;
try
{
//Load user's session
sess = request.server.sessionManager.GetSession(request.GetParameter("sid").ToString());
}
catch { }
if (!((Login.User)sess.GetValue("user")).systemInformationAllowed)
{
//User is not allowed to use this feature
source = FileSource.Get("../pages/accessnotpermitted.html");
return ObjectType.File;
}
string query = "";
HttpParameter queryParam = request.GetParameter("query");
if(queryParam != null)
query = queryParam.ToString();
string result = "";
if (query.Length > 0)
{
result += "<b>Query:</b> " + query + "<br><br>";
try
{
WqlObjectQuery wqlQuery = new WqlObjectQuery(query);
ManagementObjectSearcher searcher = new ManagementObjectSearcher(wqlQuery);
foreach (ManagementObject disk in searcher.Get())
{
result += "<div class=\"border\">";
try
{
result += "<b>" + disk.ToString() + "</b><br>\n<div class=\"spacer\">";
foreach (PropertyData curData in disk.Properties)
{
try
{
result += "<i>" + HttpTools.EncodeHtmlString(curData.Name) + ":</i> " + (curData.Value != null ? HttpTools.EncodeHtmlString(curData.Value.ToString()) : null) + "<br>\n";
}
catch { }
}
}
catch { }
result += "</div></div>";
}
}
catch(Exception e)
{
result += "Query exception: " + e.Message + " @ " + e.StackTrace;
}
result += "<br><br>";
}
string pageBottom = "<b>Predefined queries:</b><ul>";
foreach(KeyValuePair<string, string> curPair in sysInfoClasses)
{
string linkQueryStr = "SELECT * FROM " + curPair.Value;
pageBottom += "<li><a href=\"" + request.requestedURL + "?sid=" + sess.id + "&query=" + HttpTools.EncodeHttpString(linkQueryStr, Encoding.UTF8) + "\">" + curPair.Key + "</a></li>";
}
pageBottom += "</ul><br><br><form action=\"" + request.requestedURL + "\" method=\"get\"><b>User-defined WQL query:</b><br><br><input type=\"hidden\" name=\"sid\" value=\"" + sess.id + "\"><input type=\"text\" name=\"query\" size=\"80\"><br><input type=\"submit\" value=\"Start query!\"></form></body></html>";
source = new BinarySource(ASCIIEncoding.ASCII.GetBytes(pageHead + result + pageBottom), ContentType.FromType(ContentType.Type.Html));
return ObjectType.File;
}
}
}