    ,    

     8 
    
        ,        
  ,      .    
  ,    ,  ,    
       ?  Win32     
          (memory-mapped files). 
       ,     
       .  
     ,      
    , __,   
 .      ,     , 
     . 
       :        .--..-
        -  DLL-.    
  ^  ,    ,   
   ; 
        ,   .    
   /    ; 
         ,    
. ( Win32          
              .) 
               . 

       -  DLL- 

         CreateProcess : 
    1.  -,    CreateProcess.    
,    ,    NULL. 
    2.     . 
    3.      ( 4 ). 
    4.      ,    
  -.     
   -.     -  
000400000.  

    163 

    164 _.____________________________Windows   

             
   /BASE. 
    5. ,   ,    
,  -  ,    . 
     -    ,  
   -   DLL-,   
 .      LoadLibrary  
  (    ) DLL-.  
,    DLL  LoadLibrary,   
,     . 4  5:                              
    1.      ,     
  DLL-.     
   DLL-.   Visual C++  
DLL   010000000.    DLL-   
     /BASE.     
DLL-,     Windows NT  Windows 95,  
 . 
    2.       DLL    
 (   ,   -  -  DLL-), 
    .       
 . -,   DLL    (fixup 
information),     . (  
   DLL     /FIXED.    
DLL,          
.) -,      
(relocation)  DLL.  Windows 95      
    .   Windows NT    
  ,    ,   
  DLL-   . 
    3. ,   ,    
,  DLL-  ,    .  Windows NT  
   - ,  DLL     
  ,  ,      
DLL    . 
      -   -    
DLL-,     ,   
     .   CreateProcess 
 FALSE,      GetLastError. 
      -  DLL-      
   -.  ,   
    . ,    -   
,    ,  .  ,  
          
.         
  ,      
  ,        .   
          
     ,    . 

    _____________________ 8. ,    165 

        DLL     
  
            ,  
       (view) , 
  (image)  ,     
   (  ).    
    .      
    '  
      ,   .    
       .  Win32   (flat) 
  ( 4 ).      
       ,  ,   . 
, ,   ,     ,    
    -'.    ,     
    ,      
 : 

      

    -                   
      2   ^   ---   1 
       3  
      1   "^-   2 
                    2 ' -^    ^-   3 
                         3   '"v,--'"   1 
     2                 ~~7~    .^'V.   ~~,-. 
      1 -^   ^~-   i 

     ,     .  
-    ,    
 ,      : 

                          
                          
      1 ~^ ^-   2 ^ ^   1 
      2 -^'^   1 -r'^~~   2 
      3 -^ ^-   2 -^ ^   3 
      1 ~^/'~~   3 '""^-"'   1 
      2 ""'^ ^~~~   1 ~^ ^"'-   2 

         -  , 
   ,      
  .  .  
^__^    ""'' 
       ,    
,     .  ,   
  -  ,   ,  
  ,    ,     
      
    1.         .  
   ,      .  
   . [,   ,    4  
( xS6, MIPS  PowerPC)   8  ( DEC Alpha).]   
    GetSystemInfo.  -  DLL-   
   . 

    166 _____________________________Windows   

        .      
  .   ,     
  -      : 

                                                  
                                    
      1 -~^ ^   2 ^ ^   1 
      2 ~^^~~~   1 ^^~~-   2 
      3 -^^ -   2 ^-,,   3 
      1 -^^/'~~   3 -^ ^-'^  1 
      2 ' ^~~~   I ^-^"  2 
       

              
   2.     
  ,         
,   .      , 
      . 
          . ,  
  ,      .  ,  
     .   ,  
           
.      ,    
 ,     .   , 
     .    
 ,     ,      
      2. 
            . 
         , 
       .   
 ,   .       
     .     
,           
.     ,      
      . 
     Windows NT  Windows 95 ,  ,   
          .  
     Windows NT    
,   Windows 95       .   
            
(    ),  Windows NT  Windows 95   . 
    2. :  -  DLL- ,   , 
     .  ,    
    ,    
^pragma data_seg( ).     
/SI:.CrT^:u,ampliym,   ,      
     ( ) .   
  ,   ;   
     .     
,   RSW (read/shared/write).   , 
       DLL, . 
 12. 

    . 8. ,    167 


     ,    

      -  DLL-    
 ,    .    
      .   
      . 
            
,     ,   
     . 

     1.  ,   

     (  )     , 
    .  ,   
   , .     , 
     ,      . . 
  ,        , 
   .   ,     
  . 
             
. ,       ,   
.  ,   .     2 ?  
        . , 
      . 
    -,   _>,    
.         
(   ),      . 

     2.  ,   

              . 
     , , 8 . 
     8   ,    
 8   ,        
        .   
,       . ,    
   8 ,    ,    . 
 ,       . 
       ,      
,      8 .      ,   
 . -,   ,    :  
        
 . -,      
   .     400 , 
      ,     
    800 , . .  400  ,   . 
    ...   . 

     3.  ,   

        , ,  8   
  8     ,   8    .  
      :   
   , 

    168 ______________________________Windows   

          .       
     . ,  
 -   ,      16 , 
    ,    .     
 ? 
              
  ,           
 .    ,       
,   16 .  , -,    
. ,  ,   ,     ,  
  . 
       ,     ,   
,   . 

     4.      

      ,      
 .  ,      
     ,     , 
      .        , 
   - _strrev     
  . 
         ,       
  :    ,      
,       . .,  . . , ,  
 ,  -  , - , 
      . 

         

         : 
    1.      ,   , 
       . 
    2.     ,     
     . 
    3.  :       
       . 
          ,     : 
    1.         
    . 
    2.   . 
    3.    . 
            . 

    _____________________ 8. ,    169 



     1.       

           CreateFile: 

    HANDLE CreateFlle(LPCSTR IpFileName, DWORD dwDesiredAccess, 
    DWORD dwShareMode, LPSECURITY_ATTRIBUTES IpSecurityAttributes, 
    DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes, 
    HANDLE hTemplateFile): 

    /\.    _..^[    ,  CreateFile 
 / ,'^.   "'"111  .  OpenFile  
16- Win^\ dows   Win32 API   . 
 ,  OpenFile      
  CreateFile. 
     ,   CreateFile  .    
   : IpFileName, dwDesiredAccess  dwShareMode.   
          15. 
     , , ,  , IpFileName,  
     (    ). 
  dwDesiredAccess       .  
    : 

                               

                                            
.   ,       
 .^ 
    GENERIC_READ                      . 
    GENERIC_WRITE                      . 
    GENERIC_READ : GENERIC_WRITE        . 
               
  ,     GENERIC_READ (  
),    GENERIC_READ ! GENERIC_WRITE (/). 
     , dwShareMode,       : 

                                    

                                                . 
    FILE_SHARE_READ                           
    GENERIC_WRITE  . 
    FILE_SHARE_WRITE                          
    GENERIC_READ  . 
    FILE_SHARE_READ ! FILE_SHARE_WRITE         
  . 
        , CreateFile   ,  
  ' INVALID_HANDLE_VALUE. 

    170 ______________________________Windows   

      Win32,     ,  
   NULL.  CreateFik      
  INVALID_HANDLE_VALUE,   OxFFFFFFFF. 

     2.      

     CreateFik,    ,   
    (file mapping):  ,  ,   
CD-ROM    .   ,    
     .     CreateFileMapping: 

    HANDLE CreateFileMapping(HANDLE hFile, LPSECURITY_ATTRIBUTES Ipsa, 
    DWORD fdwProtect, DWORD dwMaximumSizeHigh, 
    DWORD dwMaximumSizeLow, LPSTR IpszMapName); 

     , hFile,   ,    
    .      
 ,  CreateFile.  Ipsa     
SECURITY_ATTRIBUTES;        
 NULL. 
           ,  ,   
,        
   .    ,     
      ,       
   .       
            ( 
 ,     ).       
      ,  
    ,    
.   fdwProtect     .  
 : 

           

    PAGE_READONLY          
,     .      
   CreateFile  GENERIC_READ. 
    PAGE_READWRITE         
,        .      
   CreateFile  GENERIC_READ ! GENERIC_WRITE. 
    PAGE_WRITECOPY         
,        .     
  .         CreateFile 
 GENERIC_READ,  GENERIC_READ ! GENERIC_WRITE. 
     Windows 95  CreateFileMapping    PAGE_WRITECOPY; 
          . 
        ,   
      . 
      .   
 PAGE_WRITECOPY   Windows NT   Windows 95. 

    . 8. ,    171 

         ,    
   (section attributes);      
fdwProtect  CreateFileMapping   OR.  (section) 
       (memory mapping). 
       , SEQJMOCACHE,  ,   
 ,   ,   .   
            
.  ,     PAGE_NOCACHE,   
        . 

    Windows 95   SEC_NOCACHE. 

     , SEC_IMAGE,  ,     
Win32-nepeHO   (Win32 portable executable file, -). 
      ,   
 ,  ,      
    (mapped image). ,   
-     PAGE_EXECUTE_READ,    
      PAGE_READWRITE.  SEC_IMAGE  
        
  . 

    Windows 95   SEC_IMAGE. 

       (SEC_RESERVE  SEC_COMMIT)   
        .    
          
. CreateFileMappmg  . 
         (dwMaximumSizeHigh  
dwMaximumSizeLow)  .   CreateFileMappmg  
,          
.          .  
 Win32    ,    
64- ,   dwMaximumSizeHigh  ~32 
,   dwMaximumSizeLow  32   .   
 4    dwMaximumSizeHigh   .  
64-  ,  Win32    
  18  (exabyte, ). (1   ,  1 
152 921 504 606 846 976 .) 
         ,     
 ,     .    ,  
     -  ,   
 .         , 
    . 
          , ,  , : 
-    . , , ,  Win32    
      18 ,    , , 
       , 
 4 ,    -   2 ?   
     . 

    172 _____________________________Windows   

       ,    CreateFile  
CreateFileMapping,   .  ,  , 
  (   -)     
.    ,     
     :\.    
,       . 

    int WINAPI WinMain(HINSTANCE hInstExe, HINSTANCE hInstExePrev, 
    LPSTR pszCmdLine, int nCmdShow) { 
    //    ,   :\ 
    //    "MMFTest.Dat" 
    HANDLE hrile = CreateFlle("C:\\MMFTest.Dat", 
    GENERIC_READ ; GENERIC_WRITE, 
    FILE_SHARE_REAO ; FILE_SHARE_WRITE. NULL. CREATE_ALWAYS, 
    FILE_ATTRIBUTE_NORMAL, NULL): 
    //      MMFTest.Dat , 
    //     
    HANDLE nfilemap = CreateFileMapping(hfile, NULL, PAGE_READWRITE, 
    0, 100, NULL): 
    
    //       MMFTest.Dat 
    //   100  
    
    //  
    CloseHandle(hfilemap); 
    CloseHandle(hfile); 
    
    //     MMFTest,Dat  
    //       100  
    return(O); 
    ,} 

     CreateFileMapping   PAGE_READWRITE   
,        ,   
 dwMaximumSizeHigh  dwMaximumSizeLow.     , 
CreateFileMapping      .   
,          
   .        
PAGE_READONLY  PAGE_WRITECOPY,  ,    
CreateFileMapping,         ( 
    -   ). 
       CreateFileMapping  IpszMapName    
   ;        
,         ,   
   . (      
  2,     .)     
     ,      
 NULL.                                     ' 
              
  .     ,   
 (NULL).         
 CreateFile:      NULL,   
INVALID_HANDLE_VALUE (  OxFFFFFFFF). 

     8. ,    173 


     3.        

        , ,  ,  
     ,     
,   .    Map ViewOfnie:'          '"~ 

    LPVOID MapViewOfFile(HANDLE hFileMapplngObject, 
    DWORD dwDesiredAccess, DWORD dwFileOffsetHigh, 
    DWORD dwFileOffsetLow, DWORD dwNumber-OfBytesToMap); 

     hFileMappingObject     
,     CreateFileMapping,  
OpenFileMapping (    ).  dwDesiredAccess 
    .  :   , 
       .      : 

                    

    FILE_MAP_WRITE             .  
     CreateFileMapping  PAGE_READWRITE. 
    FILE_MAP_READ            .   
  CreateFileMapping     : PAGE_READONLY, 
PAGE_READWRITE  PAGE_WRITECOPY. 
    FILE_MAP_ALL_ACCESS  To ,   FILE_MAP_READ. 
    FILE_MAP_COPY             .  
     .     
CreateFileMapping     : PAGE_READONLY, 
PAGE_READWRITE  PAGE_WRITECOPY. 
        ,  Win32   
    .   ,   , 
      . 
            
       .    
       . , 
     ,      
 (view)  - , , ,   
  Map ViewOfFile. 
          ,  
  . -,  ,      
  .     dwFileOffsetHigh  
dwFileOffsetLow.  Win32     18 , 
      64- :  32  
   dwFileOffsetHigh,   32    
dwFileOffsetLow. ,          
      . (   
   Win32   64 .)    
 .      6. 
    -,      , . .  
        .  
 ,       ,   
 .     dwNumberOfBytesToMap, 
   32-

    174 _______________________     __ Windows   

     ,        4 .  
     0,    , 
       . 

     Windows 95,  Map ViewOfFile   ,    
    ,  NULL    
,    _. 

    wows/  Windows NT  Map ViewOfFile  ,   
   ,      
   . 

       MapViewOfFile   FILE_MAP_COPY,   
    .    
  dwNumberOfBytesToMap.      
  , ,    ,  
.          
  ,     ,    
        ,    
        .    
          
      . 
       ,       
PAGE_WRITECOPY  PAGE_READWRITE.  : 

    HANDLE hFile. hFileMapping: 
    BYTE bSomeByte. *pbFile; 
    
    //  ,       
    hFile = CreateFile(lpszName, GENERIC_READ : GENERIC_WRITE, 0, NULL, 
    OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); 
    
    //     " " 
    hFileMapping = CreateFileMappingChFile, NULL. PAGE + WRITECOPY, , 0, NULL); 
    //      "  "; 
    //        , 
    //      .    
    //     PAGE_WRITECOPY. 
    pbFile = (PBYTE) MapViewOfFile(hFileMapping, FILE_MAP_COPY, , , ): 
    
    //      
    bSomeByte = pbFile[0]; 
    
    //      ,    . 
    //     PAGE_WRITECOPY. 
    
    //      
    pbFile[0] = 0: 
    //      ,    , 
    //    ,     
    //    ,     


     8. ,    175 
    

    //  ,     ()    . 
    //     PAGE_READWRITE. 
    
    //        
    pbFile[1] = 0; 
    
    //         PAGE_READWRITE, 
    //        
    
    //      ,  . 
    //  UnmapViewOfFile    . 
    UnmapViewOfFile(pbFile); 
    
    //   ,    ,   . 
    // ,      , . 
    
    // ",  " 
    CloseHandle(hFileMapping); 
    CloseHandle(hFile): 

    ~7   . Windows 95     
    .     
      . 

     4.        

         (    
 ) ,    : 

    BOOL UnmapViewOfFile(LPVOID IpBaseAddress); 

      , IpBaseAddress,    
  .     ,  
  MapViewOfFile.     UnmapViewOfFile.  
   ,       .  
:   Map ViewOfFile       
   ,      . 
             
           
 (disk image of file).   ^    , 
 UnmapViewOfFile,     , 
  ,    .    
         , 
  Flush ViewOfFile: 

    BOOL FlushViewOfFileCLPVOID IpBaseAddress, 
    DWORD dwNumberOfBytesToFlusn); 

        ,    
  MapViewOfFile;  ,    , 
  .  FlushViewOfFile     
,         . 
       ,      
 , FlushViewOfFile ,     
   

    176 _____________________________Windows   

    .    ,  ,     
,     ,       
.          
     FILE_FLAG_WRITE_THROUGH.  
      FlusbViewOfFile    
       . 
     UnmapViewOfFile   .    
    FILE_MAP_COPY,  ,    
 ,        ,  
  .      UnmapViewOfFile  
   ,        
 .        . 
           . 
?           
   PAGE_READWRITE      
 ! i    FILE_MAP_WRITE.   
  ,      
PAGE_READWRITE.     ,    
  :    .     ,  
  .        
  MoveMemory       
  .       
PAGE_READWRITE,  MoveMemory    .   
           . 
    Windows 95       , 
     ,   ,  
      PAGE_READWRITE.   
  . 

     5  6.       

          ,     
 . ,       
,   .      - 
,      .  
        ,  
   ,     .   
    ,    CloseHandle. 
         ,    : 

    HANDLE hFile, hFileMapping: 
    PVOID pFile; 
    hFile = CreateFile(..,); 
    hFileMapping = CreateFileMapping(hFile,... ); 
    pFile = MapViewOfFile(hFileMapping,... ); 
    //   ,    


    _____________________ 8. ,    177 


    UnmapViewOfFile(pFile); 
    CloseHandle(hFileMapping)'9 
    CloseHandle(hFile);      J 

           
.      ,    MapViewOfFile  
         
.     ,     
  : 

    HANDLE hFile, hFileMapping; 
    PVOID pFile; 
    hFile = CreateFile(,,, ): 
    hFileMapping = CreateFileMapping(hFile,...); 
    CloseHandle(hFile); 
    pFile = MapViewOfFile(hFileMapping.,., ): 
    CloseHandle(hFileMapping): 
    //   ,    
    UnmapViewOfFile(pFile): 

             :  
,           
     .   
       ,   
   ,      . 
              
      ,  
 CloseHandle           
   CreateFileMapping  MapViewOfFile. 

       

       ,      
 4    18 .  ,   .   
   ,   ,    
 .    ,      
.      ,    
       ,    
  . ,      , 
  ,   ,   ,   
    4 . 
          8 .    
,     ,   
  /     ASCII- (,    
 ): 

    __int64 WINAPI CountJs (void) { 
    HANDLE hFile, hFileMapping; 
    PBYTE pbFile; 
    SYSTEM_INFO si; 
    __int64 qwFlleSize, qwFiledffset = 0, qwNumOfJs = 0; 

    . . . 


    178 ____________________________Windows   


    DWORD dwFileSizeHigh: 
    DWORD dwByte, dwBytesInBlock; 
    DWORD dwErr: 
    //         , 
    //         
    //    ,     
    GetSystemInfo(&si); 
    
    //    
    hFile = CreateFile("c:\\HugeFile.Big", GENERIC_READ, 
    FILE_SHARE_READ, NULL, OPEN_EXISTING, 
    FILE_FLAG_SEQUENTIAL_SCAN, NULL); 
    
    if(hFile == INVALID_HANDLE_VALUE) 
    return(O); 
    
    //   " " 
    hFileMapping = CreateFileMapping(hFile, NULL, PAGE_READONLY, 0. 0. NULL): 
    
    //     ""     
    CloseHandle(hFile): 
    
    if (hFileMapping == NULL ) { 
    return(O): 
    qwFileSize = GetFileSize(hFile, &dwFileSizeHigh); 
    qwFileSize += (((__int64) dwFileSizeHigh)  32); 
    while (qwFileSize > 0) { 
    
    // ,     
    if (qwFileSize < si.dwAllocationGranularity) 
    dwBytesInBlock = (DWORD) qwFileSize; 
    else 
    dwBytesInBlock = si.dwAllocationGranularity; 
    pbFile = MapViewOfFile(hFileMapping, 
    
    FILE_MAP_READ,                      //    
    (DWORD) (qwFileOffset  32),       //   
    (DWORD) (qwFileOffset & OxFFFFFFFF),//   
    dwBytesInBlock);                    //    
    
    //    J    
    for (dwByte = 0; dwByte < dwBytesInBlock; dwByte++) { 
    if (pbFile[dwByte] == J') 
    qwNumOfJs++; 
    } 
    //   ,     
    //       
    UnmapViewOfFile(pbFile); 


    ______________________ 8. ,    179 
    

    //        
    qwFileOffset += dwBytesInBlock; 
    qwFileSize -= dwBytesInBlock: 
    CloseHandle(hFileMapping); 
    return(qwNumOfJs); 
    } 

         64  (   
  )  .  , MapViewOfFile 
,            
  .     
   ,      /, 
    ,   .   
  64- ,     . 

        

             
  . ,     10  
,     4       .   
     ,    
()  . ,    
    ,        
.   ,  ,     
     ,    
   . ,     
       ,  
-          
     .    , 
          
   . 

    /\    Win32           
/ ' \   .        ,  
 /\     .  
 Win32     ^....
11 . 

    CreateFile   ,     
.           
 (   ReadFile  WriteFile). ,   
          ,  
   .       ;   
     ,    
   .   , ,    
  ,   .   ,    
  ReadFile,   ,    
       WriteFile,    , 
  ,     . ,  
   CreateFile,   0   
fdwShareMode.     ,      
         . 

    180 ______________________________Windows   


    VVINDOW^ Windows 95        , 
 \ / 

    Windows NT.      : 
    
    BYTE bBuf[1]:           ) 
    DWORD dwNumBytesRead; 
    HANDLE hFile = CreateFlle(...); 
    HANDLE hFileMap = CreateFlleMapping(hFile,...); 
    PBYTE pbData = MapViewOfFile(nFileMap,...); 
    
    //        "X" 
    pb0ata[0] = ''; 
    
    //       
    ReadFile(hFile, bBuf, 1, &dwNumBytesRead, NULL); 
    
    // :      
    //  ,    
    if (pbData[0] == bBuf[0]) { 
    
    //   Windows 95,    
    } else { 
    
    //  Windows 95 
    } 

         ,   , ,  
      . Windows NT 
  , a Windows 95  .    
       ,   
. ,      ,    
      . 
          Windows NT ,   
     X,   Windows 95    . 
               
 ,       .   ^  
       , 
   ,       
  .      
,  ,       ,    
 . 

    - FileRev 

     FileRev (FILEREV.EXE) (.   . 8-1) , 
         
  ANSI-  Unicode-.      
     FILEREV  -,   
.  .    : 

    _____________________  8. ,    181 

          Reverse File Contents ( 
 ),   ,      
  .       .  
     (ANSI  Unicode), FileRev  
 IsTextUnicode (.  17). 

    ^VINDOW^  Windows 95  IsTextUnicode,  ,  ;  
 \ /  FALSE,    GetLastError  
ERROR_CALL_NOT_ v    IMPLEMENTED.  ,   FileRev, 
  Windows 95,  ,      ANSI-. 

       Reverse File Contents      
 FILEREV.DAT.    ,     , 
       .    
 FileReverse          
 CreateFile,  FILEREV.DAT    . 
       ,       
  _strrev    .     
     .      
  ,  FileRev     
.      GetFileSize: 

    DwFileSize = GetFile3ize(hFiie, NULL); 

    ,   ,     ,  
CreateFileMapping.      dwFikSize   
 ,        . 
(    , -    
,    ,   .) 
   ,      
   .  IpvFile  
,   MapViewOfFile,      
 . 
               : 

    ((LPSTR) lpvFiie)[dwFile8ize / sizeof(CHAR)] = 0; 
    _strrev(lpvFlle); 

             
('\')    ('\').  ,    _strrev3TH 
   .       
      \\   \\.  
    : 
    
    //    '\' 
    Ipch = strchr(lpvFile, '\n'); 
    while (Ipch != NULL) { 
    *lpch++ = '\r';     //  '\'  '\r' 
    
    *lpch++ = '\n';     //  '\'  '\n' 
    //    
    Ipch = strchr(lpch, '\n'); 

      ,      
         
 .  ,     , 
    (_strrev     ).   
    , 

    182 ______________________________Windows   

          1  ,    
  FileRev         
.     ,     
   ,     . 
            (  
    )    SetEndOfFile: 

    SetFilePointer(hFile, dwFileSize, NULL, FILE_BEGIN); 
    SetEndOfFile(hFile); 

    /\    ,  SetEndOfFile      
/ ' \      ,   
 /\ ERROR_USER_MAPPED_FILE.   ,   
       ,    
 . 

    ,   FileRev,     Notepad, 
     .      
 FileRev     FILEREV.: 

    ' Edit Search Help 
     
    /////////////////////// eliF fO dnE ///////////////////////   J 
    ) 
    ;)B(nruter 
    ;)corP_9lD .LI-UN 
    
    ,)UERELIF_DDI(ECRUOSERTNIEKflM ,exEtsnih(xoBgolaiD 
    ;)(59NIlilREDNUEDOCINUFINRfllilhc 
    ( )uohSdlCn tni .eniLdmCzsp RTSTPL ,uerPtsnih ECNflTSNIH 
    ,exEtsnih ECNflTSNIH( niaMnililt_ IPflNIIil tni 
    ///////////////////////////////////////////////////////////// 
    ) 
    ;)ESLftF(nruter                                                  ,1 
    ,l                  __                 l_____^T 
    FILEREV.C 
    /*.***,*,..*...,,,....*...**..***.****.**********.,*,,.**...,..*.....,,*.,,,.. 
    
    : FileRev. 
    : Copyright  1995-1997,   (Jeffrey Richter) 
    #********************************************************.tt***-..**t**-t/ 
    ^include "..\CmnHdr.H"           /* .   */ 
    ffinclude <windows.h> 
    #include <windowsx.h> 
    ffinclude <tchar.h> 
    #include <string.h>              //  _strrev 
    #include "Resource.H" 
    //////////////////////'-  . 1.1/11//.1\ ;.-,.i'. "^1:     '  1 

    CM. Ulftl. CHlp. 

    . 8-1.   FileRev 


    _____________________ 8. ,    183 


    ) 

    . 8-1 () 

    ffdefine FILENAME . _TEXT("FILEREV.DAT") 
    1|^ BOOL FileReverse (LPCTSTR pszPathname, PBOOL pfIsTextUnicode) { 
    ^ili';. 
    Ill     HANDLE hFile, hFileMap; 
    jl'    LPVOID IpvFile; 
    ||    LPSTR IpchANSI;     //  ANSI 
    ||||'    LPWSTR IpchUnicode; //  Unicode 
    |    DWORD dwFileSize; 
    ill    int iUnicodeTestFlags = -1:      //    
    |''    // ,    Unicode 
    :    *pfIsTextUnicode = FALSE; 
    jit    //       
    ||r    hFile = CreateFile(pszPathname, GENERIC_WRITE ; GENERIC_READ, 
    |||       , NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); 
    if (hFile == INVALID_HANOLE_VALUE) { 
    //     
    chMB(__TEXT("File could not be opened.")); 
    return(FALSE); 
    i 
    
    //   ;  ,    4  
    dwFileSize = GetFileSize(hFile, NULL); 
    
    //   " ".   1  ,   
    // ,           
    //   .    ,  
    //   ANSI-  Unicode-,      
    //  WCHAR  CHAR. 
    
    hFileMap = CreateFileMapping(hFile, NULL, PAGE_READWRITE, 
    0, dwFileSize + sizeof(WCHAR), NULL): 
    if (hFileMap == NULL) { 
    //   " "   
    chMB(__TEXT("File map could not be opened.")); 
    CloseHandle(hFile); 
    return(FALSE); 
    } 
    
    //  ,         
    IpvFile = MapViewOfFile(hFileMap, FILE_MAP_WRITE, 0. , 0); 

    CM. t7;f(i. i'lnp. 


    184 ______________________________Windows   


    . 8-1 () 

    if (IpvFile == NULL) { 
    //      
    chMB(__TEXT("Could not map view of file.")); 
    CloseHandle(hFileMap); 
    CloseHandle(hFile); 
    return(FALSE); 
    } 
    /'/     ,    
    //    ; ANSI  Unicode 
    *pfIsTextUnicode = IsTextUnicode(lpvFile, dwFileSize, &iUnicodeTestFlags); 
    if (!*pfIsTextUnicode) { 
    //         
    // Unicode- ANSI-,    ( ANSI-   
    //  Unicode-)  ANSI- 
    
    //       
    IpchANSI = (LPSTR) IpvFile; 
    IpchANSICdwFileSize / sizeof(CHAR)] = 0; 
    
    // ""   
    strrev(lpchANSI): 
    
    //    "\\"   "\\",  
    //      
    //     
    IpchANSI = strchrO.pchANSI, '\n'):  //    '\' 
    
    while (IpchANSI i= NULL) { 
    //  ... 
    *lpchANSI++ = 'V: //  '\'  '\r' 
    
    *lpchANSI++ = '\n'; //  '\'  '\' 
    IpchANSI = strchr(lpchANSI, '\n'):  //    
    } 
    } else { 
    //         
    // ANSI- Unicode-,    ( ANSI-   
    //  Unicode-)  Unicode- 
    
    //       
    IpchUnicode = (LPWSTR) IpvFile: 
    lpchUnicode[dwFileSize / sizeof(WCHAR)] = 0; 
    if ((lUnicodeTestFlags & IS_TEXT_UNICODE_SIGNATURE) != 0) { 
    //    -    Unicode (OxFEFF), 

    . . . 


    _____.._.___________ 8. ,    185 


    . 8-1 () 

    I /        
    lpchUnicode++; 
    1 
    // ""   
    _wcsrev(lpchUnicode): 
    //    "\\"   "\\",  
    //      
    //     
    IpchUnicode = wcscnr(lpchUnicode, L'\n'); //    '\' 
    
    while (IpchUnicode != NULL) { 
    //  ... 
    lpchUnicode++ = L'V://  '\'  'V 
    *lpchUnicode++ = L'\n';//  '\'  '\' 
    IpchUnicode = wcschr(lpchUnicode, L'\n'); //    
    } 
    
    //     
    UnmapViewOfFile(lpvFile); 
    CloseHandle(hFileMap); 
    //      ,     
    //    ,     ,    
    //        
    SetFllePointerChFile, dwFileSize, NULL, FILE_BEGIN); 
    // SetEndOfFile       
    // " " 
    SetEndOfFile(hFile): 
    CloseHandle(hFile); 
    return(TRUE): 
    
    /////////////////////////////////////////////////////////////////////////////// 
    BOOL Dlg_OnInitDialog (HWND hwnd, HWND hwndFocus, LPARAM IParam) { 
    
    //      
    chSETDLGICONS(hwnd, IDI_FILEREV, IDI_FILEREV); 
    //    -  ,   
    //   
    EnableWindow(GetDlgItem(hwnd, IDC_REVERSE), FALSE); 

    . . . 


    186 _____________________________Windows   


    . 8-1 () 

    relurin. I HUL); 
    1 
    { 
    i / i / / i i i : 
    void Dlg_OnCommand (HWND nwnd, int id, HWND hwndCtl. UINT codeNotify) { 
    TCHAR szPathnameLMAX_PATH]; 
    _OPENFILENAME ofn: 
    BOOL fIsTextUnicode; 
    STARTUPINFO si: 
    PROCESS_INFORMATION pi; 
    switch (id) { 
    case IDC_FILENAME: 
    EnableWindow(GetDlgItem(hwnd, IDC_REVERSE), 
    Edit_GetTextLength(hwndCtl) > O): 
    break; 
    case IDC_FILESELECT: 
    chINITSTRUCT(ofn, TRUE); 
    ofn,hwndOwner = hwnd; 
    ofn.IpstrFile = szPathname: 
    ofn.lpstrFile[0] = 0; 
    . ofn.nMaxFile = chDIMOF(szPathname): 
    ofn. lpstr- = __TEXT( "Select file for reversing"); 
    ofn.Flags = OFN_EXPLORER i OFN_FILEMUSTEXIST; 
    GetOpenFileName(&ofn); 
    SetDlgItemText(hwnd, IDC_FILENAME, ofn.IpstrFile); 
    Set Focus(GetDlgItem(hwnd, IDC_REVERSE)); 
    break; 
    case IDC_REVERSE: 
    GetDlgIternText(hwnd, IDC_FILENAME, szPathname, chDIMOF(szPathname)): 
    //     FILEREV.DAT,     
    if (!CopyFile(szPathname, FILENAME, FALSE)) { 
    //    
    chMB(__TEXT("New file could not be created.")): 
    break: 
    if (FileReverse(FILENAME, OTsTextUnicode)) { 
    // ,        
    SetDlgItemText(hwnd, IDC_TEXTTYPE, 
    fIsTextUnicode ? __TEXT("Unicode") : __TEXT("ANSI")); 
    //  Notepad,      

    . . . 


    ______________________ 8. ,    187 


    . 8-1 () 

    ChINITSTRUCT(si, TRUE): 
    // si.wShowWindow = SW_SHOW; 
    // sl.dwFlags = STARTF_USESHOWWINDOW: 
    if (CreateProcess(NULL, _TEXT("NOTEPAD.EXE ") FILENAME, 
    NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi)) ; 
    CloseHandle(pi.hThread): 
    CloseHandle(pi.hProcess): 
    ^ break: 
    case IDCANCEL: 
    EndDialog(hwnd, id); 
    break; 
    i / 
    BOOL CALLBACK Dig^Proc (HWNU hwnd, UINT uMsg, WPARAM wParam, LPARAM 
IParaifi) { 
    switch (uMsg) { 
    chHANDLE_DLGMSG(hwnd, WM_INITOIALOG,  Dlg_0nlnit0ialog); 
    chHANDLE_DLGMSG(hwnd, WM_COMMAND,  Dlg_OnCom[nand); 
    } 
    return(FALSF); 
    int W1NAPI _tWinMain (HINSTANCE hinstExe, 
    HINSTANCE hinstPrev, LPTSTR pszCmdLine, int nCmdShow) { 
    chWARNIFUNICODEUNDERWIN95(): 
    DialogBox(hinstExe, MAKEINTRESOURCE(IDD_FILEREV). NULL, Dlg_Proc): 
    return(O); 
    } 
    //////////////////////////////////   i'1111111//111111 
/1111111111 / i 11 11 


      ,    

    ,     VirtualAlloc    , 
   ?       
         
MapViewOfFile  Map ViewOfFileEx: _ 

    LPVOID MapViewOfFileEx(HANDLE hFileMappingObject, 
    DWORD dwDesiredAccess, DWORD dwFlleOffsetRigh, 
    DWORD dwFileOffsetLow, DWORD dwNumberOfBytesToMap, 
    I D\/m"n 1  - -- \ 


    188 ______________________________Windows   


             
 Map ViewOfFile,    IpBaseAddress.     
  ,   .     VirtualAlloc, 
     ,    
   ( 64 ),  MapViewOfFileEx  NULL,  
   . 
        ,     
,  MapViewOfFileEx  Windows NT   ,  GetLastError 
  1132 (ERROR_MAPPED_ALIGNMENT),   Windows 95    
   ,    . 
              ( 
'- ,         
  ),    NULL.  
        ,   
   .     NULL   IpBaseAddress, 
    Map ViewOfFile. 
    MapViewOfFileEx ,       
        . 
. ,        ; 
           
,      .    
  .   ,  ,    . 
       ,      
  ,     .    
,   ,   . 
            ,  
     ,  ,    
          . 
    .    ,  
    ,     ,  
  ...   .   ,     
      . 
        . -,  ,    
     ,   MapViewOfFileEx 
 Map ViewOfFile.       ,  
          
 .        ( 
    ),          
,      -   (,  
  ). 
       . ,   ,    
        .  
,      ,    
     .   ,  
  :        
   (      , , 
  ).  ,     
  .        ,  
  Microsoft      
  (based-pointers),      _based. 

    VwiNDows/ \95/   Windows 95   MapViewOfFileEx   
    080000000  OxBFFFFFFF,    NULL. 

    ______________________ 8. ,    189 


    VwiNDowsy  Windows NT   MapViewOfFileEx    
 \NL/   000010000  Ox7FFFFFFF,    NULL. 


          Win32 

        Windows NT  Windows 95  
-.      ,      
      . 
     Windows 95       
,     080000000  OxBFFFFFFF. , 
 Map ViewOfFile       -   
 .  :       
Win32-npoueccaM.  ,        
  ,      
  Win32-npoueccaM,  ,      
  .     MapViewOfFile,    
  , Windows 95   ,  , 
    .        
       . 
     Windows 95     MapViewOfFile ,  
-  ,        
.       ,     
         .  
        : 
           Windows NT (    
  ); 
         UnmapViewOfFile,   
 .  ,      
   ,  -  ,  
 . 
            , 
     MapViewOfFile.     
    .      
 UnmapViewOfFile,   ,  ,  
 ,       UnmapViewOfFile.  
 MapViewOfFile,      ,   .  
,         . 
     Windows NT      ,   
Windows 95:           
 MapViewOfFile.         
     ,    
      .     
       ,     
 MapViewOfFile,         
   . 
    ,    MapViewOfFile  ,   
   ,       ,    
 ,          .  
  Windows 95 , 

    190 _____________________________Windows   

        MapViewOfFile, ,   
           Windows NT! 
            Windows NT 
 Windows 95.    ,    
   : 

    #define STRICT 
    ffinclude <Windows.h> 
    int WINAPI WinMain(HINSTANCE hinstExe, HINSTANCE hinstPrev, 
    LPSTR IpCmdLine, int nCmdShow) { 
    HANDLE hFile, hFileMapping; 
    BYTE *pbFile, *pbFile2; 
    //   ;     64  
    hFile = CreateFiledpCmdLine, GENERIC_READ ; GENERIC_WRITE, 0, 
    NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NOF!MAL, NULL): 
    
    //      " " 
    hFlleMapping = CreateFileMappingChFile, NULL, PAGE_READWRITE, 0, , NULL); 
    
    //   ,     
    pbFile = (PBYTE) MapViewOfFile(hFileMapping, FILE_MAP_WRITE, 0, , ): 
    
    //    ,    G^Jub 
    pbFile2 = (PBYTE) MapViewOfFile(hFileMapping, FILE_MAP_WRITE, 0, 65536, 0); 
    if (poFile + 65536 == pbFile2) { 
    //   ,      
    // ,     Windows 95 
    MessageBox(NULL, "We are running under Windows 95", NULL, MB_OK); 
    ise { 
    //    ,     
    //    ,     Windows NT 
    MessageBox(NULL. "We are running under Windows NT", NULL. MB_OK); 
    } 
    UnmapViewOfFile(pbFile2); 
    UnmapViewOfFile(pbFile); 
    CloseHandle(hFileMapping); 
    CloseHandle(hFile); 
    rRtlim(O') ; 

          Windows 95,   
         
  .  ,     MapViewOfFile 
     .    
     1   ,   ,  
     64 . 
      -   MapViewOfFile   
   ,      
.           
  , 

    __________________ 8. ,    191 

       ,    ,   
    64 . 
    Windows NT      .    
MapViewOfFile (    )   ,  Windows NT 
    .     
   ,       64 . 
  ,  ^  ,    
  ~    .   Windows 
95    ,      
-                      ~   ~~ 

            

             
,     Microsoft Windows    
   MS-DOS.  Win32   16- Windows  
   .      
 16- Windows   SendMessage  PostMessagec  
,   .   16- Windows   
,       16-   32- 
.        (  
GMEM_SHARE),      SendMessage  PostMessage    
   wParam  IParam. ,   , 
  GlobalLock,     ,    
    .             ~ ~ 
     Win32            
,      .   16- Windows 
    "^     
,    "  . 
    B""Wm32  ,    ,   
     .  ,  
 ,      Win32.  
         ,  
   SendMessage  PostMessage (    
SendMessage      WM_COPYDATA),    
    . 
           :   
           
 , . .          
. ,        
   ,     
  .        
    . 
          .   -  
   CreateFile,   CreateFileMapping   
  , ,  Map ViewOfFileEx,   
-       . Map 
ViewOfFileEx ^ MapViewOfFile,     
   ,  
^^^.-.-.     , 
           
(IP),      . 
           ,  
,       -  ,   
  

    192 _____________________________Windows   

     .          
          
, . .           
.     ,    
        ,   
 . 
             
     . 

     CreateFileMapping  OpenFf/eMappf'ng 

         CreateFileMapping: 
    
    HANDLE CreateFileMapping(HANDLE hFile, LPSECURITY_ATTRIBUTES Ipsa, 
    DWORD fdwPrctect, DWORD dwMaximumSizeHigh, 
    DWORD dwMaximumSizeLow, LPSTR IpName); 

           ,   
 ,    IpName      . 
,        MyFileMapObj: 

    HANDLE hFileMap = CreateFileMapping(..., "MyFileMapObj"); 

        CreateFileMapping :   
     .       
  .         
    ,      
. ,       . 
      GetLastError,  ,     . 
   ,         
.            
CreateFileMapping.  GetLastError  ERROR_ALREADY_EXISTS, , 
CreateFileMapping      . , 
      ,   .  
  ,   CreateFileMapping   
  : 

    HANDLE hFileMap = CreateFileMapping(...); 
    if ((hFileMap != NULL) && (GetLastError() == ERROR_ALREADY_EXISTS)) { 
    CloseHandle(hFileMap); 
    hFileMap = NULL; 
    } 
    return(hFileMap); 

           
     OpenFileMapping: 

    HANDLE OpenFileMapping(DWORD dwDesiredAccess, 
    BOOL bInheritHahdIe, LPSTR IpName); 

       CreateFileMapping   ,  
    ;   ,  
  .   -      
 CreateFileMapping,       , 
 OpenFileMapping.      ,  
,  ,       
OpenFileMapping      IpName      : 

    HANDLE hFileMap = OpenFileMapping(..., "MyFileMapOb]"); 

      , dwDesiredAccess,    
(FILE_MAP_ READ, FILE_MAP_WRITE, FILE_MAP_ALL_ACCESS  FILE_MAP_COPY),  
  

    ______________________  8. ,    193 


    bInheritHandle  ,      
     . ,  
,  -    , 
  . 
     OpenFileMapping        , 
  NULL.     ,   
         
 Map ViewOfFile  Map ViewOfFileEx.     
,     CloseHandle. 

     

              
:      ,     
,    ,   
.     ,   , 
  . 
         ,  
CreateFileMapping,     SECURITY_ATTRIBUTES, 
  : 

    SECURITY_ATTRIBUTES sa; 
    sa.nLength = sizeof(sa): 
    sa.IpSecurityDescriptor = NULL; 
    sa.bInheritHandle = TRUE; 
    hFlleMap = CreateFileMapping(hFile, &sa, ...); 

    (          
 ,   ,   OpenFileMapping  
  TRUE   bInheritHandle.} 
         ,    
CreateProcess   TRUE   flnheritHandle: 
    
    BOOL CreateProcess(LPCTSTR IpszImageName, LPCTSTR IpszCommandLine, 
    LPSECURITY_ATTRIBUTES IpsaProcess, 
    LPSECURITY_ATTRIBUTES IpsaThread, 
    BOOL flnheritHandle, DWORD fdwCreate, LPVOID IpvEnvironment, 
    LPCTSTR IpszCurDir, LPSTARTUPINFO IpsiStartInfo, 
    LPPROCESS_INFORMATION IppiProcInfo); 

             
;       ,   
,    .     
,      .   
 -  ,       
     . 
          (  ), ~   
       .    
,         ,  
,   ,       
,  . 

    ,         

          ,    
,   .          
 , 

    194 ______________________________Windows   

          .      
         . 
      , Microsoft     
      ,     
  .       
    ,   . -,  
  CreateFile:        
.   ,  , CreateFileMapping   (HANDLE) 
OxFFFFFFFF   hFile.     ,   
  ,       ,  
;         . 
     dwMaximumSizeHigh  dwMaximumSizeLow. 
             
    ,     ,   
   .   ,      
,  CreateFileMapping     IpName   
   .        
     CreateFileMapping  OpenFileMapping   
   . 
            ,  
  CloseHandle.       , 
  ,  ,    . 

    ^\ 

       ,      
.  ,      : 
    
    HANDLE hFile = CreateFile(.,,); 
    HANDLE hMap = CreateFileMapping(hFile, ...); 
    if ( hMap == NULL) 
    return(GetLastError()): 

      CreateFile  ,    OxFFFFFFFF 
(INVALID_HANDLE_VALUE).  ,   ,    
    . ,     
   CreateFileMapping,   hFile   
 OxFFFFFFFF,         
  ,    _,    
.   ,    ,  
 .        , 
    ( ), .   
   ,  ,   ! 

    - MMFShare 

     MMFShare (MMFSHARE.EXE) (.   . 8-2) , 
            , 
  .        
   MMFSHARE  -,   . 
       ,      
 MMFSHARE.EXE.       : 

    ___  8. ,    195 

          MMFShare  ,  
-    Data ().    Create Mapping 
Of Data (  ).    
CreateFileMapping,       4   
   MMFSharedData (     
). ,       ,   
,     .     ,  
 ,       
         . 
     MMFShare    ,   
Create Mapping Of Data    Close Mapping Of Data ( 
 ).          
MMFSharedData    -  .     
   ,   . 
           MMFShare     
Open Mapping And Get Data (    ),  
       MMFSharedData   
OpenFileMapping.         ,  
  .       
          
    .   !      
  . 
     Close Mapping Of Data      , 
   ,     .   
   ,     MMFShare  
        .  ,   
     ,     
     ,   ,   ""'"" 

    . . . 

    . 8-2.   MMFShare 


    196 _____________________________Windows   


    . 8~2 () 


    BOOL Dlg_OnInitD.i.alog (HWND hwnd, HWND hwndFocus. LPARAM IParam) { 
    
    //      
    chSETDLGICONS(hwnd, IOI_MMFSHARE, IDI_MMFSHARE): 
    
    //      
    Edit_SetText(GetDlgItem(hwnd, IDC_DATA), __TEXT("Some test data")); 
    
    //   Close, ..   , 
    //        
    Button_Enable(GetDlgItem(hwnd, IDC_CLOSEFILE), FALSE): 
    return(TRUE); 
    i 
    ( 
    /.'! I I / I i I i'/ / I / I I I I ! '///.1///.''// '///// /', /'//' ' 
1 ' .'/, !,   1 ' 
    void Dlg_OnCommand (HWND hwnd, int id, HWND hwndCtI, UINT codeNotify) { 
    
    //   ,    
    static HANDLE s_hFileMap = NULL; 
    HANDLE hFileMapT; 
    switch (id) { 
    case IDG_CREATEFILE: 
    
    if (codeNotify != BN_CLICKED) 
    break: 
    
    //     ,  ,  
    //   ;   4    MMFSharedData 
    s_hFileMap = CreateFileMapping((HANDLE) OxFFFFFFFF, 
    NULL, PAGE'_READWRITE, 0. 4 * 1024. __TEXT("MMFSharedData")); 
    if (s_hFileMap != NULL) { 
    if (GetLastError() == ERROR_ALREADY_EXISTS) { 
    chMB(__TEXT("Mapping already exists - not created.")); 
    CloseHandle(s_hFileMap); 
    } else { 
    //     ; 
    
    //       
    LPVOID IpView = MapViewOfFile(s_hFileMap, 
    FILE_MAP_READ : FILE_MAP_WRITE, 0, , ); 


    __________________.__ 8. ,    197 


    . 8-2 () 

    if ((BYTE *) IpView != NULL) { 
    
    //   ;   
    //      
    Edit_GetText(GetDlgIterri(hwnd, IDC_DATA), 
    (LPTSTR) IpView, 4 * 1024); 
    
    //  ;   
    //   ""  
    UnmapViewOfFile((LPVOIO) IpView); 
    
    //         
    Button_Enable(hwndCtl, FALSE); 
    
    //    
    Button_Enable(GetDlgItem(hwnd, IDC_CLOSEFILE), TRUE); 
    } else { 
    chMB(__TEXT( "Can't map view of file'')); 
    i 
    i 
    } else { 
    chMB(__TEXT("Can't create file mapping,")); 
    } 
    break; 
    case IDC_CLOSEFILE: 
    
    if (codeNotify != BN_CLICKED) 
    break; 
    if (CloseHandle(s_hFileMap)) { 
    //   ;    , 
    //     
    Button_Enable(Get01gItem(hwnd, IDC_CREATEFILE), TRUE); 
    Button_Enable(hwndCtl, FALSE); 
    } 
    break: 
    case IDC_OPENFILE: 
    
    if (codeNotify != BN_CLICKED) 
    break; 
    
    // :         
    //   MMFSharedData 
    
    hFileMapT = OpenFlleMapping(FILE_MAP_READ : FILE_MAP_WRITE. 
    FALSE, __TEXT("MMFSharedData")): 

    . . . 

    198 ______________________________Windows   


    . 8-2 () 

    if (hFileMapT != NULL) { 
    
    //   ;    
    //     
    LPVOID IpView = MapViewOfFile(hFileMapT, 
    FILE_MAP_READ ! FILE_MAP_WRITE, 0, , ); 
    if ((BYTE *) IpView != NULL) { 
    
    //       
    Edit_SetText(GetDlgItem(hwnd, IDC_DATA), (LPTSTR) IpView); 
    UnniapViewOfFiie(( LPVOID) IpView); 
    } else { 
    chMB(__TEXT("Can't map view.")); 
    } 
    CloseHandle(hFileMapT); 
    } else { 
    chMB(__TEXT("Can't open mapping.")); 
    ^ i 
    break; 
    case IDCANCEL: 
    EndDialog(hwnd, id); 
    break; 
    BOOL CALLBACK Dlg_Proc (HWND nwnd, UINT uMsg, WPARAM wParam, LPARAM 
IParam) { 
    switch (uMsg) { 
    chHANDLE_DLGMSG(hwnd. WM_INITDIALOG, Dlg_OnInitDialog); 
    chHANOLE_DLGMSG(hwnd, WM_COMMAND, Dlg_OnCommand): 
    } 
    return(FALSE): 
    int WINAPI _tWinMain (HINSTANCE hinstExe, 
    HINSTANCE hinstPrev, LPTSTR pszCmdLine, int nCmdShow) { 

    . .  

    _________________ .___  8. ,    199 


    . 8-2 () 

    chWARNIFUNICODEUNDERWIN95(); 
    DialogBox(hinstExe, MAKEINTRESOURCE(IDD_MMFSHARE), NULL, Dlg_Proc); 
    return(O): 
    \ 
    ( 
    //////////////////////////////////   I / I / I / / / / I I I I / 
/ / / I / I I / I / I / I / I / I / / 


         

        ,       
        ,    . 
 ,      .    
         ( 
7). ,         
.       ,  
    : 

    CELLDATA CellData[200][256]; 

      CELLDATA  128 ,    6 
553 600 (200  256  128)   .     , 
       . 
    ,   ,    ,   
     .  CreateFileMapping 
 ^ ,     fdwProtect  
   : SEC_RESERVE  SEC_COMMIT. 
       ,       , 
     .  SEC_COMMIT 
 CreateFileMapping       
 . (   ,     .) 
     SEC_RESERVE,       
  ,       
. ,  MapViewOfFile  MapViewOfFileEx,   
  .   MapViewOfFile  MapViewOfFileEx 
   ,     . 
         
   . 
     ,        
   ,   .  
         
   .    -  
,           
  ,     . 
       . , ,     
   ( ) ,    VirtualAlloc: 

    LPVOID VirtualAUoc(LPVOID IpvAddress, DWORD cbSize, 
    DWORD fdwAllocationType, DWORD fdwProtect); 


    200 _ ___________________________Windows   


         (  )   7.  
VirtualAlloc           
,   VirtualAlloc ,   ,  
  VirtualAlloc   MEM_RESERVE. ,  
,   MapViewOfFile  MapViewOfFileEx,   
 ,   VirtualAlloc,     
  ,    .      , 
,   ,      
      ,      
  ,  . 
    ,  SEC_RESERVE   VirtualAlloc    
 CellData     . 
    VwiNDowsy  VirtualAlloc  ,      
,      000400000  Ox7FFFFFFF.   
       SEC_RESERVE,  
VirtualAlloc   ,     080000000  
OxBFFFFFFF.   Windows 95 ,     
,    ,    
  .                                                       

    /\ 
     Windows NT  VirtualFree      
,       (   
SEC_RESERVE).   Windows 95   . 
