     

        3 

    .   ,     .  
     ,      
.   ,   ,    
  .     ( )    
  ,        . 
    ,   ()   
 .  , ,     , 
       . 0', . 
          .  Win32 
  4   . Win32-npoueccbi     
   MS-DOS  16- Windows  .  , 
Win32-npouecc     _  
 ,     - .    
     DLL-,    
-.   ,    , 
 ,      . , 
   ,     . 
       ,  .   - ,  
   .      , 
    .  ,    
  ,        
  .       
      ,   
    .         , 
       ,     
       . 
        ,       
  .     ( 
)   ,       
  (. . 3-1). 

    24 __Windows   

    ]' j 

    . 3-1.          

      Win32-npouecca  (, )   
 .       ,   
     . . 
    ^WINDOWS/ Windows NT        
 kNT/  . ,    ,   
  \/      Pentium 90 . Windows NT  
     ,     
  .  Windows NT   
          
.         ,  
   . 
    Windows 95     .     
 ,   Windows 95       
 . 

      Win32-npnnoxeHMe 

    Win32    :    
 (GUI)   (CUI).      
  . GUI-  ,  , 
          
 Windows'OBCKO^> .     
,    Windows: Notepad (), Calculator 
(), Wordpad  . .      
 MS-DOS,    :    ,  
 ,       GUI.    
      ,     . 
   CMD.EXE ( Windows NT)  COMMAND.COM ( 
Windows 95)     . 

    _____________________________________ 3.  25 

             . , 
,   ,    . 
,        , 
      ;     
    .        
GUI-,      .    
     GUI-:   ,  
    ,    . 
, ,   ,   
.   ,    GUI   
,  ,   . 
       ,  ,    
  (GUI  CUI),   .  , 
 - .   ,   -,  ,  
    GUI  CUI.       
,      ,    
  ,      . 
       GUI-    C++, Visual C++   
  ,   -   ,  
GUI,          
  main ( , ,  ).    
 GUI-    C++, Visual C++    
,   -   ,  GUI-,  
         WinMain ( 
    ). 
               
GUI-,    ,         
    ,      . 
     , ,   
 Microsoft Win32 Programmer's Reference. 
    ,   \32-   GUI    WinMain, 
     ,      : 

    int WINAPI WinMain(HINSTANCE hinstExe, HINSTANCE hinstExePrev, LPSTR 
IpszCmdLine. int nCmdShow); 

            .  
         
C/C++.  Visual C++ ,     _WinMainCRTStartup, , 
    /ENTRY,      
 . _WinMainCRTStartup  ': 
    1.        . 
    2.       . 
    3.       ,  
        STDLIB.H.   
   . 3-2. 
    4.   (   ), 
 -   (. . malloc  calloc)   
  /. 
    1. Visual C++       .  
 _WinMainCRTStartup     CRtO.C. 

    26 __________________________Windows   

                       

    _osver             unsigned int           . 
,  Windows NT 4.0    1381,   _osver  1381. 
    _wmmajor         unsigned int           Windows  
 .  Windows NT 4.0    4. 
    _winminor         unsigned int           Windows 
  .  Windows NT 4.0    0. 
    _winver            unsigned int        (_winmajor 8) + _wmminor 
    _arec             unsigned int         ,   
 . 
    _argv             char **             _^-  
ANSI-.          . 
    _environ           char **               ANSI-. 
        . 

    . 3-2.      ,  
  

    5.   WinMain   : 

    GetStartupInfoA(&StartupInfo); 
    int nMainRetVal = WinMain(GetMod.uleHandle(NULL), NULL, IpszCommandLine, 
(StartupInfo.dwFlags & STARTF_USESHOWWINDOW) ? StartupInfo.wShowWindow : SW_SHOWDEFAULT); 

    6.     WinMain     
 exit       ,  
WinMain (nMainRetVal).  exit  - ,   
 32- ExitProcess,   ,  WinMain. 
            ,  
 . 

       

     -  DLL-,     , 
   .    
-      WinMain  hinstExe.  
     ,     
. ,     (image) -  , 
 ,  : 

    HICON LoadIcon(HINSTANCE hinst, LPCTSTR Ipszlcon): 

       Loadlcon ,    (  DLL) 
   .     
hinstExe  WinMain   ,     
    -. 
       Win32 ,   \32-  
  HMODULE.    GetModuleFileName: 

    DWORD GetModuleFileName(HMODULE hinstModule, LPTSTR IpszPath, DWORD cchPath); 


    ____________________________________  3.  27 

     Win32 API       HMODULE  
HINSTANCE,  ,        .  , 
    Win32   -   
 HMODULE,    HINSTANCE. 
       hinstExe  WinMain     
,       ,  
   -. ,    
        000400000,  hinstExe 
 WinMain   000400000. 
     ,    ,  
.      ( )  
.  Visual C++      
000400000     Windows 95,       
   . ,    
        000010000, 
    ,      
  Windows NT. ,   /BASE:  (  
  Microsoft),    ,    
 . 
          Windows 95    
 000400000      .    
 ,          
.     Windows 95,   Windows NT, 
 ,         000400000. 
     GetModuleHandle: 

    HMODULE GetModuleHandle(LPCTSTR IpszModule); 

     / , ,   (  
 )  -  DLL-.     
   DLL-        . 
    , GetModuleHandle   , 
     .      
,   NULL.  ,    , 
  NULL   IpszModule,       
-.            
 WinMain   . 
        ,  GetModuleHandle. -,  
     ,   .  
      GDI, ,  GetModuleHandle  
   "GDI32",   NULL     GDI32.DLL  
    -  . -,  
     NULL      -  
  .  ,     
GetModuleHandle(NULL)      DLL,      -, 
  DLL-.  16- Windows     . 
    /\    16- Windows hModule      - 
 / ^\ DLL- ( ,     
?ss^S^  ).    200  Notepad,   
       ,     
     hmodExe.  16- Windows  
        - DLL-,    
 DLL     hmodExe. 
         16- Windows 
 ,   hinstExe.    
  ,   .      
  200  Notepad,   

    . . . 

    28 -____________________-_______ Windows   

     200  hinstExe      .  
DLL-     ,     DLL 
 ,   hinstExe.  ,   : 
 DLL    , ,  16- Windows  
 hmodExe  hinstExe  .    ,  
hmodExe     DLL-,  hinstExe     
 . 
     Win32      ,  
   ,      ;  
     .  ,  
 hmodExe  hinstExe  .    ,   
,         Win32   
 . 
         ,  hinstExe  
   ,      -  
  .   ,    
       hinstExe. ,  NOTEPAD.EXE 
      4     
      (      
000400000).      NOTEPAD.EXE,  
     4       
 Notepad     000400000.   hinstExe 
       ,    
   -,  hinstExe    (000400000). 
     16- Windows     DialogBox,   
 hinstExe,       : 

    int DialogBox(HINSTANCE hinstance, LPCTSTR IpszTemplate, HWND hwndOwner, 
DLGPROC digprc): 

              
.      ,     Win32 
     .    ,  
hinstExe, Win32    ,     
 EXE-  DLL,        
,    hinstExe. 

        

      ,         
  WinMain  hinstExePrev  NULL.    
      Windows   
Win32-poe    . 
     16- Windows-  hinstExePrev   
  .      , 
h i nstExePrev   NULL. 16- Windows-  
     : 
                   
   .      
 Print Manager,      . 
       ,     .  16- 
Windows           
. . . 

     3.  29 

     .        
.        
  ,   RegisterClass  .  Win32  
      ,    
API        . 
         16- Windows  Win32,  
Microsoft    NULL   hinstExePrev   
WinMain.    16- Windows   
    ,   : ,  
hinstExePrev  NULL,     . 
    ,   :       
hinstExePrev,      .   
 . ,   FindWindow    
 ,    .  FindWindow 
 NULL, ,       .  
       12. 

       

          ,   
      ,     , 
    . ,     ( 
  CreateProcess),  ,    
 ,        . 
          
   ,      
   IpszCmdLine  WinMain     
 . 
     IpszCmdLine    ANSI-.    
,       ANSI  Unicode, 
Microsoft      ANSI-,    
   16- Windows  Win32:  ,   
16- Windows,   ANSI-. ( Unicode    
 17.) 
         ANSI-,   
.  IpszCmdLine    LPSTR,   
LPCSTR,        ,   
  ,     ^     
 .       '    
.       ,    
,   ,    (  ), 
   . 
              
 GetCommandLine: 

    LPTSTR GetCommandLine(VOID): 

        ,    , 
   (  )  . , ,  
      ,    IpszCmdLine ,  
 Win32    GetCommandLine,   ANSI-,   
Unicode- .   IpszCmdLine    , 
   ANSI-. 

    30 ______________________________Windows   

           , 
    ,     
     _argc  _argv.   , _argv  
     ANSI-,   Unicode-.  : 
 \32-,      ,  
CommandLineToArgvW2: 

    LPWSTR CommandLineToArgvW(LPWSTR IpCmdLine, LPINT pArgc); 

     W         (wide)   
,      Unicode-.  
IpCmdLine    .     
 GetCommandLine.  pArgc    ,  
      .   
CommandLineToArgvW      Unicode-. 
    CommandLineToArgvW    .  
    ,    , 
      .    
 .        ,  : 

    int nArgc: 
    LPWSTR ppArgv = CommandLineToArgvW(GetCommandLineW(), &nArgc); 
    //   ... 
    if (*ppArgv[1] == L'x') { 
    //    
    HeapFree(GetProcessHeap(), 0, ppArgv); 


      

             , 
    .      
 : 

    VarName1=VarValue1\0 
    VarName2=VarValue2\0 
    VarName3=VarValue3\0 
    VarNameX=VarValueX\0 
    \0 

           .     
  ,  .     
        . 
           ,     
     .     . 
,   : 

    XYZ= Win32   (      ) 
    ABC=Win32 

    2.     Windows NT,    3.5. 

     3.  31 

         XYZ  ,  ,    
,     ,     
  .   ,  , , :                     

    XYZ =Home    (      ) 
    XYZ=Work 

          "XYZ ",   "",  
  "XYZ",   "Work". 
        (   )  
  . 
           Windows 95,  
  AUTOEXEC.BAT,      SET: 

    SET VarName=VarValue 

           AUTOEXEC.BAT,  
         , 
     Windows 95. 
          Windows NT   
,        .  
    ,     .  
 : 

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control SessionManage\Environment 

       ,   ,   : 

    HKEY_CURRENT_USER\Environment 

       ,   ,   
   . 
      ,     , 
   System  Control Panel.     
  : 
        System Variables   
   . 
    . . . 

    32 ______________________________Windows   

     ,         
\32-,      . , 
    ,        
  .    Explorer, Task Manager  Control 
Panel            
          WM_WININICHANGE. 
,  ,  , ,  -  
     , : 

    SendMessage(HWND_BROADCAST, WM_WININIGHANGE, OL. (LPARAM) "Environment"); 

            
 .     ,  
    ,    .    
 ,     CreateProcess.     
 ,         
  ,   ,      
      .  ,    
,       ,   
   ,   . 
           . 
     ,   
,  ,  ,      
; ,       
 . 
    ,         , 
      .       
   ,  , , ,     
   .   ,   ( ,  ) 
,   GUI,      
 .  , ,   ,    
    . 
      ,          
,       \32-. 
GetEnvironmentVariable        
    : 

    DWORD GetEnvironrnentVanabled-PCTSTR IpszName, LPTSTR IpszValue, DWORD ccnValue): 

      GetEnvironmentVariable  IpszName    
   , IpszValue   ,    
  ,   cchValue      
.     ,   , 
 ,          . 
     SetEnvironmentVariable  ,   
  : 

    DWORD SetEnvironmentVariable(LPCTSTR IpszName,LPCTSTR IpszValue); 

       ,      IpszName,  
  ,   IpszValue.    
 ,    .    IpszValue 
 NULL,    . 
             
 .    ,       
      ( GetEnvironmentVariable 
   ),  SetEnvironmentVariable     
   . 

    _____________________________________  3.  33 


      

         ,  ,   
     :   
,  ,      
   (data misalignment).    
,      ,   SetErrorMode: 

    UINT SetErrorMode(UINT fuErrorMode): 

     fuErrorMode    ,    OR: 

                                  

    SEM_FAILCRITICALERRORS                  
        . 
    SEM_NOGPFAULTERRORBOX                
  .     , 
        . 
    SEM_NOOPENFILEERRORBOX                
  . 
    SEM_NOALIGNMENTFAULTEXCEPT         
 ,     .    
   86  Alpha. 

           , 
    .  ,      
   SEM_NOGPFAULTERRORBOX     , 
       .     
 ,           
  (      ).  ,   
     -   ,  
  ,    .   
        
 ,     CreateProcess  
CREATE_DEFAULT_ERROR_MODE ( CreateProcess  ). 

          

          ,  \32-    
,        . 
,       CreateFile,   
- ,     ,     
    .     , 
,       ,   
            
 . 
                
  : 

    DWORD GetCurrentDirectory(DWORD cchCurDir. LPTSTR IpszCurDir); 
    BOOL SetCurrentDirectory(LPCTSTR IpszCurDir); 

           14. 

    34 ______________________________Windows   


        

           ,    
   .      - 
        .   
    . : 

    =C:=C:\Utility\Bin =D:=D:\Program Files 

      ,        
\Utility\Bin,    D  Program Files. 
       \32-,    ,   
,          
 ,     .   , 
           
,      . 
    ,       C:\Utility\Bin    
 CreateFile,    D:\ReadMe.Txt,    
=D:.   =D: ,     
ReadMe.Txt   D:\Program Files.       , 
    ReadMe.Txt     D. , 
 32-        
,    ,     . 
    /\         32- SetCurrentDirectory 
 / ' \   _chdir    .  
 /\    SetCurrentDirectory, ,  ,  
    ,    
    . 
             
   ,      
  .      
      .    
   ,    
   (      
).    ,    
,   GetFullPathName: 

    DWORD GetFullPathName(LPCTSTR IpszFile, DWORD cchPath, LPTSTR IpszPath, 
LPTSTR *ppszFilePart); 

    ,       ,   : 

    TCHAR szCurDir[MAX_PATH]; 
    DWORD GetFullPathName(__TEXT("C:"), MAX_PATH, szCurDir, NULL); 

    He ,      _  
 .   ,   ,  
     . 

       

        ,    Windows  
.   . ,    
 ,   Win32 API,       
   Windows NT. 

    _____________________________________  3.  35 

      ,  GetVersion   API   Windows: 

    DWORD GetVersion(VOID); 

          .     
16- Windows,          
 MS-DOS,       Windows.    
      ,    
 . 
    , ,   ,  ,   ,  
  Windows  :     
   ,     .     
     , Microsoft  
 ,  ,      . 
    -     Get Version  Win32 API   
 ~~GetVersionEx'. 

    BOOL GetVersionEx(LPOSVERSIONINFO IpVerslonlnformation); 
            OSVERSIONINFO: 
    typedef struct { 
    DWORD dwOSVersionInfoSize; 
    DWORD dwMaJorVersion; 
    DWORD dwMinorVersion; 
    DWORD dwBuildNumber: 
    DWORD dwPlatf-ormId; 
    TCHAR szCSDVersion[128]; 
    } OSVERSIONINFO, *LPOSVERSIONINFO; 

         . 
     ,       
    .      
         - 
- (    !);      
      .  
   OSVERSIONINFO   : 

                 

    dwOSVersionInfoSize     .     
GetVersionEx     sizeof(OSVERSIONINFO). 
    dwMaJorVersion            . 
    dwMinorVersion            . 
    dwBuildNumber           . 
    dwPlatformId          ,   . 
      : VER_PLATFORM_WIN32s (WIN32s), 
    VER_PLATFORM_WIN32_WINDOWS (Windows 95), 
    VER_PLATFORM_WIN32_NT (Windows NT)  
    VER_PLATFORM_WIN32_HH3 (Windows CE). 
    szCSDVersion                
    . 
    3.  ͻ   handheld    
,   . 

    36 ______________________________Windows   


     CreateProcess 

           CreateProcess: 

    BOOL CreateProcess( 
    LPCTSTR IpszApplicatlonName, 
    LPCTSTR IpszCommandLine, 
    LPSECURITY_ATTRIBUTES IpsaProcess, 
    LPSECURITY_ATTRIBUTES IpsaThread, 
    .1  BOOL fInheritHandles, ''. DWORD fdwCreate, 
    LPVOID IpvEnvironment, 
    LPTSTR IpszCurDir, 
    LPSTARTUPINFO IpsiStartInfo, 
    LPPROCESS_INFORMATION IppiProcInfo); 

         CreateProcess,    
        ,  
1.      ,    ,   
   . (    
        .) 
         
 4            ,  
   DLL (  ). 
          ( ,  1)  
   .     ,    
    ,     . 
          
,        WinMain    ( main 
      ).     
     , CreateProcess  TRUE. 
               
  CreateProcess. 
         16- Windows,   
 ,  WinExec  LoadModule,  ,      
,      CreateProcess,   ,   
      .  32- Windows 
 WinExec  LoadModule      
16- Windows      CreateProcess. 
      ,    
Unicode,         ANSI-. 

     IpszAppHcationName  /pszCommandlfne 

         ,   
  ,   ,   . 
  IpszCommandLine. 
         ,   
CreateProcess    .    IpszCommandLine 
   , ,     , 
   .       ,  
  .          
   : 

    _____________________________________ 3.  37 

    1. ,  -  . 
    2.    . 
    3.   Windows. 
    4.   Windows. 
    5. ,     PATH. 

    ,        ,   
      .   
 ,          
      .    
     . ,.,    , 
  ,       WinMain 
  (   )   IpszCmdLine. 
    ,    , ,    IpszApplicationName 
 NULL (    99% ).  NULL      
  ,   .    
    ,   ,       
   . CreateProcess ,  
     (    ).    
  ,        ,    
 . 
         IpszApplicationName   CreateProcess  
      IpszCommandLine  
 . ,   CreateProcess : 

    CreateProcess("C:\\WINNT\\SYSTEM32\\NOTEPAD.EXE", "WORDPAD README.TXT"); 

      Notepad,       WORDPAD 
README.TXT. , ?     ,  CreateProcess. 
 ,    IpszApplicationName,  
    CreateProcess    POSIX  
 Windows NT. 

     /psaProcess, /psaThreadn fInheritHandles 

       ,       
   (   ).    
,         
.  IpsaProcess  Ipsa Thread    
       .   
   NULL,       
   .       
   SECURITY_ATTRIBUTES;      
        . 
     SECURITY_ATTRIBUTES   IpsaProcess  IpsaThread 
  ,  ,  -     
     . ( ,   
    ,     2.) 
     . 3-3    , ,  
   .  ,     
      IpsaProcess   
SECURITY_ATTRIBUTES,    bInheritHandle   TRUE. 
  IpsaThread     
SECURITY_ATTRIBUTES,     bInheritHandle  FALSE. 

    38 _____________________________Windows   

      ,       ,  
   ,     IppiProcInfo,   
   ,          
    . 
     ,       
CreateProcess,    .    ,  
        .   
  flnheritHandles.    TRUE,  
     .      
     .     
          
flnheritHandles.  ,     CreateProcess,  
  flnheritHandles  FALSE,      
,      . 

    INHERIT.C 
   
    : Inherit. : Copyright  1995-1997,   (Jeffrey Richter) 
    ((include <windows.h> 
    int WINAPI WinMain(HINSTANCE hinstExe, HINSTANCE hinstExePrev, LPSTR 
IpszCmdLine, int nCmdShow) { 
    STARTUPINFO si; 
    SECURITY_ATTRIBUTES saProcess, saThread; 
    PROCESS_INFORMATION piProcessB, piProcessC; 
    //   STARTUPINFO    
    ZeroMemory(&si, sizeof(si)); 
    si.cb = sizeof(si); 
    //        ; 
    // ,    "", 
    //    
    saProcess.nLengtn = sizeof(saProcess); 
    saProcess.IpSecurityDescriptor = NULL; 
    saProcess.bInheritHandle = TRUE: 
    // ,    "", 
    //     
    saThread.nLengtn = sizeof(saThread): 
    saThread.IpSecurityDescriptor = NULL; 
    saThread.bInheritHandle = FALSE; 

    . . . 


    . 3-3. ,      


    _____________________________________  3.  39 


    . 3-3 () 

    //    
    CreateProcess(NULL, "ProcessB", &saProcess, &saThread, FALSE, 0, NULL, 
NULL, &si. &piProcessB); 
    //  pi   ,    : 
    // hProcess,    ""   
    //   ,  hThread,    
    // " "      , 
    //       . 
    //    IpsaProcess  IpsaThread  NULL,  
    //  ""  " "    
    //   . 
    
    //       ,    
    //   ""  " "  . 
    
    /'/    TinheritHandles  TRUE, 
    //    ,   
    // ""  ,   ,   
    // " "   . 
    CreateProcess(NULL, "ProcessC", NULL, NULL, TRUE, 0, NULL, NULL, &si, &piProcessC); 
    return(O): 
    i 


     fdwCreate 

     fdwCreate  ,   ,    
 .      OR. 
     DEBUG_PROCESS      
,    ,     . 
   ^    (  
  ) 6       
  (   ). 
     DEBUG_ONLY_THIS_PROCESS   DEBUG_PROCESS   
,        
          
 .  ,      , 
     ,   . 
     CREATE_SUSPENDED         
   .     . 
 ~~   ,    
,         ,  
    .    , 
  , ,      
,    ,     
     . 

    40 __________ ___________________Windows   

     DETACHED_PROCESS   ,  
 ,       , 
      .     
  ,          
 . (, , ,      
       ;    
      .)  ,  
          . 
     CREATE_NEW_CONSOLE        
 .   :    
CREATE_NEW_CONSOLE  DETACHED_PROCESS . 
     CREATE_NO_WINDOW        
          
 . 
     CREATE_NEW_PROCESS_GROUP     , 
    Ctrl+C  Ctrl+Break.     
    ,      
        , 
  .         
,     .  ,    Ctrl+C  
Ctrl+Break       ,  . 
     CREATE_DEFAULT_ERROR_MODE  ,     
    ,   . 
(    .    SetErrorMode.) 
     CREATE_SEPARATE_WOW_VDM     16- 
Windows-  Windows NT.   ,    
 DOS- (Virtual DOS-machine, VDM)   16- 
Windows   . (   16- 
Windows-   ,  VDM.)    
 VDM   : ,    
 VDM,  ,    VDM,   . 
 , 16- Windows,    VDM, 
    .  , ,     
,    VDM   .  
    VDM  ,      
   . Windows 95   16- 
Windows-    VDM,     . 
     CREATE_SHARED_WOW_VDM     16- 
Windows-  Windows NT.    16- 
Windows-    VDM,      
CREATE_SEPARATE_WOW_VDM.    Windows NT  
,    yes  DefaultSeparateVDM   
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\WOW. (  
  Windows NT  .)   yes,  
  CREATE_SHARED_WOW_VDM,    Windows NT   
16- Windows-   VDM. 
     CREATE_UNICODE_ENVIRONMENT  ,    
     Unicode-.   
    ANSI-. 
            .   
  ,  ,  ;   
     .     : 

     3.  41 

                    

    Idle ()          IDLE_PRIORITY_CLASS 
    Normal ()             NORMAL_PRIORITY_CLASS 
    High ()                HIGH_PRIORITY_CLASS 
    Realtime ( )    REALTIME_PRIORITY_CLASS 

            
   . (    .  4.) 

     IpvEnvironment 

         ,    
,     .   
IpvEnvironment  NULL,       
     .    
   GetEnvironmentStrings: 

    LPVOID GetEnvironmentStrings(VOID); 

             , 
  .       
IpvEnvironment  CreateProcess. (    CreateProcess,  
   NULL  IpvEnvironment.) 

     IpszCurDir ^ 

              
 .     NULL,     
   ,    ,  .    
  NULL,      (    ), 
    .       . 

     IpsiStartfnfo 

         STARTUPINFO: 

    typedef struct _STARTUPINFO { 
    DWORD cb; 
    LPSTR IpReserved; 
    LPSTR IpDesktop; 
    LPSTR IpTitle: 
    DWORD dwX; 
    DWORD dwY; 
    DWORD dwXSize: 
    DWORD dwYSize: 
    DWORD dwXCountChars; 
    DWORD dwYCountChars; 
    DWORD dwFillAttribute; 
    DWORD dwFlags: 
    WORD  wShowWindow: 
    WORD  cbReserved2; 
    LPBYTE lpReserved2; 
    . . . 


    42 ______________________________Windows   


    HANDLE hStdInput; 
    HANDLE hStdOutput; 
    HANDLE hStdError: 
    } STARTUPINFO, *LPSTARTUPINFO; 

      STARTUPINFO  \32-   
 .  ,      
  .          
   STARTUPINFO  ,      
   : 

    STARTUPINFO Si; 
    ZeroMemory(&si, sizeof(si)); 
    si.cb = sizeof(si); 
    CreateProcess(..., &si, ...); 

     ,      . , , 
    -  ,     CreateProcess. 
              . 3-4. 
 :    ,     
  (overlapped) ,       
 /  . 

     

                    

                             ,  
 STARTUPINFO.        ,  
Microsoft      Win32.   
 & sizeof(STARTUPINFO). 
    IpReserved                 .   NULL. 
    IpDesktop                    ,  
  .     ,  
     .       
     ,   ,   
  ,      .  IpDesktop 
 NULL (    ),      . 
    IpTitle                          
.  IpTitle  
    NULL,      . 
    dwX                      -  - ( ) 
 , 
    dwY                                 .  
 ,        
    CW_USEDEFAULT     
CreateWindow.  ,   ,   
     . 

    . . . 

    . 3-4.   STARTUPINFO 


    ____________________________________ 3.  43 


    . 3-4 () 

            

    dwXSize                      ( ) 
 . 
    dwYSize                            ,   
         
CW_USEDEFAULT   nWidth  CreateWindow. 
     ,   ,    
    . 
    dwXCountChars                 ( ) 
  
    dwYCountChars                     . 
    dwFiUAttribute                     
  . 
    dwFlags                  .    . 
    wShowWindow                 ,      
       ,      
 ShowWindow    nCmdShow  SW_SHOWDEFAULT. 
         SW_*,  
   ShowWindow. 
    cbReserved2                .   0. 
    lpReserved.2                .   NULL. 
    hStdInput                       
    hStdOutput                        /.   hStdInput  
    hStdError                           ,  hStdOutput  
hStdError    . 
    ,    ,   dwFlags.    , 
    .    
   CreateProcess,      
STARTUPINFO        .  
        : 

                          

    STARTF_USESIZE                dwXSize  dwYSize. 
    STARTF_USESHOWWINDOW     wShowWindow. 
    STARTF_USEPOSITION           dwX  dwY. 
    STARTF_USECOUNTCHARS       dwXCountChars  dwYCountChars. 
    STARTF_USEFILLATTRIBUTE      dwFillAttribute. 
    STARTF_USESTDHANDLES       hStdInput, 
hStdOutput  hStdError. 
        STARTF_FORCEONFEEDBACK  
STARTF_FORCEOFFFEEDBACK         
  .  Windows 95  Windows NT  
 

    44 _______________________________Windows   

     ,     ,   
,    .    
    CreateProcess     
 : 
       :    -,  - 
,     .    - 
Windows NT      CreateProcess     
.     .       
.  -   Program Manager,    ? 
    ,     . 
,    - ,     
  Program Manager.       ,  
 ... ,  ,  .         
         .   
-,  ,  !     :   
  16- Windows -    . 
       Windows NT,  ,   
 ,       . 
       CreateProcess     
   .      STARTF_FORCEOFFFEEDBACK, 
CreateProcess          
 . 
     STARTF_FORCEONFEEDBACK, ,  CreateProcess 
         
   .  CreateProcess    , 
    .   2    
   GUI-,     .  
        2   -  GUI-, 
CreateProcess ,     .     
 5   GUI.    , CreateProcess 
 ,          
  5 .      GetMessage,   
,    , CreateProcess   
       . 
      ,   ,  STARTF_SCREENSAVER   
,      ;    
   .    
,       , 
   CreateProcess.      GetMessage  
PeekMessage,        
 (idle). 
              
  ,       
  (      CreateProcess). 
         CreateProcess    
 NORMAL_PRIORITY_CLASS,    : 
    1.        ,  
  .          , 
      normal  realtime,    
     . 
    2.       ,  
    - .   
  

    _____________________________________ 3.  45 

      ,        
      ,      
  . 
            wShowWindow  
STARTUPINFO.    ,     
WinMain      nCmdShow.   ,   
      .    
   ,    ShowWindow ( 
 SW_SHOWNORMAL  SW_SHOWMINNOACTIVE,    SW_SHOWDEFAULT). 
          Explorer   WinMain 
  SW_SHOWNORMAL   nCmdShow.     
     Shift,     
 SW^SHOWMINNOACTIVE.      
,         . 
    ,     STARTUPINFO,  
 ,   : 

    VOID GetStartupInfo (LPSTARTUPINFO IpStartupInfo); 

      ,      
      .  :   
  Win32    ,   GetStartupInfo 
   cb  STARTUPINFO: 

    STARTUPINFO si; 
    si.cb = sizeof(si); 
    GetStartupInfo(&si); 


     IppiProdnfo 

     IppiProdnfo    PROCESS_INFORMATION,  
   ;      
CreateProcess.    : 

    typedef struct _PROCESS_INFORMATION { 
    RANDLE hProcess: 
    RANDLE hThread; 
    DWORD dwProcessId: 
    DWORD dwThreadId: 
    } PROCESS_INFORMATION: 

       ,         
    .      
      1.  CreateProcess ( 
  )         
,    ,   hProcess  hThread 
 PROCESS_INFORMATION.  CreateProcess   , 
      2. 
     , ,         
 ,     (   1),  
     CloseHandle (    
).        :    
,        . 
     .     
  . 

    46  _________________________.Windows   

        .      
   ;         
 ,  CreateProcess. 
        ;    
,   ,     .  
   .   , CreateProcess   
   dwProcessId  dwThreadId  
PROCESS_INFORMATION.  ,      . 
         :    
    . ,   
    ,     
, , 022222222.    ,   
    .       
          
  022222222. 
          ,    
   ( ). ,   
   ,  ,  ,  
      ,      
:         . 
        ,     
 .  ,      
,    ,       
  ,     . ,   
      , , ,  
 CreateProcess. 
    ,     ,    
 .      ,  
CloseHandle -     .  
,       . 

      

        : 
    1.       ExitProcess ( 
 ). 
    2.      TerminateProcess (  ). 
    3.        ( ). 
               
,   ,         . 

     ExitProcess 

     ,       ExitProcess: 

    VOID ExitProcess(UINT fuExitCode): 

            fuExitCode  
 .    ExitProcess ,   
     .       
  - ,    . 

     3.  47 

     ExitProcess      , 
  ()     ,  WinMain  
        
 .     ExitProcess,   , 
 WinMain.        
 . 
    ,    Win32 ,     
  ,       . , , 
,     .       
  ,  ExitProcess  ,  
       WinMain. , 
  WinMain  ExitThread ( ,   ExitProcess 
   ),    ,    
       -   ( ). 

     TerminafeProcess 

     TerminateProcess   : 

    BOOL TerminateProcess(HANDLE hProcess, UINT fuExitCode); 

         ExitProcess  ,     
     .  hProcess  
  ,    fuExitCode   
 . 
     TerminateProcess -  ;    
    ,       
.          
    DLL-.    ,   
  TerminateProcess,   ,    
 . ,     DLL-, 
        -   
 .     DLL      
  FreeLibrary.       TerminateProcess 
DLL-    ,      . 
    DLL-      
      ExitProcess. (  DLL . 
 12.) 
       ,  ,      
         
User  GDI,          
 . 

         

       (   ,     
ExitThread     TerminateThread)    
       . 
,        ,   
 .         
 . 

         

       : 
    1.      . 
    2.   User  GDI,  , ,   
 . 

    48 _____________________________Windows   

    3.      ,   (signaled), 
. (    .  10.)      
       . 
    4.       STILL_ACTIVE  , 
  ExitProcess  TerminateProcess. 
    5.       1. 
            , 
       .  ,    
      . 
               
.   ,      
,  ,        
.   ,     ,   
     ,   ( 
CloseHandk)  ,         . 
           .   
 ,  GetExitCodeProcess,  ,   
,   hProcess, ,  ,   : 

    BOOL GetExitCodeProcess(HANDLE hProcess, LPDWORD IpdwExltCode); 

        DWORD,    IpdwExitCode. 
    GetExitCodeProcess    ,  DWORD 
  STILL_ACTIVE (  0103).   
 ,   TRUE.   10     , 
      ,    . 

      

         ,  -  
   .   ,      
   .       
         . 
         -   
     (, ,   ). 
         ,  
     .   , 
,         
,    ,   . 
       :         
  .  ,     . 
,            
 .      ,     
   ,        
   -      
 .  ,       
          ,   
   .    ,   
,      . 
     ,  , -,    
,      .   
,  

     3.  49 

         ,      
   ;     -    
  .  Win32    
   : 
    DDE (Dynamic Data Exchange    ), OLE (Object 
Linking and Embedding     ),  (pipes), 
  (mailslots)  . .      , 
    ,   , 
   (memory-mapped files). (    .  8.) 
         ,    - 
    ,    : 

    PROCESS_INFORMATION pi; 
    DWORD dwExitCode; 
    BOOL fSuccess = CreateProcess(..., &pi): 
    if (fSuccess) { 
    //   ,      ! 
    GloseHandle(pi.hThread): 
    WaitForSingleObject(pi.hProcess, INFINITE): 
    //   
    GetExitCodeProcess(pi.hProcess, SdwExitCode); 
    //   ,      ! 
    CloseHandle(pi.hProcess): 
    } 

            ,    ,  
    WaitForSingleObject 

    DWORD WaitForSingleObject(HANDLE hObject, DWORD dwTimeOut): 

            10,   
  .      
,   hObject,     () 
. (        
.) ,  WaitForSingleObject    
      .  
WaitForSingleObject  ,      
   GetExitCodeProcess. 
      CloseHandle       
           
   ,   . 
    , , ,         
   (  )    
 CreateProcess.         
    ,    .   
    , ,      , 
    . ,     
   ,     .     
        ,  
      .    
   ,        
   ,        . 

    50 _______-____________________Windows   


        

      ,    -     
 (detached processes).  ,      
          , 
   .     Explorer:   
  ,      ,     . 
       ,  Explorer   , 
  ( CloseHandle)   ,    
    .      
, ,  ,   : 

    PROCESS_INFORMATION pi: 
    BOOL fSuccess = CreateProcess(.... &pi); 
    if (fSuccess) { 
       GloseHandle(pi.hThread); 
       CloseHandle(pi.hProcess); 

