Winpulse
v.0.4.5
Date: 25-Aug-2001

Contents.

1. Introduction.
2. Starting Winpulse.
3. Main Window.
4. Sentinels & Speeders.
5. Designer.
6. Options.
7. FAQ.
8. Contacts+Misc.

 

Introduction.

Winpulse is a system resources monitoring utility. Runs on Win95,98,ME,NT4,2000,XP.

Starting Winpulse.

Unpack winpulse.zip. Invoke wpulse32.exe. Winpulse starts a stub which will launch main module. The stub will be closed immediately after Engine32 module was launched.
Winpulse provides command line arguments, which are used usually for tuning Winpulse and mainly for debugging purposes. Current version does not provide Uninstaller.

Command line syntax: wpulse32.exe [flags]
As a flag you can use: '-', '--' (unix style), '/' (dos style).
As options assigning ':' or '=' can be used.
Flags are case insensitive. Order of flags is not important.
([] - arbitrary, <> - obligatory)

Flags: Description Notes
/debug=<level>

sets debug level. Debugging console will be opened.
Level: number in the range 0...100
0 - no debug information
100 - very verbose debugging.
WARNING: High level of debugging may significanlty decrease performance of the system because of high intensity of dumps to debugging console

In current version debug log file DEBUG.log will be mirrored in the current directory.
/unplug=<sentinel>

Unplugs Sentinel from current session (Sentinel will not be created). Valid values for Sentinel:
0 - Drives Sentinel
1 - CPU Sentinel
2 - Memory Sentinel
3 - FSR Sentinel
4 - Audio Sentinel
5 - System Sentinel
6 - Net Sentinel
Multiple unplugging is supported (e.g. /unplug=1 /unplug=2)

Can be used with /unlink
/unlink=<speeder>

Unlinks Speeder from current session (Speeder will not be created). Valid values for Speeders:
ram - Physical memory speeder
swp - Swap Space speeder
vm - Virtual memory speeder
usr - User resources speeder
gdi - GDI resources speeder
audio - Master volume speeder
wav - Wave volume speeder
clock - Clock speeder
os - OS speeder
scr - Screen resolution speeder
host - Host speeder
user - Logged user speeder
live - OS live speeder
mapi - MAPI speeder
key - Keyboard language speeder

Speeders' names are case sensitive.
Multiple unlinking is supported (e.g. /unlink=mapi /unlink=vm)
Unlinking is _not_ supported for dynamic speeders (which are created/destroyed dynamicly during Winpulse session), such as Drive Speeders, CPU Speeders, Ping Speeders.

Can be used with /unplug
/log=<log file> Debug log file where all debug information will be dumped. Takes effect only if /debug flag is specified. Default file name is DEBUG.log
 

 

Main Window.

 

The main Winpulse window is mouse draggable by any point with pressed left button. The window should intercept situations, when screen resolution changes and thus position itself in visible area. By pressing right mouse button the context popup menu will appear. Standard Windows controls will process mouse clicks according to their behaviour if clicked within their area (e.g. pressing right button on Tracker will perfrom nothing :). The Winpulse window can be resized only horizontally. Vertical resizing is not possible. Window can snap to screen borders.

Winpulse windows share its space among several panels or groups, which are called Sentinels. Each Sentinel contains indicators, which are named Speeders (short for 'speedometer'). Usually particular Sentinel contains the group of Speeders with the same functionality. Winpulse allows to hide and show any Speeder and any Sentinel arbitrarily. Particulat Sentinel and Speeder may have its own menu options.

The Sentinels are visible as panels, delemeted from each other by shaded frame. Hidden sentinel is not visible at all.

The Speeders always contain:
1) Icon
2) Nick
All other visual elements are arbitrary, but the main are:
1) Speeders with Gauge bar, which is situated next to the Nick. In major cases also have Free and Total indicators, which are situated below the Gauge Bar.
The Gauge bar usually shows information in percent, but not mandatory. User must refer to specific Speeder help for correct interpretation (e.g. inverse gauge)
2) Speeders with Text label, which is situated next to the Nick.

The Speeder is customizable:
1) Icon can be hidden/shown
2) Nick can be hidden/shown
3) Free/Toal indicators can be hidden/shown

4) Nick name can be changed to an arbitrary string.
The Speeder may introduce additional visual elements, expand/shrink its size.

Both Sentinels and Speeders may share its menus to the main Winpulse menu for quick access. The Sentinels and Speeders options are accessed via Designer.

 

Sentinels & Speeders.

Sentinels contain group of Speeders with similar functionality for optimized performance and resources consumption, and also for more comprehensive look.

Sentinel Speeder Description
Drives Sentinel  

This Sentinel monitors disk drives present in the system
Only Floppy drives are not supported because of extreme system performance degradation they can inflict. Adding and removing of drives from the system is intercepted and Sentinel is updated correspondingly (e.g. new network drive mapped).
The drive options, specified in Designer window will be memorized even if drive was removed from the system. Theses stored options will be applied when drive is added later. It is handy in the case when you have large number of network drives, which are mounted automaticly during login. You can hide drives you don't want to monitor and next time they are added to the system at login, they won't be visible in Winpulse. On the other hand it may lead to confusion in the situation, when at some preliminary stage the user had hidden the drive D: and hid it. After a while the drive was removed from the system. Then user adds drive to the system and mounts it as D: Winpulse will intercept the drive addition but won't show it, because the options tell him the drive should be invisible. User must go to the Designer window and watch what drives are being monitored at the moment.
Issues:
1. Keep in mind that mounting to many network drives may inflict system performance, because drive information is transfered across network.
2. CD/DVD drives are processed sometimes slowly by Win32 when no media is inserted. It's not Winpulse responsibility. I assume, the same pertain to Zip/Backup drives. On my system just keeping CD-ROM in the drive was enough for Win32 to be more generous with CPU load.
3. On Win95,Win95 OSR1 the drive sizes are reported incorrectly for volumes greater than 2G. It's a limitation of Win32 on those platforms. Install OSR2 (but I'm still afraid that the limit will be 8G, however have not checked it).

 

CPU Sentinel   CPU Sentinel monitors cpu load. Multiple processors are supported (up to 32, although never heard of more then 4 cpus box).
CPU Sentinel provides Tray Gauge wich can show the load for two cpus. If the system has only one cpu, the right tray sub-gauge will be inactive (I am actually thinking about showing ram in that gauge)
The Sentinel also provides CPU Menu where user can find out what kind of processor system runs on and some additional properties, like cpu clock, family, model, stepping, type and vendor. The frequency is approximate and calculated internally for one second. It will guarantee more or less precise detection on overclocked cpus.
Issues:
1. On Win95 clones cpu load may sometimes show considerable load (up to 100%) when there is absolutely no load. It is a bug in Win32 subsystem of registry performance counters. Due to this fact, more robust and precise method is being elaborated now which is not based on registry perfromance counters.
Memory Sentinel    
  ram The Speeder monitors Random Access Memory on the system.
  swp The Speeder monitors Swap Memory on the system. It's not always equal to the swap file. When the free size of the swap approaches 0, the system may become very unstable. User must close applications which hog too much memory.
  vm The Speeder monitors Virtual Memory available to the _PROCESS_ which retrieves this information. Hence this speeder is rather useless, because it shows information specific only to Winpulse. Win32 allocates 2G of virtual space for every process, so monitoring this information in regards of the whole system is not feasible.
  free By selecting "Free Memory" in Winpulse menu it's possible to free RAM. The Speeder will be added to Memory Sentinel and will be active for a while. When it reaches 100%, it will be removed from the Sentinel.
FSR Sentinel   Free System Resources. This Sentinel is feasible only on Win95 clones, which is very limited on FSR resources. On WinNT clones resources are "virtually" unlimited in comparison with Win95 even on the same box. On WinNT the gauges will be always 100%.
Keep in mind that Speeders show % of free resources, 100% - means 100% of free resources (good), 10% - 10% of free resources (very bad). It is different from all other Gauged Speeders, which show % of consumed space.
  gdi Graphics Device Interface Speeder monitors graphics resources on the system. All visual elements on Win32 system (buttons, windows, etc) are interpreted as graphics resources. When resources are close to 0%, no more "buttons" will be created
  usr This Speeder monitors system resources, often refered as USER resources. Memory heaps, threads, processes, mutexes, semaphores and some other handles are user resources.
System Sentinel    
  clock The Speeder shows current time
  os The Speeder shows Operating system
  scr The Speeder shows current screen resolution
  host The Speeder shows host name and its IP address. If IP address is not resolved, it will be 127.0.0.1
  user The Speeder shows currenly logged user name
  live The Speeder shows how long the system was live (without reboots)
  mapi The Speeder monitors unread emails in INBOX folder for default user via MAPI interface. It utilizes MAPI32.DLL for access to MAPI interface. When Winpulse starts for the first time, the Dialog window will appear from MAPI Layer to choose profile to be used. By checking desired profile and selecting "Remember whatever..." it's possible to prevent MAPI to ask about profile during next Winpulse start. MAPI interface is usually used for access to Exchange server, but it's also possible to communicate with POP3 servers in this way by configuring profile correspondingly.
Mail notifications are delivired immediately after receiving by server, so no frequency is needed for the Speeder.
When new mail arrive, the Speeder will change its icon and show the number of new messages.
Issues:
1. On some boxes Winpulse does not startup and displays nasty error message box: "The procedure entry point MAPIAllocateBuffer could not be located in the dynamic link library mapi32.dll."
This error is caused by corrupted MAPI32.DLL file, which is responsible for MAPI interface. In 99% of cases, some application during installation has replaced original MAPI32.DLL with its own version, which does not comply to M$ MAPI interface. For example, Netscape Communicator and Eudora are notorious to commit such "crime". There are two workarounds:
- Run fixmapi from command line. It should replace corrupted libary with the original MAPI32 stub dll. It certainly works on Win2000.
- If a system does not have fixmapi utility, replace MAPI32.DLL explicitly. DLL can be found in Office97, Office2000, Outlook2000, Explorer 4,5,6 installations. Unpack it into Windows system directory (\system for Win95 clones, \system32 for WinNT clones)
Both workarounds should not affect functionality of MAPI applications.
- If nothing helps, unlink mapi speeder by invoking Winpulse like this:
wpulse32.exe -unlink=mapi
2. MAPI interface is very bloated. POP3 is much simplier and more quick. I'm currently working on POP3 Speeder.
3. Users, who don't use MAPI interface don't need mapi Speeder. It's possible to hide it in Designer or unlink during Winpulse start.
  key

The Speeder shows the Keyboard Language Layout for the currently selected window. The icon shows the country flag of chosen language. If the flag is European Union flag, then the Speeder could not find the resource for selected language. User can add desired resources by himself. Directory /data in Winpulse root directory contains file called keylang.ini. This file contains entries for predefined languages. The structure of the file is as following:

[Languages]
<language name>= <language id>, <language icon>

<lanuage name> - Language name. The name may contain spaces, brackets, etc and will be shown in The Speeder.
<language id> - Win32 numerical id of the language. Can be written both in hexadecimal and decimal. Win32 SDK contains all ids for supported laguages. In case you want to add your language and don't know id, write me email.
<language icon> - file name of a flag icon. All icons must be located in /data directory. File name cannot be absolute path, but only relative from /data.
For exmaple: Russian= $0419, ru.ico
The user must restart Winpulse to take effects of the changes to the file.

 

Audio Sentinel    
  audio The Speeder monitors Master Volume of the sound card. User can change volume. Left/Right Balance is processed correctly.
  wav The Speeder monitors Wave Volume of the sound card. User can change volume. Left/Right Balance is processed correctly.
  cd CD volume (not implemented)
  midi MIDI volume (not implemented)
Net Sentinel   Sentinel allows to add/delete hosts in Designer. When Net Sentinel is selected in Designer, the Sentinel Area will allow to enter host name and lag time. Host name can be either IP or DNS name. Lag time specifies in milliseconds the time limit which is interpreted by Ping Speeder as lag and will be painted in Alarm Level color. The Ping Speeder has it's own Timer. By selecting Ping Speeder in Designer it's possible to adjust a Frequency of pings.
  ping

The Ping Speeder monitors ping response from specified host. Ping Speeder is controlled from Designer. In Designer user can add/delete/update Ping Speeder. User can specify host to ping (can be either DNS name or IP address), lag time limit (Gauge Bar limit) and frequency of ping. It's not advised to set high frequency of ping (less 100ms), because it can degrade system performance. Usually 1000ms is more than enough. The Speeder's gauge will show the ping time to the host. If the Speeder encounters errors during ping, the gauge will show error explanation:
1. unresolved host - host DNS name could not be resolved
2. time out - there was no ping response for at least 1 sec from host. In future version timeout interval will be configurable.
0ms ping time means that the response from host took less then 1 ms (the highest resolution for ping).
Issues:
1. The Speeder utilizes ICMP.DLL library for pinging. If the library cannot be found, the ping facility will not be available.
2. Ping Speeder tries to resolve host name before starting to ping. If host cannot be resolved, it won't be pinged.
3. Ping Speeder does not support pinging hosts beyond the Firewall/Proxy if they prohibit ICMP packets. In my case even DNS resolution does not work, so I am rejected at previous stage. If the host can be resolved but Firewalls filters out ICMP packet, you will receive "time out".
The only solution I see at present is to use deprived "Tunnelled Ping", which uses UDP or TCP instead of ICMP to "ping" specified host port. For instance, in this way it's possible to "ping" generic deamons like HTTP or FTP.

 

Designer.

 

Designer allows to configure Sentinels and Speeders. Designer window has several areas:

area description
1 Hierarchical tree of Sentinels and Speeders.
2 Visual settings of Speeders and Sentinels.
Sentinel supports only "Hidden" option
Hidden - hides/shows Sentinel or Speeder from Winpulse window (but _not_ unlinked or unplugged)
Meters - hides/shows Speeder Free/Total labels. Disabled for Sentinels
Named - hides/shows Speeder nick. Disabled for Sentinels
Iconed - hides/shows Speeder icon.. Disabled for Sentinels
Nick - allows to change Speeder nick name. Disabled for Sentinels
Frequency - allows to specify update frequency of a Speeder. Usually Speeders are updated by Major Timer, but some Speeders may have their own timers (Ping Speeders). If a Speeder does not support own Frequency update, the option will be diabled. Disabled for Sentinels.
The effect of every setting is visible immediately
3 Speeder Gauge settings. If Speeder does not have Gauge Bar, the are will be hidden
Tolerable - sets the color and percetage of tolerable level. If Free value of a Speeder does not exceed Tolerable level, it's Gauge color will change to a chosen one.
Low level - sets the color and percetage of low level. If Free value of a Speeder does not exceed Low level, it's Gauge color will change to a chosen one.
Alarm level - sets the color and percetage of alarm level. If Free value of a Speeder exceeds Alarm level, it's Gauge color will change to a chosen one. 100% is alarm level.
Stasis level - sets the color of Speeders, who's Free/Total values are not changed and updated and always remain static (DVD-ROM Speeders)
The effect of every setting is visible immediately
4 Sentinel Designer area. If Sentinel supports own design features, this area will show controls to edit selected Sentinel.
If user selects editable Sentinel, Add button will be enabled to add new Speeder to the Sentinel.
If user selects Speeder under editable Sentinel, Add, Destroy and Update buttons will be enabled.
User must press Update button in order the changes to take effect.
5 Speeder Designer area. Speeders may provide their own editing capabilities. In this case the area will show controls to edit selected Speeder.

 

Options.

Winpulse main options are stored in registry in Current User hive. Hence Winpulse options are not shared among different users. This is convenient for machinces which are used by different users.
Autostart with Windows - Winpulse will be launched every time user logs in global context (Win2000 allows to login in the current context)
Stay on top - Winpulse window will be on top of all windows (except Taskbar with "Always on top" option).
Transparency - track gauge allows to change translucency of Winpulse window. Win95 clones (Win95,98,ME) do NOT support transluceny and for these platforms the option is disabled.
Background - changes background color of Winpulse.
Update - frequency of major Winpulse timer in milliseconds. It's highly unadvised to set frequency lower than 500 ms, because of significant performance degradation. 1 sec is optimal and very efficient.
Shortcut - system wide shortcut to Hide/Show Winpulse window. Equivalent to "Hide" popup menu.
Tray gauge Load - sets "load" value color of tray progress bar.
Tray gauge Free - sets "free" value color of tray progress bar.
Current version support tray gauge only for CPU Sentinel. The gauge shows load for 2 cpus. If the box has only one CPU the right progress bar will be inactive. This will be corrected.
Stick at - sets the distance in pixels at which Winpulse window adheres to screen borders.
All options take effect immediately.

 

FAQ.

Q1. Winpulse does not startup and displays nasty error message box: "The procedure entry point MAPIAllocateBuffer could not be located in the dynamic link library mapi32.dll."
A1. This error is caused by corrupted MAPI32.DLL file, which is responsible for MAPI interface. In 99% of cases, some application during installation has replaced original MAPI32.DLL with its own version, which does not comply to M$ MAPI interface. For example, Netscape Communicator and Eudora are notorious to commit such "crime". There are two workarounds:
- Run fixmapi from command line. It should replace corrupted libary with the original MAPI32 stub dll. It certainly works on Win2000.
- If a system does not have fixmapi utility, replace MAPI32.DLL explicitly. DLL can be found in Office97, Office2000, Outlook2000, Explorer 4,5,6 installations. Unpack it into Windows system directory (\system for Win95 clones, \system32 for WinNT clones)
Both workarounds should not affect functionality of MAPI applications.
- If nothing helps, unlink mapi speeder by invoking Winpulse like this:
wpulse32.exe -unlink=mapi

Q2. Winpulse crashes/hangs ?!
A2. Try to run Winpulse from command line with /unplug swtiches to detect which Sentinel causes crash. The easiest way is to unplug all Sentinels except one. When Winpulse runs successfully, plug another Sentinel. For instance:
wpulse32.exe -unplug=1 -unplug=2 -unplug=3 -unplug=4 -unplug=5 -unplug=6
This command will run Winpulse only with Drives Sentinel. Let's assume it works, now enter:
wpulse32.exe -unplug=2 -unplug=3 -unplug=4 -unplug=5 -unplug=6
Let's assume that after running:
wpulse32.exe -unplug=6, Winpulse crashes. So now it's clear that System Sentinel crashes. Let's dive deeper into investigation by unlinking Speeders which belong to System Sentinel with the switch /unlink.
wpulse32.exe -unlink=os -unlink=scr -unlink=host -unlink=user -unlink=live -unlink=mapi -unlink=key
In this way we run Winpulse only with Clock Speeder in System Sentinel. Assume it is ok. Now:
wpulse32.exe -unlink=scr -unlink=host -unlink=user -unlink=live -unlink=mapi -unlink=key
Still fine, and after:
wpulse32.exe -unlink=key, Winpulse crashes or hangs
Now the perpetrator is detected - MAPI Speeder. Run Winpuse as the last time but with additional switch:
wpulse32.exe -unlink=key -debug=100
And send me email with attached DEBUG.log file. I'll try to fix it.

Q3. Where are NT counters, POP3 and Network speeders ?
A3. Being debugged.

Q4. Your program is a total crap !
A4. Very likely.

Q5. Why does it take so long to implement very easy feature I asked for ?
A5. I have very popular excuse - very limited free time :) Moreover, I'm not very smart and pretty slow.

Q6. What does UA stand for in domain name ?
A6. !AU

Q7. What a hell is aka ?
A7. My directory in /home/users.

 

Contacts+Misc.

developers: dev@aka.com.ua
bugs and help: info@aka.com.ua
http://aka.com.ua

To do:
1. Rewrite CPU Sentinel for Win95 clones. Registry counters on Win95 for Kernel suck.
2. DialUP network Speeders
3. Plugins support.

Credits:
During development I've used several free public components as a startup for my own. Some have been changed so heavily that only author text credits remained. Thank you guys for excellent work.


(c) 2001 aKa.com