home *** CD-ROM | disk | FTP | other *** search
- /*
- BASEMOV2.C -- use GetSelectorBase to show segment movement
- within the linear address space
-
- From Chapter 4 of "Undocumented Windows" (Addison Wesley 1992)
- by Andrew Schulman, Dave Maxey and Matt Pietrek
-
- Build using: WINIOBC BASEMOV2 (for Borland C++ v3.00)
- WINIOMS BASEMOV2 (for Microsoft C/SDK)
- */
-
- #include <windows.h>
- #include "wmhandlr.h"
- #include "winio.h"
-
- /* undocumented function */
- DWORD FAR PASCAL GetSelectorBase(WORD sel);
-
- static WORD code, data;
-
- void gc(HWND hwnd, int wID)
- {
- printf("GC(-1) = %lu\n", GlobalCompact(-1L));
- }
-
- long on_time(HWND hwnd, unsigned message, WORD wParam, LONG lParam)
- {
- static DWORD basecode, basedata;
- static DWORD prevcode = -1, prevdata = -1;
-
- if (((basecode = GetSelectorBase(code)) != prevcode) ||
- ((basedata = GetSelectorBase(data)) != prevdata))
- {
- printf("CS (%04x) = %08lx\tDS (%04x) = %08lx\n",
- code, basecode, data, basedata);
- prevcode = basecode;
- prevdata = basedata;
- }
- return 0;
- }
-
- int main()
- {
- HWND hwnd = winio_current();
- HMENU hmenu = CreateMenu();
- HMENU hmenumain = winio_hmenumain(hwnd);
- winio_about("BASEMOV2\nMonitors CS selector base for movement"
- "\n\nFrom Chapter 4 of"
- "\n\"Undocumented Windows\" (Addison-Wesley, 1992)"
- "\nby Andrew Schulman, David Maxey and Matt Pietrek");
- AppendMenu(hmenu, MF_STRING | MF_ENABLED, 1, "GC(-1)");
- InsertMenu(hmenumain, 1, MF_STRING | MF_POPUP | MF_BYPOSITION,
- hmenu, "&Test");
- winio_setmenufunc(hwnd, 1, gc);
- DrawMenuBar(hwnd);
-
- _asm mov code, cs
- _asm mov data, ds
-
- wmhandler_set(hwnd, WM_TIMER, on_time);
- if (! SetTimer(hwnd, 1, 1000, NULL)) // once a second
- fail("can't create timer");
- return 0;
- }
-
-