Annotation of q_a/samples/ddk/mapmem/maptest.c, revision 1.1

1.1     ! root        1: /*++
        !             2: 
        !             3: Copyright (c) 1993  Microsoft Corporation
        !             4: 
        !             5: Module Name:
        !             6: 
        !             7:     maptest.h
        !             8: 
        !             9: Abstract:
        !            10: 
        !            11:     Win32 test app for the MAPMEM driver
        !            12: 
        !            13: Environment:
        !            14: 
        !            15:     User mode
        !            16: 
        !            17: Notes:
        !            18: 
        !            19: 
        !            20: Revision History:
        !            21: 
        !            22: --*/
        !            23: 
        !            24: 
        !            25: #include "windows.h"
        !            26: #include "winioctl.h"
        !            27: #include "stdio.h"
        !            28: #include "stdlib.h"
        !            29: 
        !            30: 
        !            31: //
        !            32: // A couple of typedefs mapmem.h depends on from  MINIPORT.H & NTDDK.H.
        !            33: //
        !            34: 
        !            35: typedef enum _INTERFACE_TYPE
        !            36: {
        !            37:     Internal,
        !            38:     Isa,
        !            39:     Eisa,
        !            40:     MicroChannel,
        !            41:     TurboChannel,
        !            42:     MaximumInterfaceType
        !            43: } INTERFACE_TYPE, *PINTERFACE_TYPE;
        !            44: 
        !            45: typedef LARGE_INTEGER PHYSICAL_ADDRESS;
        !            46: 
        !            47: #include "mapmem.h"
        !            48: 
        !            49: 
        !            50: 
        !            51: int
        !            52: main(
        !            53:     IN int  argc,
        !            54:     IN char *argv[])
        !            55: /*++
        !            56: 
        !            57: Routine Description:
        !            58: 
        !            59:     Tries to open the MAPMEM driver & send it a couple of IOCTLs.
        !            60: 
        !            61: Arguments:
        !            62: 
        !            63:     argc - count of command line arguments
        !            64: 
        !            65:     argv - command line arguments
        !            66: 
        !            67: Return Value:
        !            68: 
        !            69: 
        !            70: --*/
        !            71: {
        !            72:     HANDLE               hDriver;
        !            73:     PHYSICAL_MEMORY_INFO pmi;
        !            74:     PVOID                pPartyMem;
        !            75:     DWORD                cbReturned;
        !            76:     ULONG                length;
        !            77:     char                 *aInterfaceType[] =  {"Internal",
        !            78:                                                "Isa",
        !            79:                                                "Eisa",
        !            80:                                                "MicroChannel",
        !            81:                                                "TurboChannel" };
        !            82:     if (argc < 4)
        !            83:     {
        !            84:         //
        !            85:         // Display usage message
        !            86:         //
        !            87: 
        !            88:         printf ("\nUsage: maptest <InterfaceType> <BusNumber> <BusAddress> <AddressSpace> <length>\n\n");
        !            89:         printf ("\t<InterfaceType>: 1 = Isa, 2 = Eisa, 3 = Microchannel, 4 = TurboChannel\n");
        !            90:         printf ("\t<BusNumber>    : bus number, i.e. 0 for standard x86 ISA systems\n");
        !            91:         printf ("\t<BusAddress>   : physical address to map (hex)\n");
        !            92:         printf ("\t<AddressSpace> : 0 = memory, 1 = I/O\n");
        !            93:         printf ("\t<length>       : length of section to map (hex)\n\n");
        !            94: 
        !            95:         printf ("\tExample: 'maptest 1 0 0xa0000 0 0x2000'\n");
        !            96:         return 0;
        !            97:     }
        !            98: 
        !            99: 
        !           100: 
        !           101:     //
        !           102:     // Parse the args
        !           103:     //
        !           104: 
        !           105:     pmi.InterfaceType       = (INTERFACE_TYPE) atoi (argv[1]);
        !           106:     pmi.BusNumber           = (ULONG)          atoi (argv[2]);
        !           107:     pmi.BusAddress.HighPart = (LONG)           0x00000000;
        !           108:     pmi.AddressSpace        = (LONG)           atoi (argv[4]);
        !           109: 
        !           110:     sscanf (argv[3], "%x", &pmi.BusAddress.LowPart);
        !           111:     sscanf (argv[5], "%x", &pmi.Length);
        !           112: 
        !           113:     printf ("\tInterfaceType = %s\n",   aInterfaceType[pmi.InterfaceType]);
        !           114:     printf ("\tBusNumber     = %d\n",   pmi.BusNumber);
        !           115:     printf ("\tBusAddress    = 0x%x\n", pmi.BusAddress.LowPart, pmi.BusAddress.LowPart);
        !           116:     printf ("\tAddressSpac   = %d\n",   pmi.AddressSpace);
        !           117:     printf ("\tLength        = 0x%x\n", pmi.Length, pmi.Length);
        !           118: 
        !           119:     length = pmi.Length;
        !           120: 
        !           121: 
        !           122: 
        !           123:     //
        !           124:     // Try to open the device
        !           125:     //
        !           126: 
        !           127:     if ((hDriver = CreateFile("\\\\.\\MAPMEM",
        !           128:                               GENERIC_READ | GENERIC_WRITE,
        !           129:                               0,
        !           130:                               NULL,
        !           131:                               OPEN_EXISTING,
        !           132:                               FILE_ATTRIBUTE_NORMAL,
        !           133:                               NULL
        !           134:                               )) != ((HANDLE)-1))
        !           135: 
        !           136:         printf ("\nRetrieved valid handle for MAPMEM driver\n");
        !           137: 
        !           138: 
        !           139:     else
        !           140:     {
        !           141:         printf ("Can't get a handle to MAPMEM driver\n");
        !           142: 
        !           143:         return 0;
        !           144:     }
        !           145: 
        !           146: 
        !           147: 
        !           148:     //
        !           149:     // Try to map the memory
        !           150:     //
        !           151: 
        !           152:     if (DeviceIoControl (hDriver,
        !           153:                          (DWORD) IOCTL_MAPMEM_MAP_USER_PHYSICAL_MEMORY,
        !           154:                          &pmi,
        !           155:                          sizeof(PHYSICAL_MEMORY_INFO),
        !           156:                          &pPartyMem,
        !           157:                          sizeof(PVOID),
        !           158:                          &cbReturned,
        !           159:                          0
        !           160:                          ) )
        !           161:     {
        !           162:         ULONG j;
        !           163: 
        !           164:         //
        !           165:         // party on memory...
        !           166:         //
        !           167: 
        !           168:         if (pPartyMem)
        !           169:         {
        !           170:             UCHAR uc;
        !           171: 
        !           172:             for (j = 0; j < length; j++)
        !           173:             {
        !           174:                 uc = *(((PUCHAR) pPartyMem) + j);
        !           175: 
        !           176:                 *(((PUCHAR) pPartyMem) + j) = 0x47;
        !           177:             }
        !           178: 
        !           179: 
        !           180:             //
        !           181:             // Unmap the memory
        !           182:             //
        !           183: 
        !           184:             DeviceIoControl (hDriver,
        !           185:                              (DWORD) IOCTL_MAPMEM_UNMAP_USER_PHYSICAL_MEMORY,
        !           186:                              &pPartyMem,
        !           187:                              sizeof(PVOID),
        !           188:                              NULL,
        !           189:                              0,
        !           190:                              &cbReturned,
        !           191:                              0
        !           192:                              );
        !           193:         }
        !           194: 
        !           195:         else
        !           196: 
        !           197:             printf ("pPartyMem = NULL\n");
        !           198:     }
        !           199: 
        !           200:     else
        !           201: 
        !           202:         //
        !           203:         // We failed to map, possibly due to resource conflicts (i.e
        !           204:         // some other driver/device already grabbed the section we
        !           205:         // wanted).
        !           206:         //
        !           207: 
        !           208:         printf ("DeviceIoControl failed\n");
        !           209: 
        !           210: 
        !           211:     CloseHandle(hDriver);
        !           212: 
        !           213:     return 1;
        !           214: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.