Start page: ARABART home
← DinarSoft

MemMaid

The Best Maid for PocketPCs

DinarSoft’s flagship: it finds everything that fills a Pocket PC’s memory, clears it in one tap, then hands you the controls for the rest of the device.

Latest
2.3, June 2008
First
1.0, June 2003
Price then
$14.99 in 2006, $19.99 in 2008
Today
Free
Runs on
Pocket PC 2002 (version 1.73), Windows Mobile 2003, 5 and 6. Portrait, landscape and square screens
MemMaid
MemMaid 2, Quick Cleaner: a checklist of what to clean, from closing running programs to Internet Explorer’s cache, with Clean and Scan buttons.
Running Programs: Windows Media, MemMaid, Notes, Contacts, File Explorer and Solitaire with the memory each one holds, and Activate, Memory and Terminate buttons.
Storage Usage: a folder tree with the size of each folder, over a 3D pie chart of the apps that use the most space.
Startup Items: the shortcuts that run when the device starts, HandyLauncher, HandyMenu and HandySwitcher among them, with buttons to reorder or remove them.
Cleaning Schedule: clean on soft reset or daily at 12:00 AM, with a Schedule Frequency dialog set to weekly, on Wednesday.
Notification Queue: reminders the system will fire by time or by event, each with its program, its argument and when it runs.
System Tweaks: Internet Explorer’s cache size, reading buffer, history and connections, with Optimize and Apply buttons.
Look and Feel: pick the background stripes, the button style and your own highlight and text colors.
MemMaid 2, Quick Cleaner: a checklist of what to clean, from closing running programs to Internet Explorer’s cache, with Clean and Scan buttons.

The story

MemMaid looked through the whole device for whatever was eating its memory: browser caches, temporary files, cookies, the leftovers of apps you had removed, reminders that pointed at nothing. One tap on Clean, and the space came back. DinarSoft called it “the #1 maintenance utility for Windows Mobile devices.”

Then it kept growing. Version 2.0 had more than 25 cleaners, a cleaning schedule, a full registry editor, a database explorer, a startup manager and a CPU monitor, each on its own tab. Think of your phone’s storage settings, a task manager and a system cleaner, joined into one small app.

Reviewers around the world loved it. eMobie called it “the Swiss Army Knife of PPC utilities” and gave it five stars. It was a finalist in the magazine’s Best Software Awards four years running, from 2005 to 2008, and Russia’s CHIP magazine put it on its cover disc twice.

Every version

From DinarSoft’s revision history and installers. Press Run to play through them, or step one at a time.

MemMaid.history
  1. MemMaid 1.0 June 16, 2003

    • The first release.
  2. MemMaid 1.3 August 3, 2003

    • Windows Mobile 2003 SE support.
    • Lists, cleans and deletes the device’s databases.
    • Manages Today screen plug-ins: turn them on and off, reorder them, change their settings.
    • Sets the order of startup programs.
    • A file finder by name, with wildcards, and by size.
    • A cleaner for the leftovers of removed apps.
    • Help that follows the screen you are on.
  3. MemMaid 1.4 November 30, 2004

    • The DLL Optimizer, a new memory tweak.
    • A 2D or 3D chart of storage use.
    • Running processes sorted by the memory they hold.
    • A light QuickCleaner shortcut.
    • Remembers your last tab and screen.
  4. MemMaid 1.41 January 1, 2005

    • A stronger DLL Optimizer and uninstall cleaner.
  5. MemMaid 1.44 May 1, 2005

    • The DLL Optimizer moves Today plug-ins too.
    • Storage use handles memory cards bigger than 4 GB.
  6. MemMaid 1.5 November 11, 2005

    • Windows Mobile 5 support.
  7. MemMaid 1.61 May 23, 2006

    • AvantGo 6.2 support.
    • The DLL Optimizer shows every DLL on the device.
  8. MemMaid 1.72 July 20, 2006

    • Reclaim RAM: frees the memory that running programs hold, by the megabyte.
    • Switches between portrait and landscape on the fly.
    • New cleaners for Opera, NetFront, Virtual Earth, Windows Media DRM and leftover reminders.
    • Menus that match Windows Mobile 5.
  9. MemMaid 1.73 February 17, 2007

    • A new setup program.
    • The new DinarSoft logo on the About screen.
  10. MemMaid 2.0 July 11, 2007

    • A new look, rebuilt from the ground up.
    • More than 25 new and updated cleaners.
    • Scheduled cleaning.
    • A full registry editor with import and export.
    • A database manager and explorer.
    • CPU and memory usage, card tools, a CAB installer, file types, system tweaks.
    • Windows Mobile 6, and VGA and QVGA screens.
  11. MemMaid 2.1 December 15, 2007

    • Speaks German, French and Simplified Chinese.
    • Choose which browser cookies to keep.
    • New cleaners for the Recycle Bin and the Google Maps cache.
  12. MemMaid 2.2 February 13, 2008

    • Speaks Russian, Italian, Slovak and Czech too.
    • Installed programs sorted by name.
  13. MemMaid 2.3 June 16, 2008

    • 800 by 480 screens, like the Sony Ericsson Xperia X1.
    • The latest AvantGo and Opera.
    • Sort installed apps by date, name or size.

MemMaid, rebuilt from its own files

This is MemMaid 2.3 on a Pocket PC. Tap the six icons along the bottom, open Jump To and Tools, and run a scan.

Nothing here is a screenshot. The tab icons and the toolbar come out of MemMaid’s own picture file, and the menus out of its own menu definitions. Every label comes from its string table of 709 strings. The lists match DinarSoft’s own 2007 screenshots, and the scan sizes are a sample.

MemMaid

Total Found:0 Bytes

Rebuilt from MemMaid’s own icons, menus and strings. Lists show what DinarSoft’s own 2007 screenshots show; scan sizes are a sample.

Open Tools › Settings and change the language. MemMaid 2.3 speaks eight: English, German, French, Italian, Czech, Slovak, Russian and Simplified Chinese. Each language is a small DLL that holds the same 709 strings, translated. When MemMaid needs a word, it asks the language DLL first and falls back to English, so a missing translation never leaves a blank button. Then open Tools › About › Register and type the key from Unlock the full version.

For engineers: one word, in any of eight languages
MemMaid.exe 2.3 6A2E4, string number r5
6A2EC mov r3,#0x200 / orr r3,r3,#0xC5 ; 709 strings
6A2F4 cmp r5,r3 ; past the end?
6A2F8 movge r0,#0 ; yes: no string
6A304 ldr r3,[r4,#0x18] ; the language DLL’s GetString
6A308 cmp r3,#0 ; is a language loaded?
6A318 ldr pc,[r4,#0x18] ; ask it for string r5
6A31C cmp r0,#0 ; did it have one?
6A324 ldr r3,[r4,#0x10] ; no: the English table
6A328 ldr r0,[r3,r5,lsl #2] ; English string r5
6A32C pop {r4,r5,pc} ; return it
MemMaid loads the language DLL once, at start, and finds its GetString function by name (6A7A0). Each mm_xxx.dll fills its table of 709 pointers when it loads. In JavaScript: return lang?.(n) || en[n].

Fourteen files, one app

MemMaid 2.3 arrives as one CAB installer. Open it, and out come 14 files: the app, its pictures, seven languages, its help and two small helpers.

The app itself, MemMaid.exe, is 629,760 bytes, smaller than one photo on a phone today. Inside are about 98,700 ARM instructions and 41 screen layouts. DinarSoft wrote it in C++ and built it with Visual Studio 2005. Tap any file to see what it does.

MemMaid 2.3, Build 230: 14 files, 1,293,162 bytes
Properties
File
MemMaid.exe
Size
629,760 bytes
Installs to
\Program Files\MemMaid
What it does
The whole app: 29 cleaners, Reclaim RAM, the startup manager, a registry editor, a database explorer, card tools and more. 41 screen layouts and about 98,700 ARM instructions.
How it talks
Talks to the system through 348 functions in 8 system libraries, 321 of them in coredll.dll, the core of Windows Mobile.

Every part has one job. The pictures for sharp VGA screens sit in their own DLL of 245,248 bytes. MemMaid loads it only on a VGA screen, so a small screen never pays for big pictures. Each language is its own file, and the English-only installer of the same build simply leaves them out. The launcher, 12,800 bytes, finds MemMaid wherever you installed it, in main memory or on a card.

To do its work, MemMaid calls 348 system functions. Many have a twin on the phone in your pocket, and a few are now kept for the system alone.

What Windows Mobile gave MemMaid, and what an app calls today
2003 to 20082026Why it is the same idea
toolhelp.dll: CreateToolhelp32Snapshot, Process32First, Heap32First Android: ActivityManager.getRunningAppProcesses. iOS keeps this to itself. List every running program, its threads and its memory
coredll: GlobalMemoryStatus Android: ActivityManager.getMemoryInfo. iOS: os_proc_available_memory. How much RAM is free right now
coredll: PostMessage(window, WM_HIBERNATE) Android: onTrimMemory. iOS: didReceiveMemoryWarning. Only the system can send them today. Tell an app that memory is low
coredll: PerformCallBack4, SetKMode No store app may do this today. Debuggers and tools like Frida do. Run a function inside another app
coredll: RegOpenKeyEx, RegSetValueEx Android: SharedPreferences and Settings. iOS: UserDefaults, one app at a time. Read and write settings for the whole system
coredll: CeRunAppAtTime, CeSetUserNotificationEx Android: AlarmManager, WorkManager. iOS: BGTaskScheduler. Wake MemMaid at a time, or when the device starts
coredll: KernelIoControl(IOCTL_HAL_GET_DEVICEID) Android: ANDROID_ID. iOS: identifierForVendor. The device’s own ID, for the unlock code
coredll: SHGetSpecialFolderPath, SHCreateShortcut Android: launcher shortcuts. iOS: Home Screen quick actions. Find the StartUp folder and make shortcuts

Reclaim RAM: one message to every app

On a Pocket PC, memory was the thing you ran out of. Version 1.72, in July 2006, added a button that wins some back without closing a thing.

Programs keep things they can rebuild later: pictures, caches, windows you cannot see. Windows Mobile had a polite way to ask for them back, a message named WM_HIBERNATE, the ancestor of the low-memory warning an iPhone or Android app gets today. The system sent it when main memory ran low. MemMaid sends it now, to every window on the device, and measures what comes back. Step through the code, or press Run.

Running Programs a sample run
  1. Windows Media 185.47 KB
  2. MemMaid 227.81 KB
  3. Notes 83.93 KB
  4. Contacts 20.73 KB
  5. File Explorer 17.92 KB
  6. Solitaire 16.73 KB

memory the program needs what it can rebuild later

Free RAM
Before
6.21 MB
After
6.40 MB
Reclaimed
0.19 MB
MemMaid.exe Reclaim RAM
  1. E6C8main:bl FreeRAM; free memory, before
  2. E6D0mov r6, r0; keep it
  3. E6D4ldr r3, [r4, #0x880]; box 1 ticked?
  4. E6E0blne CloseAllPrograms
  5. E6E4ldr r3, [r4, #0x87C]; box 2 ticked?
  6. E6ECldrne r0, =Hibernate; the callback
  7. E6F4blne EnumWindows; once per window
  8. E6F8ldr r3, [r4, #0x884]; box 3 ticked?
  9. E70Cbleq CompactAllHeaps
  10. E710mov r0, #1000; milliseconds
  11. E714bl Sleep
  12. E720bl FreeRAM; free memory, after
  13. E728cmp r5, r6; more than before?
  14. E758sub r0, r5, r6; RAM won back
  15. 678Chib:str lr, [sp, #-4]!
  16. 6790mov r3, #0x300
  17. 6794orr r1, r3, #0xFF; 0x3FF: WM_HIBERNATE
  18. 67A0bl PostMessageW; into its mailbox
  19. 67A4mov r0, #1; TRUE: next window
  20. 6670free:mov r3, #32; report size
  21. 667Cbl GlobalMemoryStatus
  22. 6680ldr r0, [sp, #12]; dwAvailPhys: free RAM
The same in C
  1. DWORD before = FreeRAM();
  2. if (opt.close) CloseAllPrograms();
  3. if (opt.hib) EnumWindows(Hibernate, 0);
  4. if (opt.compact) CompactAllHeaps();
  5. Sleep(1000);// apps answer
  6. DWORD after = FreeRAM();
  7. if (after > before) Report(after-before);
  8. BOOL CALLBACK Hibernate(HWND w, LPARAM) {
  9. PostMessage(w, WM_HIBERNATE, 0, 0);
  10. return TRUE;
  11. }
  12. DWORD FreeRAM(void) {
  13. MEMORYSTATUS m = { sizeof m };
  14. GlobalMemoryStatus(&m);
  15. return m.dwAvailPhys;
  16. }
Watches
r0
0.19 MB reclaimed
r6
6.21 MB before
r5
6.40 MB after
Help

After minus before is the memory it got back. MemMaid shows it: MemMaid has reclaimed the difference, in MB.

Look at the order: measure, ask, wait one second, measure again. The second is for the apps. A message only lands in an app’s mailbox, and the app answers when its turn comes. The report is plain arithmetic, after minus before: “MemMaid has reclaimed 0.19 MB”. The numbers here are a sample run, with the programs from DinarSoft’s own screenshot.

The first box goes the other way: it closes every program, except two. MemMaid keeps itself running, and ActiveSync’s repllog.exe, so a sync with your PC is never cut off.

A helper inside every app

The third box, Compact, goes further. It tidies each app’s memory from the inside.

Each app on Windows CE runs as its own process, walled off from the rest. Its heap, the memory it hands out to itself, fills with holes as it runs. Only code inside the app can tidy it. So MemMaid sends code inside.

It takes on the system’s own full privileges and gives itself rights over every process. Then it asks the system, through one of its private calls, to act as if the app itself were calling. The app loads MemMaid’s helper, MemMaidSetup.dll, runs its tidy-up function, PerformInst, and unloads it. PerformInst does two things. It lets go of shared components the app no longer uses, and it compacts the app’s working memory, so empty pages go back to the system. Then the helper leaves, and the app carries on, lighter. Step through it.

MemMaid.exe

coredll.dll PerformCallBack4

MemMaidSetup.dllPerformInst

system rights

iexplore.exe Pocket IE
COMCOMCOM
MemMaidSetup.dllPerformInst

its heap

pages back to the system: 12

MemMaid.exe, and its helper inside the app
  1. 3650inj:ldr r0, ="coredll.dll"
  2. 3654bl GetModuleHandleW
  3. 3680ldr r1, ="PerformCallBack4"
  4. 3690bl GetProcAddressW; found by name
  5. 36DCldr r0, ="MemMaidSetup.dll"
  6. 36E0bl LoadLibraryW; its own helper
  7. 36ECldr r1, ="PerformInst"
  8. 36F4bl GetProcAddressW
  9. 374Cmov r0, #1
  10. 3754ldr pc, [sl]; SetKMode(TRUE)
  11. 375Cmvn r0, #0; every process
  12. 3764ldr pc, [r6]; SetProcPermissions
  13. 3778bl OpenProcess; the app to tidy
  14. 37A8ldr r1, ="LoadLibraryW"
  15. 37B4bl MapPtrToProcess; as the app sees it
  16. 37E8ldr pc, [r8]; load it in there
  17. 3808bl MapPtrToProcess; PerformInst, mapped
  18. 3830ldr pc, [r8]; run it in there
  19. 384Cldr r1, ="FreeLibrary"
  20. 3884mov pc, r4; unload it in there
  21. 388Cbl CloseHandle
  22. 38A0ldr pc, [r6]; rights back
  23. 1984inst:bl CoFreeUnusedLibraries
  24. 1998ldr r1, ="HeapCompact"
  25. 199Cbl GetProcAddressW
  26. 19A8bl GetProcessHeap; the app’s own heap
  27. 19B4mov pc, r4; HeapCompact(heap, 0)
In C. Find: GetProcAddress. Map: MapPtrToProcess
  1. void CompactHeapOf(DWORD pid) {
  2. call = Find(core, L"PerformCallBack4");
  3. me = LoadLibrary(L"MemMaidSetup.dll");
  4. job = Find(me, L"PerformInst");
  5. SetKMode(TRUE);// system rights
  6. SetProcPermissions(~0);// every app
  7. app = OpenProcess(0, FALSE, pid);
  8. CALLBACKINFO ci = { app,
  9. Map(LoadLibraryW, app), path };
  10. there = call(&ci, 0, 0, 0);// load, inside
  11. ci.pfn = Map(job, app);
  12. call(&ci, 0, 0, 0);// run, inside
  13. ci.pfn = Map(FreeLibrary, app);
  14. ci.pvArg0 = there; call(&ci, 0,0,0);
  15. CloseHandle(app);// rights back
  16. }
  17. int PerformInst(void) {// MemMaidSetup.dll
  18. CoFreeUnusedLibraries();
  19. HeapCompact(GetProcessHeap(), 0);
  20. }
Watches
r0
old the permissions MemMaid had before
Help

Permissions go back as they were. Then the next process, until every app on the device has had its turn.

MemMaid does this for every process on the device, one after another. Its own process gets the short path: it calls PerformInst directly. On the phone in your pocket, no app may reach inside another. Only the system can. On Windows Mobile a program that knew the system this well could, and MemMaid used that power to help every app on the device.

Where the junk lives

MemMaid 2.3 has 29 cleaners. Each one knows a place where a Pocket PC collects things nobody needs.

Two work in memory, most work on files, three in the registry, and three in the notification queue, the system’s list of programs to wake later. Pick one to see where it looks and what it removes.

Quick Cleaner: 29 cleaners

Memory 2

Files 21

Registry 3

Notification queue 3

Where it looks
  1. 1. Ask the registry where it is…\Explorer\Shell Folders Cache
  2. 2. Then go there\Windows\Profiles\guest\Temporary Internet Files
  3. What it removes

    Pocket Internet Explorer’s cache. The folder name comes from the registry, so it works on every device.

Look how often it asks first. MemMaid never assumes where a folder is. Pocket Internet Explorer’s cache lives wherever the device maker put it, so MemMaid reads the real place from the registry. Opera keeps its settings in its own file, Opera.ini, so MemMaid reads that. AvantGo moved its files between versions, so MemMaid checks the version before it touches one. A dead shortcut goes only after MemMaid has read its target and found the program gone. That care is what makes one tap on Clean safe.

For engineers: reading an .ini file on a system that cannot
MemMaid.exe 2.3 the Opera cache cleaner
22FC8 ldr r1,=L"\Application Data\Opera\Opera.ini" ; Opera’s own settings
21960 ldr r3,=L"Cache Directory4" ; the key
21964 ldr r2,=L"[User Prefs]" ; the section
2198C bl ReadIni ; MemMaid’s own reader, at 2A688
2A6CC bl CreateFileW ; open the file
2A8A4 bl ReadFile ; read it
2A8DC bl MultiByteToWideChar ; into Unicode
2A794 cmp r3,#0x5B ; a line that starts with [ ?
2A7A8 bl _wcsnicmp ; is it [User Prefs]?
2A7F8 cmp r3,#0x3D ; the = after the key
Desktop Windows reads .ini files with GetPrivateProfileString. Windows CE leaves it out, so MemMaid carries its own: read the file, turn it into Unicode, find the section, then the key. Python’s configparser does the same job today.

Startup, in your order

Everything in the StartUp folder runs when the Pocket PC starts. Windows Mobile gave you no way to choose the order. MemMaid did, from version 1.3.

Each item is a shortcut file, one line of text. A folder has no setting for order, so MemMaid writes the files again, one at a time, in the order you choose. Meanwhile it keeps them safe in a folder of its own, \Windows\MEMMAID.TEMP. Move an item, press Save, and watch.

Startup Items
  1. 1 poutlook.lnk
  2. 2 HandyLauncher.lnk
  3. 3 HandyMenu.lnk
  4. 4 HandySwitcher.lnk
\Windows\StartUp
  1. poutlook.lnk21#\Windows\poutlook.exewritten 1
  2. HandyLauncher.lnk48#"\Program Files\HandyLauncher\HandyLauncher.exe"written 2
  3. HandyMenu.lnk40#"\Program Files\HandyMenu\HandyMenu.exe"written 3
  4. HandySwitcher.lnk48#"\Program Files\HandySwitcher\HandySwitcher.exe"written 4
\Windows\MEMMAID.TEMP

    Not there. MemMaid makes it only while it works, then removes it.

    \Windows\StartUp.Disabled

      Empty. Switch an item off to see where it goes.

      At every start, Windows Mobile runs each shortcut in the StartUp folder.

      Now switch one off. A simpler program would delete the shortcut. MemMaid keeps the real one in StartUp.Disabled and leaves a stand-in in its place: a shortcut to its own launcher with the word -noop. The launcher sees -noop and ends at once. The item keeps its place in your order, and switching it back on is one copy.

      For engineers: the stand-in shortcut
      MemMaid.exe 2.3 4EB40, switch a startup item off
      4EB7C bl SHGetSpecialFolderPath ; where StartUp is (7)
      4EB98 ldr r1,=L".Disabled\" ; the folder beside it
      4EBA8 bl CreateDir ; make it, at 62050
      4EBD0 bl CopyFileW ; keep the real shortcut there
      4EC04 bl CreateFileW ; open the one in StartUp
      4EC34 ldr r0,=36#"\Windows\MemMaidLauncher.exe" -noop ; the stand-in
      4EC50 bl WriteFile ; write it over the old one
      4EC58 bl SetEndOfFile ; cut off the rest
      4EC24 bl DeleteFileW ; cannot open it? delete it
      36 is the length of the command after the # sign. In MemMaidLauncher.exe, the first test at 11028 is wcsstr(cmdline, L"-noop"): found, return 0.

      More room for programs

      Two tools on the Tweaks tab give programs more memory to run in. One moves code out of memory. The other moves the line between files and programs.

      The DLL Optimizer

      Installed programs kept their DLLs in main memory, in \Windows. Version 1.4, in November 2004, added the DLL Optimizer: it moves them to a memory card, into a folder named DLL Store. A moved DLL must still be found. So MemMaid adds the new folder to the places the loader searches, like adding a folder to PATH. The list lives in the registry as one multi-string value named SystemPath. Then MemMaid restarts the device with a soft reset. Step through the edit.

      Registry HKLM\Loader

      SystemPath REG_MULTI_SZ

      1. \Windows\
      2. 0
      3. \Storage Card\DLL Store\
      4. 0
      5. 0

      Each folder ends with a zero. A second zero in a row ends the list.

      Loader an app asks for plugin.dll
      1. \Windows\plugin.dllnot here
      2. \Storage Card\DLL Store\plugin.dllfound
      MemMaid.exe add a folder to the search path
      1. 7970path:ldr r7, ="\Loader"
      2. 7988mov r0, #0x80000002; HKEY_LOCAL_MACHINE
      3. 79A0bl RegCreateKeyExW
      4. 79C4add r1, r7, #16; "SystemPath"
      5. 79D8bl RegQueryValueExW; size only
      6. 79F8bl operator new[]; room for one more
      7. 7A1Cbl RegQueryValueExW; read the list
      8. 7A44bl _wcsicmp; our folder?
      9. 7A50moveq r4, #1; yes: done
      10. 7A6Cadd r5, r5, r3, lsl #1; skip it and its zero
      11. 7A74bl wcslen
      12. 7A7Cbne 7A34; until an empty one
      13. 7A90bl wcscpy; add at the end
      14. 7AA8strh sl, [r3]; one more zero
      15. 7AB8bl RegDeleteValueW
      16. 7AC4mov r3, #7; REG_MULTI_SZ
      17. 7AD8bl RegSetValueExW
      18. 7B74bl RegFlushKey; save it now
      In C. Query and Set: RegQueryValueEx, RegSetValueEx
      1. #define PATH L"SystemPath"
      2. void AddToSearchPath(const WCHAR *dir) {
      3. k = OpenKey(HKLM, L"\\Loader");
      4. Query(k, PATH, NULL, &size);
      5. list = new WCHAR[size/2+wcslen(dir)+1];
      6. Query(k, PATH, list, &size);
      7. WCHAR *p = list; BOOL there = FALSE;
      8. while (wcslen(p)) {
      9. if (!_wcsicmp(dir, p)) there = TRUE;
      10. p += wcslen(p) + 1;
      11. }
      12. if (!there) {
      13. wcscpy(p, dir); p[wcslen(dir)+1] = 0;
      14. RegDeleteValue(k, PATH);
      15. Set(k, PATH, REG_MULTI_SZ, list, n);
      16. }
      17. RegFlushKey(k); RegCloseKey(k);
      18. }
      Watches
      Help

      After a soft reset the loader searches both folders. An app asks for its DLL by name, and finds it on the card.

      Every step is careful. It looks for its folder in the list first, so a second run never adds it twice. It writes the list back with a fresh zero at the end, and flushes the registry to storage before the restart.

      Memory for files, memory for programs

      On Windows Mobile 2003, one RAM chip held both your files and your running programs, and the system drew the line between them by itself. MemMaid’s Information screen puts that line on a slider, counted in pages of 4,096 bytes. It marks the band where the line may go: never below the files you have, never above the memory programs leave free. Let go, and MemMaid calls SetSystemMemoryDivision. One second later it reads the line back and puts the slider where the system put the line.

      System Info: memory a sample 64 MB Pocket PC

      SetSystemMemoryDivision(7680) pages of 4,096 bytes for files

      The marked band is where the split may go: not below the files you have, not above the memory programs leave free.

      MemMaid looks that function up by name while it runs, the way a web page checks for a feature before it uses it. So the same program starts on every version of Windows Mobile. From version 5, files moved to flash memory, and the line was gone.

      Then and now
      2003 to 20082026Why it is the same idea
      HKLM\Loader SystemPath PATH, and LD_LIBRARY_PATH on Linux A list of folders to search, in order.
      REG_MULTI_SZ, each string ending in a zero A JSON array of strings Many strings in one value.
      KernelIoControl(IOCTL_HAL_REBOOT) Restart to apply an update New settings take effect at the next start.
      GetProcAddress("SetSystemMemoryDivision") if ("share" in navigator) Use a feature only where it exists.

      Fifteen days, and a key

      MemMaid was shareware: free for 15 days, then a key, at $14.99 in 2006 and $19.99 in 2008. In 2026, Yasser Awad released it as freeware.

      The install date is written once, by the installer’s helper, MemMaidSetup.dll. It hides in HKEY_CLASSES_ROOT, among the file types, under a key named TapHelp. Fourteen bytes hold the date. The year, the month and the day are each written twice, in two different ways, with every second byte raised by one, and a checksum closes the record. MemMaid reads them at every start. Both copies must agree and the checksum must match, or the trial is over. Set the dates, then tap any byte.

      HKEY_CLASSES_ROOT\TapHelp Ready2

      Month 6, read twice: (15 − 3) ÷ 2 and (13 − 1) ÷ 2. Year 2008: 2015 − 7 and 2029 − 21. Day 20: (45 − 5) ÷ 2 and (44 − 4) ÷ 2.

      12 days left. “The trial period will expire after 12 day(s)”

      The day count needs no calendar: (year × 12 + month) × 31 + day. Every month counts as 31 days, so the count only grows. Older versions keep the same record under other names: Windows.2 and OSDB in 1.72 and 1.73, AppHelper and Platform in 1.5a.

      The key

      A key is made from two things. One is your Pocket PC’s code, which MemMaid builds from the device ID and shows on its License Key screen. The other is a word: MemMaid2. The key function shuffles 120 numbers using the word, then steps through them once per character, turning each character of the code into a key letter. The letter O never appears in a key: the code skips it. Pick a preset or type your own, then step through it.

      Make a key
      120 numbers
      1. 71
      2. 111
      3. 109
      4. 108
      5. 92
      6. 105
      7. 94
      8. 69
      9. 34
      10. 42
      11. 62
      12. 63
      13. 117
      14. 36
      15. 85
      16. 67
      17. 39
      18. 23
      19. 0
      20. 68
      21. 56
      22. 38
      23. 74
      24. 76
      25. 33
      26. 115
      27. 50
      28. 106
      29. 102
      30. 72
      31. 29
      32. 96
      33. 16
      34. 17
      35. 98
      36. 114
      37. 24
      38. 86
      39. 18
      40. 60
      41. 43
      42. 99
      43. 2
      44. 41
      45. 61
      46. 14
      47. 84
      48. 6
      49. 49
      50. 113
      51. 80
      52. 8
      53. 1
      54. 7
      55. 90
      56. 77
      57. 45
      58. 54
      59. 15
      60. 47
      61. 75
      62. 103
      63. 44
      64. 82
      65. 89
      66. 57
      67. 100
      68. 20
      69. 11
      70. 73
      71. 119
      72. 55
      73. 66
      74. 35
      75. 27
      76. 81
      77. 116
      78. 83
      79. 22
      80. 93
      81. 25
      82. 112
      83. 110
      84. 19
      85. 4
      86. 3
      87. 28
      88. 52
      89. 88
      90. 95
      91. 30
      92. 97
      93. 59
      94. 46
      95. 87
      96. 40
      97. 70
      98. 65
      99. 26
      100. 5
      101. 48
      102. 31
      103. 13
      104. 104
      105. 64
      106. 21
      107. 58
      108. 32
      109. 91
      110. 10
      111. 12
      112. 101
      113. 78
      114. 51
      115. 79
      116. 107
      117. 118
      118. 53
      119. 9
      120. 37

      inYASSERMOHAMEDALI

      keyTZMPKZNDREVAWUHZ

      MemMaid.exe the key function
      1. AB54scrbl:bl wcslen; letters in
      2. AB58ldr r5, ="MemMaid2"; the word
      3. AB94strh r3, [r2], #2; S[i] = i
      4. AB9Ccmp r3, #120; 120 numbers
      5. ABC4ldrh r3, [r3]; K[i] = word[i%8]
      6. ABF4ldrh r4, [lr, sb]!; S[i]
      7. AC04add r3, r3, r4; K[i]+S[i]+j
      8. AC0Cumull r1, r3, r0, r6; % 120
      9. AC28strh r4, [r2]; swap
      10. AC50add r1, sl, #1; i = i + 1
      11. AC70add r0, r4, sb; j = j + S[i]
      12. AC98strh r4, [r2]; swap
      13. ACA0add r1, r3, r4; S[i] + S[j]
      14. ACC0eor r1, r3, r5; XOR the letter
      15. ACC4umull r2, r3, r1, fp; % 25
      16. ACD8add r3, r3, #65; + ’A’
      17. ACE4cmp r3, #79; O or later?
      18. ACE8strh r3, [r6]; write it
      19. ACECaddhs r3, r3, #1; skip O
      20. ACF0strhhs r3, [r6]; write that
      The same in C
      1. void Scramble(WCHAR *s, WCHAR *w) {
      2. WORD S[120], K[120]; int i, j, t, v;
      3. for (i=0; i<120; i++) S[i] = i;
      4. for (i=0; i<120; i++) K[i] = w[i % n];
      5. for (i=j=0; i<120; i++) {
      6. j = (K[i]+S[i]+j) % 120; swap(S,i,j);
      7. }
      8. for (i=j=0; *s; s++) {
      9. i = (i+1) % 120; t = S[i];
      10. j = (j+t) % 120; swap(S,i,j);
      11. v = (S[(S[i]+t)%120]^*s) % 25 + 'A';
      12. *s = v >= 'O' ? v + 1 : v;
      13. }
      14. }
      Watches
      i
      16 steps one by one
      j
      13 jumps by S[i]
      k
      81 the mixed number
      ch
      I = 73 the letter in
      out
      Z the key letter
      Help

      Letter 16, I, becomes Z. The key is TZMP - KZND - REVA - WUHZ.

      MemMaid also accepts keys made from a few words built into the program, in place of the device code. One is his own name, YASSERMOHAMEDALI. Three more come from names in his family, and GIVEAWAYVERSION1 served magazine give-aways. The key made from his name opens every copy of MemMaid 2.3, on any device. Versions 1.5a to 1.73 mix with the word MemMaid, so they have a key of their own, also made from his name. Both keys are in Unlock the full version.

      Every key on this page passed MemMaid’s own check routine. Its real ARM code, from versions 1.5a, 1.72, 1.73 and 2.3, ran in an emulator. It accepted all 40 right keys: for seven devices, for a device with no ID, the give-away key and the key from his name. And it turned away all 196 near misses: one letter off, random, empty, or made for another device or version.

      Five years of growth

      Four builds of MemMaid survive, from March 2006 to June 2008. Side by side, they show how it grew.

      MemMaid 2.3
      The DinarSoft logo, from 2007 MemMaid 2’s six tab icons
      MemMaid.exe
      629,760 bytes
      ARM code
      394,752 bytes
      Screens
      41 layouts
      System functions
      348 used
      • 800 × 480 screens, like the Sony Ericsson Xperia X1
      • AvantGo 6.5 and Opera 8.65
      • Installed apps sorted by date, name or size

      From 1.5a to 2.3 the program almost doubled, from 327,680 bytes to 629,760. The code grew from 181,432 bytes to 394,752, the screens from 20 to 41, and the system functions it calls from 249 to 348. The 1.x builds were linked with Microsoft’s linker 6.20, and 2.3 with linker 8.0, from Visual Studio 2005.

      The old builds also keep something the web archive never captured. Inside 1.5a and 1.72, as bitmap 108, is the first DinarSoft logo: the word DINAR under a globe. Version 1.73 swapped it for the new one, and its changelog says so: “New logo used in the about screen.”

      Awards and reviews

      • PC Magazine

        focuses on memory management, Registry cleaning, and the ability to “wipe” files

        MemMaid · Jamie Lendino, May 2008

        See the page
      • Computer Power User

        an indispensable tool for Pocket PC/Windows Mobile device owners

        MemMaid · October 2006

        See the page
      • Smartphone & Pocket PC

        Looks great, works great

        MemMaid · Nate Adcock, an expert judge, 2007

        See the page
      • eMobie

        the Swiss Army Knife of PPC utilities

        MemMaid · Russ Terrell, September 9, 2004

        Read the review
      • PocketPC Reviews

        MemMaid is a godsend!

        MemMaid · November 4, 2004

        Read the review
      • Mobile-View

        Definitely deserves a 10/10 rating!

        MemMaid · Allistair Lee, July 11, 2007

        Read the review
      • Tucows

        If you have a PDA or smartphone this is a program you must have.

        MemMaid · Michael E. Callahan, “Dr. File Finder”, September 11, 2006

        Read the review
      • Eten Blog

        MemMaid fills a gap left by Microsoft in the memory management department

        MemMaid · Tariq Bamadhaj, September 12, 2007

        Read the review
      • Windows Central

        Extremely powerful and comprehensive suite of memory and storage management utilities

        MemMaid · January 3, 2009

        Read the review
      Inbox (30) · Microsoft Office Outlook 2003

      Arranged By: DateNewest on top

      1. Windows CentralJan 3, 2009Review: MemMaid Memory Management Utility
      2. PC TodayOct 2008Updated Software
      3. PopsoftOct 2008Startup managers (in Chinese)
      4. CHIP magazine, RussiaSep 2008MemMaid 2.3, on the cover disc
      5. Smartphone & Pocket PCJun 2008Tips From The SmartphoneMag.com Forums
      6. PC MagazineMay 2008Schooling Your Smartphone
      7. Eten BlogSep 12, 2007Spring Cleaning With DinarSoft’s MemMaid
      8. Just Another Mobile MondaySep 3, 2007Review: MemMaid 2.0 and/vs SKTools 3.1.9
      9. Smartphone & Pocket PCSep 2007The BEST Applications!
      10. AximSiteAug 18, 2007MemMaid 2.0
      11. Mobile-ViewJul 11, 2007DinarSoft’s MemMaid 2.0 Reviewed!
      12. ClintonFitch.comApr 30, 2007DinarSoft MemMaid 1.73
      13. GadgetMixApr 17, 2007Dinarsoft Memmaid Reviewed!
      14. PocketlandJan 9, 2007MemMaid Cleans House
      15. Technology at PlayJan 2007MemMaid by Dinarsoft
      16. MyPDACafe200MemMaid by DinarSoft
      17. Smartphone & Pocket PC200Expert picks
      18. TucowsOct 30, 2006Favorite - MemMaid
      19. Computer Power UserOct 2006Noteworthy Handheld Software
      20. TucowsSep 11, 2006Shareware Spotlight: MemMaid
      21. Just Another Mobile MondayJul 30, 2006Review - Short Take on MemMaid 1.72
      22. CHIPJun 2006The best software for Windows Mobile (in Russian)
      23. CHIP magazine, RussiaJun 2006MemMaid 1.6, on the cover disc

        MemMaid 1.6, on the cover disc

        From:CHIP magazine, RussiaSent:June 2006About:MemMaidWhere:cover disc

        CHIP's disc page for MemMaid 1.6, as it first appeared
        via the Internet Archive, archive.org item chip-dvd-ru-2006-06
      24. Smartphone & Pocket PCApr 2006Tips and Tricks: move the Temporary Internet Files cache
      25. PDA247Jun 15, 2005MemMaid
      26. PocketnowJan 7, 2005Dinarsoft’s MemMaid v1.4
      27. PocketPC ReviewsNov 4, 2004MemMaid 1.3 from DinarSoft
      28. eMobieSep 9, 2004Dinar Soft’s MemMaid Reviewed
      29. Pocket PC DubaiJul 23, 2004MemMaid Review
      30. GeekzoneJul 1, 2004MemMaid for Pocket PC review

      Download

      Here are all 9 installers the Internet Archive kept, as DinarSoft published them. Take the one marked latest: the .CAB installs straight on the device, the .exe installs from a Windows PC. The multilingual files speak eight languages, and version 1.73 is the one for Pocket PC 2002.

      FileVersionSizeSHA-256
      DinarSoftMemMaid.CABInstall on the Pocket PC · latestRecovered from the Internet Archive (Wayback Machine, September 2, 2017)2.3 build 230, multilingual1,273.3 KB0f2b92154e955a0e56135439b0d2cd98ae991812897899cb6ade8389b9869997
      DinarSoftMemMaid_Setup.exeRun on a Windows PC with ActiveSync · latestRecovered from the Internet Archive (Wayback Machine, September 2, 2017)2.3 build 230, multilingual526.5 KB3f2babff01895d89aa8a1ed726206968a568c8c119d7881b9829a7b133553645
      DinarSoftMemMaid_en.CABInstall on the Pocket PC · latestRecovered from the Internet Archive (Wayback Machine, September 2, 2017)2.3 build 230, English966.3 KB5db295336fdc912e017f7413f8f24f3b635caa8472e1ab84d30d79b41f9dc284
      DinarSoftMemMaid_en_Setup.exeRun on a Windows PC with ActiveSync · latestRecovered from the Internet Archive (Wayback Machine, September 2, 2017)2.3 build 230, English450.5 KBf43515caab0d12975d0ab88a413e46482fbe67ec7bbc299d3037aefe4a1f0e0c
      DinarSoftMemMaid_1_73.CABInstall on the Pocket PCRecovered from the Internet Archive (Wayback Machine, September 2, 2017)1.73444 KBb3c914255cf18a7a5e2f83022c2a0ceab6f7d8ff53d292e1e4ba029c375835fa
      DinarSoftMemMaid_1_73_Setup.exeRun on a Windows PC with ActiveSyncRecovered from the Internet Archive (Wayback Machine, September 2, 2017)1.73258.5 KB58e28b0243c22ecd3305bfe8200d8e571215086dcd4b0010ce4b4bc13a49026d
      DinarSoftMemMaid172.exeRun on a Windows PC with ActiveSyncRecovered from the Internet Archive (Wayback Machine, January 29, 2007)1.72628 KB6f2ad46398be233634343a3991e8bfe5f68d1ff2698bc84b3f3681063075265b
      DinarSoftMemMaid172.CABInstall on the Pocket PCRecovered from the Internet Archive (Wayback Machine, January 29, 2007)1.72496.8 KB4103d7945fe40020ad162049d7a9926b7e0394b2f2ad45690604cca4267dfd18
      CHIP-2006-06_DinarSoftMemMaidPG15a.exeRun on a Windows PC with ActiveSyncRecovered from the Internet Archive (CHIP magazine’s cover disc, June 2006)1.5a, from CHIP magazine’s disc (June 2006)512 KBbd01d928d4738eb5ba4360ac6fdadc60257bcfc13156cd5f49c74be9d5088767
      Check a download

      Pick an installer you downloaded. Your browser computes its SHA-256 fingerprint on your own device, nothing is uploaded, and looks for it among all 24 DinarSoft files. A match means every byte is the one the Internet Archive kept.

      Unlock the full version

      MemMaid: Register

      Every DinarSoft trial asked for an unlock key after 15 days. In 2026 Yasser Awad made MemMaid free, so here is the key, made the way DinarSoft made it.

      Your unlock key TZMP - KZND - REVA - WUHZ

      One key for every device: MemMaid accepts a key made from Yasser’s own name. Open Tools, About, tap Register, and type the four groups of four letters. For MemMaid 1.5a, 1.72 and 1.73 his name makes this key: CDHG - ACZW - NMGJ - QWEC.

      For MemMaid 2.3.

      Install it

      1. On a Pocket PC or Windows Mobile phone. Download the .CAB file marked latest. Copy it to the device on a memory card, through ActiveSync, or download it in Pocket Internet Explorer. Then open File Explorer on the device and tap it. It installs itself, like tapping an .apk on Android.
      2. From a Windows PC. Connect the device through ActiveSync on Windows XP, or Windows Mobile Device Center on later Windows, and run the Setup .exe. It sends the app to the device.
      3. In an emulator. Microsoft’s Device Emulator runs Windows Mobile 5 and 6 on a Windows PC. In its File menu, choose Configure and set a shared folder. The device sees that folder as its Storage Card. Put the .CAB there and tap it in File Explorer.
      4. Unlock it. Open MemMaid, find its Register screen, and type the key from this page.