var DrvTypeLocalDisk = 3; var g_dictDrivers = null; //dictionary. key = deviceID, item = issigned var BIOSHelp = ""; TSDriveLink = TSDrive = TSHWareLink = TSHWare = BIOSHelpLink = BIOSHelp; //WinUpdate, Defrag & CleanUp defined in commonFunc.js var WinUpdateLink = "" + TAG_WINUPDATE + ""; var defragLink = "" + TAG_DEFRAG + ""; var cleanupLink = "" + TAG_CLEANUP + ""; var HCLLink = "" + TAG_HCLDESC + ""; function SetHelpLinks() { var WinFolderPath = GetWinFolderPath(); //init some vars BIOSHelp = "ms-its:" + WinFolderPath + "\\Help\\msinfo32.chm::/msinfo_system_summary.htm"; BIOSHelpLink = "" + TAG_VIEWHELP + ""; MemHelpLink = BIOSHelpLink; TSHWare = "hcp://Help/tshoot/hwcon.htm"; TSHWareLink = "" + TAG_TSHOOTER + ""; TSDrive = "hcp://Help/tshoot/tsdrive.htm"; TSDriveLink = "" + TAG_TSHOOTER + ""; } //traverse the list and display each item. function displayTableSegment(outerDiv, head) { var strMsg = "
%arg1%
"; var strHTML = ""; var cnt = 1; var tableElement = null; if (document.all[outerDiv].length == null) tableElement = document.all[outerDiv]; else tableElement = document.all[outerDiv][0]; if (!head) tableElement.outerHTML = strMsg.replace(/%arg1%/, TAG_NONE); else { if(head.error) tableElement.outerHTML = strMsg.replace(/%arg1%/, head.error); else { var curr = head; while (curr!=null) { if (document.all[outerDiv].length == null) tableElement = document.all[outerDiv]; else tableElement = document.all[outerDiv][0]; if (cnt%2 == 0) { if (tableElement.all["tr_" + outerDiv]) tableElement.all["tr_" + outerDiv].className = "sys-table-cell-bgcolor1"; cnt = 1; } else { if (tableElement.all["tr_" + outerDiv]) tableElement.all["tr_" + outerDiv].className = "sys-table-cell-bgcolor2"; cnt++; } curr.show(tableElement); strHTML += tableElement.outerHTML; curr = curr.getNext(); } if(tableElement) tableElement.outerHTML = strHTML; } } } function IsSigned(id) { var bSigned = null; //unknown if(g_dictDrivers.Exists(id)) { var bSigned = g_dictDrivers.Item(id); } return bSigned; } function GetDriverInfo() { g_dictDrivers = new ActiveXObject("Scripting.Dictionary"); var loc = wbemlocator; var svcs = loc.ConnectServer(remoteServer); svcs.Security_.impersonationlevel = wbemImpersonationLevelImpersonate; var strQuery = "Select DeviceID, IsSigned From Win32_PnPSignedDriver"; var colDevices = new Enumerator(svcs.ExecQuery(strQuery)); for(; !colDevices.atEnd(); colDevices.moveNext()) { var device = colDevices.item(); try { g_dictDrivers.add(device.DeviceID, device.IsSigned); } catch(e) { //do nothing } } } //Just a wrapper for an error message. function MsinfoErrObject(msg) { this.error = msg; } //////////////////////// //myOS function myOSShow(tableElement) { if(tableElement) { tableElement.all["name"].innerHTML = this.m_name; tableElement.all["created"].innerHTML = this.m_created; tableElement.all["help"].innerHTML = this.m_help; } else displayTableSegment("os", this.m_head); } function myOS() { this.m_name = null; this.m_created = null; this.m_help = null; this.m_next = null; this.setNext = new Function("ptr", "this.m_next = ptr;"); this.getNext = new Function("return this.m_next;"); this.show = myOSShow; var loc = wbemlocator; var svcs = loc.ConnectServer(remoteServer); svcs.Security_.impersonationlevel = wbemImpersonationLevelImpersonate; var cls = svcs.get("Win32_OperatingSystem"); var insts = new Enumerator(cls.Instances_()) if(!insts.atEnd()) { var inst = insts.item(); this.m_name = (inst.Caption ? inst.Caption : TAG_UNKNOWN); this.m_created = (inst.InstallDate ? getDateTime(inst.InstallDate, true) : TAG_UNKNOWN); this.m_help = WinUpdateLink; this.m_head = this; } }//EO myOS /////////////////// //////////////////////// //myBIOS function myBIOSShow(tableElement) { if(tableElement) { tableElement.all["name"].innerHTML = this.m_name; tableElement.all["created"].innerHTML = this.m_created; tableElement.all["help"].innerHTML = this.m_help; } else displayTableSegment("bios", this.m_head); } function myBIOS() { this.m_name = null; this.m_created = null; this.m_help = null; this.m_next = null; this.setNext = new Function("ptr", "this.m_next = ptr;"); this.getNext = new Function("return this.m_next;"); this.show = myBIOSShow; var loc = wbemlocator; var svcs = loc.ConnectServer(remoteServer); svcs.Security_.impersonationlevel = wbemImpersonationLevelImpersonate; var cls = svcs.get("Win32_BIOS"); var insts = new Enumerator(cls.Instances_()) if(!insts.atEnd()) { var inst = insts.item(); this.m_name = TAG_BIOS; this.m_created = (inst.ReleaseDate ? getDateTime(inst.ReleaseDate, true) : TAG_UNKNOWN); this.m_help = BIOSHelpLink; this.m_head = this; } }//EO myBIOS /////////////////// ////////////////////// //myComponent function myComponentShow(tableElement) { tableElement.all["name"].innerHTML = this.m_name; tableElement.all["status"].innerHTML = this.m_status; tableElement.all["update"].innerHTML = this.m_update; tableElement.all["help"].innerHTML = this.m_help; } function myComponent(genericName) { this.m_name = null; this.m_status = null; this.m_update = null; this.m_help = null; this.m_next = null; this.setNext = new Function("ptr", "this.m_next = ptr;"); this.getNext = new Function("return this.m_next;"); this.show = myComponentShow; var strQuery; switch (genericName) { case "video": this.m_name = TAG_VIDEOCARD; strQuery = "Select Name, PNPDeviceID From Win32_VideoController"; break; case "sound": this.m_name = TAG_SOUNDCARD; strQuery = "Select Name, PNPDeviceID From Win32_SoundDevice"; break; case "usb": this.m_name = TAG_USBCTRLR; strQuery = "Select Name, PNPDeviceID From Win32_USBController"; break; case "scsi": this.m_name = TAG_SCSIADAPTR; strQuery = "";//PENDING break; case "network": this.m_name = TAG_NWCARD; var loc = wbemlocator; var svcs = loc.ConnectServer(remoteServer); svcs.Security_.impersonationlevel = wbemImpersonationLevelImpersonate; strQuery = "Select * From Win32_NetworkAdapterConfiguration Where IPEnabled = TRUE"; var insts = new Enumerator(svcs.ExecQuery(strQuery)) for(; !insts.atEnd(); insts.moveNext()) { var inst = insts.item(); strQuery = "Associators of {Win32_NetworkAdapterConfiguration.Index=" + inst.Index + "}"; var colNetworkAdapter = new Enumerator(svcs.ExecQuery(strQuery)); if (!colNetworkAdapter.atEnd()) { var networkAdapter = colNetworkAdapter.item(); var issigned = IsSigned(networkAdapter.PNPDeviceID); this.m_status = issigned ? TAG_SUPPORTED : TAG_NOTSUPPORTED; this.m_update = issigned ? TAG_NOTREQ : TAG_RECOMMENDED; this.m_help = issigned ? TSHWareLink : HCLLink; } break;//PENDING multiple instances? } strQuery = ""; break; default: this.m_name = genericName; //err } if(strQuery) { var loc = wbemlocator; var svcs = loc.ConnectServer(remoteServer); svcs.Security_.impersonationlevel = wbemImpersonationLevelImpersonate; var insts = new Enumerator(svcs.ExecQuery(strQuery)) arrInfo = new Array(); for(; !insts.atEnd(); insts.moveNext()) { var inst = insts.item(); var issigned = IsSigned(inst.PNPDeviceID); this.m_status = issigned ? TAG_SUPPORTED : TAG_NOTSUPPORTED; this.m_update = issigned ? TAG_NOTREQ : TAG_RECOMMENDED; this.m_help = issigned ? TSHWareLink : HCLLink; break;//PENDING multiple instances? } } } //EO myComponent ////////////////////// ////////////////////// //myComponents function myComponentsShow() { displayTableSegment("component", this.m_head); } function myComponents() { this.m_head = null; this.show = myComponentsShow; var arrComponents = new Array("usb", "sound", "network", "video"); for (var i=0; i < arrComponents.length ; i++) { var oComponent = new myComponent(arrComponents[i]); oComponent.setNext(this.m_head); //add before this.m_head = oComponent; } } //EO myComponents ////////////////////// ////////////////////// //myDisk function myDiskShow(tableElement) { tableElement.all["name"].innerHTML = this.m_name; tableElement.all["usage"].innerHTML = this.m_usage; tableElement.all["help"].innerHTML = this.m_help; } function myDisk(name, size, freeSpace) { this.m_name = null; this.m_usage = null; this.m_help = null; this.m_next = null; this.setNext = new Function("ptr", "this.m_next = ptr;"); this.getNext = new Function("return this.m_next;"); this.show = myDiskShow; //TSDrive //when do we invoke the TS? var strUsage = TAG_UNKNOWN; if(size && freeSpace) { var usedSpace = size - freeSpace; var perUsage = Math.round(usedSpace/(usedSpace + parseInt(freeSpace)) * 100); if(perUsage < 5) strUsage = TAG_USAGELOW; else if(perUsage >= 5 && perUsage < 55) strUsage = TAG_USAGELOW; else if(perUsage >= 55 && perUsage < 80) strUsage = TAG_USAGEMED; else if(perUsage >= 80 && perUsage < 95) strUsage = TAG_USAGEHIGH; else //perUsage >= 95) strUsage = TAG_USAGECRITICAL; strUsage = perUsage + "% " + "(" + strUsage + ")"; } this.m_name = TAG_LOCALDISK + " (" + name + ")"; this.m_usage = strUsage; this.m_help = "" + TAG_MOREINFO + ""; } //EO myDisk ////////////////////// ////////////////////// //myDisks function myDisksShow() { displayTableSegment("partition", this.m_head); } function myDisks() { this.m_head = null; this.show = myDisksShow; var loc = wbemlocator; var svcs = loc.ConnectServer(remoteServer); svcs.Security_.impersonationlevel = wbemImpersonationLevelImpersonate; strQuery = "Select * From Win32_LogicalDisk Where Drivetype = " + DrvTypeLocalDisk; var colLogicalDisks = new Enumerator(svcs.ExecQuery(strQuery)); for(; !colLogicalDisks.atEnd(); colLogicalDisks.moveNext()) { var logicalDisk = colLogicalDisks.item(); with (logicalDisk) { var oDisk = new myDisk(Name, Size, FreeSpace); oDisk.setNext(this.m_head); //add before this.m_head = oDisk; } } } //EO MyDisks ////////////////////// //////////////////////// //myRAM function myRAMShow(tableElement) { if(tableElement) { tableElement.all["detected"].innerHTML = this.m_detected; tableElement.all["minreq"].innerHTML = this.m_minreq; tableElement.all["help"].innerHTML = this.m_help; } else displayTableSegment("ram", this.m_head); } function myRAM() { this.m_detected = null; this.m_minreq = null; this.m_help = null; this.m_next = null; this.setNext = new Function("ptr", "this.m_next = ptr;"); this.getNext = new Function("return this.m_next;"); this.show = myRAMShow; var loc = wbemlocator; var svcs = loc.ConnectServer(remoteServer); svcs.Security_.impersonationlevel = wbemImpersonationLevelImpersonate; var MinMemoryReq = TAG_RAMMINREQVALUE; //PENDING determine programatically var memCapacity = 0; var cls = svcs.get("Win32_PhysicalMemory"); var coll = new Enumerator(cls.Instances_()) if (!coll.atEnd()) { for (;!coll.atEnd();coll.moveNext()) { var p = coll.item(); if(!isNaN(p.Capacity)) memCapacity += parseInt(p.Capacity); //in bytes. } } else { var insts = new Enumerator(svcs.ExecQuery("Select * from Win32_ComputerSystem")); for(; !insts.atEnd(); insts.moveNext()) { var inst = insts.item(); memCapacity += parseInt(inst.TotalPhysicalMemory); //in bytes. } } this.m_detected = fig2Words(memCapacity); // memCapacity in bytes this.m_minreq = MinMemoryReq; this.m_help = MemHelpLink; this.m_head = this; if (pchealth) { var memRequired = 0; var CurrentSKU = pchealth.UserSettings.MachineSKU.SKU.toUpperCase(); switch (CurrentSKU) { case "PERSONAL_32": memRequired = 64; break; case "PROFESSIONAL_32": memRequired = 64; break; case "SERVER_32": memRequired = 128; break; case "ADVANCEDSERVER_32": memRequired = 128; break; case "DATACENTER_32": memRequired = 512; break; case "PERSONAL_64": memRequired = 1024; break; case "PROFESSIONAL_64": memRequired = 1024; break; case "SERVER_64": memRequired = 1024; break; case "ADVANCEDSERVER_64": memRequired = 1024; break; case "DATACENTER_64": memRequired = 1024; break; case "BLADE_32": memRequired = 128; break; default: break; } if (memRequired != 0) { memRequired = memRequired * 1024 * 1024; // convert to bytes this.m_minreq = fig2Words(memRequired); } else { // For unknown SKU use the value for PRO and append an asterisk. memRequired = 64 * 1024 * 1024; this.m_minreq = fig2Words(memRequired); this.m_minreq += "*"; } } }//EO myRAM /////////////////// ////////////////////// //myDefectiveApp function myDefectiveAppShow(tableElement) { tableElement.all["appname"].innerHTML = this.m_appname; tableElement.all["drivername"].innerHTML = this.m_drivername; tableElement.all["manufacturer"].innerHTML = this.m_manufacturer; tableElement.all["help"].innerHTML = this.m_help; } function myDefectiveApp(appname, drivername, manufacturer, help) { strLink = "" + TAG_MOREINFO + ""; this.m_appname = (appname ? appname : TAG_UNKNOWN); this.m_drivername = (drivername ? drivername : TAG_UNKNOWN); this.m_manufacturer = (manufacturer ? manufacturer : TAG_UNKNOWN); this.m_help = (help ? strLink.replace(/%arg1%/, help) : TAG_UNKNOWN); this.m_next = null; this.setNext = new Function("ptr", "this.m_next = ptr;"); this.getNext = new Function("return this.m_next;"); this.show = myDefectiveAppShow; } //EO myDefectiveApp ////////////////////// ////////////////////// //myDefectiveApps function myDefectiveAppsShow() { displayTableSegment("defectiveapps", this.m_head); } function myDefectiveApps() { this.m_head = null; this.show = myDefectiveAppsShow; try { if(remoteServer) { var oDefectiveApp = new myDefectiveApp(MSG_LOCALONLY, "", "",""); oDefectiveApp.setNext(this.m_head); //add before this.m_head = oDefectiveApp; return; } else var oBD = new ActiveXObject("Windows.BlockedDrivers"); var items = new Enumerator(oBD.BlockedDrivers()); for(;!items.atEnd(); items.moveNext()) { var item = items.item(); var oDefectiveApp = new myDefectiveApp(item.Description, item.Name, item.Manufacturer, item.HelpFile); oDefectiveApp.setNext(this.m_head); //add before this.m_head = oDefectiveApp; } } catch(e) { this.m_head = new MsinfoErrObject(e.description); } } //EO myDefectiveApps ////////////////////// function DisplayLocStrings() { WaitMessage.innerHTML = MSG_WAIT; Refresh.innerHTML = TAG_REFRESH; with(System_Software.all) { Caption.innerHTML = TAG_SYSTEMSOFTWARE; Col1.innerHTML = TAG_SYSTEMSOFTWARE; Col2.innerHTML = TAG_DATECREATED; Col3.innerHTML = TAG_HELP; } with(Hardware.all) { Caption.innerHTML = TAG_HARDWARE; Col1.innerHTML = TAG_COMPONENT; Col2.innerHTML = TAG_STATUS; Col3.innerHTML = TAG_UPDATE; Col4.innerHTML = TAG_HELP; } with(Harddisks.all) { Caption.innerHTML = TAG_HARDDISK; Col1.innerHTML = TAG_DISKPARTITION; Col2.innerHTML = TAG_USAGE; Col3.innerHTML = TAG_HELP; } with(Mem.all) { Caption.innerHTML = TAG_RAM; Col1.innerHTML = TAG_RAMDETECTED; Col2.innerHTML = TAG_RAMMINREQ; Col3.innerHTML = TAG_HELP; } with(DefectiveApps.all) { Caption.innerHTML = TAG_DEFECTIVEAPPSTITLE; Col1.innerHTML = TAG_DEFECTIVEAPPNAME; Col2.innerHTML = TAG_DEFECTIVEAPPDRVRNAME; Col3.innerHTML = TAG_DEFECTIVEAPPMANUFACTURER; Col4.innerHTML = TAG_HELP; } } var INCR_UNIT = 100/6;//move progress bar in increments of INCR_UNIT function LoadChores(taskId) { try { switch(taskId) { case 0: SetHelpLinks(); //get windows folder path remoteServer = GetServerName(); //set remoteServer ShowServerName(TAG_HEALTH); break; case 1: DrawProgressBar(INCR_UNIT, TAG_SYSTEMSOFTWARE); break; case 2: var oOS = new myOS(); //System Software oOS.show(); break; case 3: DrawProgressBar(INCR_UNIT * 2, TAG_SYSTEMSOFTWARE); case 4: var oBIOS = new myBIOS(); oBIOS.show(); break; case 5: DrawProgressBar(INCR_UNIT * 3, TAG_HARDWARE); break; case 6: GetDriverInfo();//PENDING deserves it's own taskid var oComponents = new myComponents(); //Components oComponents.show(); break; case 7: DrawProgressBar(INCR_UNIT * 4, TAG_HARDDISK); break; case 8: var oDisks = new myDisks(); //Storage Space oDisks.show(); break; case 8: DrawProgressBar(INCR_UNIT * 5, TAG_RAM); break; case 9: var oRAM = new myRAM(); //Memory oRAM.show(); break; case 10: DrawProgressBar(INCR_UNIT * 6, TAG_DEFECTIVEAPPSTITLE); break; case 11: var oDefectiveApps = new myDefectiveApps(); //Defective Apps oDefectiveApps.show(); break; default: taskId = -1; _header.style.display = "none"; _data.style.display = ""; _body.style.cursor= "default"; } if(taskId >= 0) window.setTimeout("LoadChores(" + ++taskId + ")", TIMEOUT); } catch (e) { HandleErr(e); } } function dispatchFunction() { _body.style.cursor= "wait"; DisplayLocStrings(); SetProgressBarImage(); window.setTimeout("LoadChores(0)", TIMEOUT); }