Annotation of q_a/samples/bpointer/chgdata.c, revision 1.1

1.1     ! root        1: 
        !             2: /******************************************************************************\
        !             3: *       This is a part of the Microsoft Source Code Samples. 
        !             4: *       Copyright (C) 1993 Microsoft Corporation.
        !             5: *       All rights reserved. 
        !             6: *       This source code is only intended as a supplement to 
        !             7: *       Microsoft Development Tools and/or WinHelp documentation.
        !             8: *       See these sources for detailed information regarding the 
        !             9: *       Microsoft samples programs.
        !            10: \******************************************************************************/
        !            11: 
        !            12: /******************************************************************************\
        !            13: *
        !            14: *  PROGRAM:     chgdata.C
        !            15: *  Part of:     BPointer sample application
        !            16: *
        !            17: \******************************************************************************/
        !            18: 
        !            19: #include <windows.h>
        !            20: #include <stdio.h>
        !            21: #include "shrstuff.h"
        !            22: 
        !            23: 
        !            24: void InsertElement(int iValue)
        !            25: {
        !            26:   clRunning->iElement = iValue;
        !            27:   clRunning->clNext = clRunning + 1;
        !            28:   clRunning += 1;
        !            29: }
        !            30: 
        !            31: 
        !            32: int main(void)
        !            33: { HANDLE hFileMapping;
        !            34:   int iCounter;
        !            35:   int iNextElement;
        !            36:   int iInternalCounter = 0;
        !            37: 
        !            38: // Set up the shared memory. By using MapViewOfFileEx(), we force the
        !            39: // memory onto a specific location. This is just to show how based
        !            40: // pointers work for memory that is mapped differenctly in two processes.
        !            41: 
        !            42:       hFileMapping = CreateFileMapping((HANDLE)0xffffffff,NULL,PAGE_READWRITE,0,4096,
        !            43:                                        "DemoMapObject");
        !            44:       if (GetLastError() == ERROR_ALREADY_EXISTS)
        !            45:          { printf("Please close readdata before running this application!");
        !            46:            return(0);
        !            47:          };
        !            48:       if (!hFileMapping)
        !            49:          { printf ("Failed on CreateFileMapping...");
        !            50:            return(0);
        !            51:          };
        !            52:       clBasePt = (CHAINLIST *)MapViewOfFileEx(hFileMapping,FILE_MAP_ALL_ACCESS,0,0,0,
        !            53:                                 (PVOID)0x40000000);
        !            54: 
        !            55: // Now the memory is set up. The following loops prompts the user for new
        !            56: // elements until a 0 is hit. The memory is displayed so that we see that
        !            57: // the offsets are entered into the link fields, ignoring the based
        !            58: // pointers.
        !            59: 
        !            60:       printf("Base address of file mapping in this process: 0x%x\n",(int)clBasePt);
        !            61:       printf("Enter element to insert; 0 terminates: ");
        !            62:       scanf("%d",&iNextElement);
        !            63:       while (iNextElement != 0)
        !            64:        { InsertElement(iNextElement);
        !            65:          iInternalCounter+= sizeof(CHAINLIST);
        !            66:          printf ("Now displaying raw data at address: 0x%x\n",(int)clBasePt);
        !            67:          printf ("You might want to run readdata.exe now.\n");
        !            68:          for (iCounter = 0; iCounter<=iInternalCounter;iCounter++)
        !            69:            printf("%2x ",((char *)clBasePt)[iCounter]);
        !            70:          printf("\n");
        !            71:          printf("Enter next element to insert; 0 terminates: ");
        !            72:          scanf("%d",&iNextElement);
        !            73:        };
        !            74: 
        !            75: // user has entered 0 -- now clean up.
        !            76: 
        !            77:       UnmapViewOfFile(clBasePt);
        !            78:       CloseHandle(hFileMapping);
        !            79:   return(0);
        !            80: }
        !            81: 
        !            82: 
        !            83: 
        !            84: 
        !            85: 
        !            86: 
        !            87: 
        !            88: 
        !            89: 
        !            90: 
        !            91: 
        !            92: 
        !            93: 

unix.superglobalmegacorp.com

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