// // borgmem.c // Write and read the mapped memory // // #include "windows.h" #include "stdio.h" #include "stdlib.h" // // A couple of typedefs mapmem.h depends on from MINIPORT.H & NTDDK.H. // typedef enum _INTERFACE_TYPE { Internal, Isa, Eisa, MicroChannel, TurboChannel, MaximumInterfaceType }INTERFACE_TYPE, *PINTERFACE_TYPE; typedef LARGE_INTEGER PHYSICAL_ADDRESS; #include "mapmem.h" int main(int argc, char *argv[]) { HANDLE hDriver; PHYSICAL_MEMORY_INFO pmi; PVOID pPartyMem; PVOID cbase; DWORD cbReturned; ULONG length; char *aInterfaceType[] = {"Internal", "Isa", "Eisa", "MicroChannel", "TurboChannel" }; if ((hDriver = CreateFile("\\\\.\\MAPMEM", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL )) != ((HANDLE)-1)) printf("\nGood. Retrieved valid handle for MAPMEM driver.\n"); else { printf("Can't get a handle to MAPMEM driver\n"); return 0; } pmi.interfaceType = (INTERFACE_TYPE) 1; pmi.busNumber = (ULONG) 0; pmi.physicalAddress.LowPart = (ULONG) 0xd0000; pmi.physicalAddress.HighPart = (LONG) 0x00000000; length = pmi.length = (ULONG) 8192; printf("\n Ready to write and read BORG MEMORY\n"); printf ("\tinterfaceType = %s\n", aInterfaceType[pmi.interfaceType]); printf ("\tbus number = %d\n", pmi.busNumber); printf ("\tphysicalAddr = %d (0x%x)\n", pmi.physicalAddress.LowPart, pmi.physicalAddress.LowPart); printf ("\tlength = %d (0x%x)\n", pmi.length, pmi.length); if (DeviceIoControl (hDriver, IOCTL_MAPMEM_MAP_USER_PHYSICAL_MEMORY, &pmi, sizeof(PHYSICAL_MEMORY_INFO), &pPartyMem, sizeof(PVOID), &cbReturned, 0 ) ) { ULONG j; UCHAR w; printf ("Start Poking memory.\n"); // // party on memory... // if (pPartyMem) { cbase = pPartyMem; printf("pPartyMem %x\n",pPartyMem); printf ("Display the contents on the BORG 8K byte RAM.\n\n"); printf("Base address is %lx\n", cbase); for (j = 0; j < length; j=j+4) { printf(" %4lu: %u", j, *(((PUCHAR)cbase)+j)); printf("\t %4lu: %u", j+1, *(((PUCHAR)cbase)+j+1)); printf("\t %4lu: %u", j+2, *(((PUCHAR)cbase)+j+2)); printf("\t %4lu: %u\n", j+3, *(((PUCHAR)cbase)+j+3)); } w = 0; for (j = 0; j < length; j=j+1) { *(((PUCHAR)cbase)+j) = w; w++; } for (j = 0; j < length; j=j+4) { printf(" %4lu: %u", j, *(((PUCHAR)cbase)+j)); printf("\t %4lu: %u", j+1, *(((PUCHAR)cbase)+j+1)); printf("\t %4lu: %u", j+2, *(((PUCHAR)cbase)+j+2)); printf("\t %4lu: %u\n", j+3, *(((PUCHAR)cbase)+j+3)); } } else printf ("Failed pPartyMem = NULL\n"); } else printf ("DeviceIoControl failed\n"); printf("Finished.\n"); CloseHandle(hDriver); return 1; }