青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

xi52qian  
xi52qian
日歷
<2011年3月>
272812345
6789101112
13141516171819
20212223242526
272829303112
3456789
統(tǒng)計
  • 隨筆 - 4
  • 文章 - 0
  • 評論 - 1
  • 引用 - 0

導(dǎo)航

常用鏈接

留言簿

隨筆檔案

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

 

進(jìn)程由兩部分組成:

  • 操作系統(tǒng)管理進(jìn)程的內(nèi)核對象。存放該進(jìn)程 的統(tǒng)計信息的地方。
  • 地址空間,包含可執(zhí)行模塊和DLL模塊的代碼和數(shù)據(jù)。動態(tài)分配的內(nèi)存(線程堆棧和堆)。

進(jìn)程是不活潑的,進(jìn)程當(dāng)中至少要有一個線程,每個線程要有自己的堆棧和自己的CPU寄存器。CPU通過算法給每個線程分配時間片的辦法來造成假象是在同時工作(多核通過自己的算法實現(xiàn)同時運(yùn)行)。

4.1 編寫第一個Windiws應(yīng)用程序

Windows兩種類型的程序:

  • CUI程序,比如CMD.EXE等等。Microsoft Visual C++連接開關(guān)為/SUBSYSTEM:CONDOLE(程序啟動時不能創(chuàng)建GUI程序)。
  • GUI程序,圖形用戶程序,比如Notepad,Word等等。Microsoft Visual C++連接開關(guān)為/SUBSYSTEM:WINDOWS(程序啟動時不能創(chuàng)建CUI程序)。

注意:倆者的概念其實是很模糊的,CUI可以創(chuàng)建GUI圖形界面,反之GUI程序可能用CUI程序。

Windows進(jìn)入點函數(shù)(區(qū)分在于CUI和GUI程序,ANSI碼和UNICODE碼)

int WINAPI WinMain(
HINSTANCE hinstExe,
HINSTANCE,
PSTR pszCmdLine,
int nCmdShow);

int WINAPI wWinMain(
HINSTANCE hinstExe,
HINSTANCE,
PWSTR pszCmdLine,
int nCmdShow);

int __cdecl main(
int argc,
char *argv[],
char *envp[]);

int __cdecl wmain(
int argc,
wchar_t *argv[],
wchar_t *envp[]);

其實Windows程序啟動時最開始并不調(diào)用自己寫的入口函數(shù),而是調(diào)用系統(tǒng)的幾個入口函數(shù),以便可以調(diào)用malloc和free之類的函數(shù),初始化全局和靜態(tài)C++對象等。

  • 檢索指向新進(jìn)程的完整命令行的指針。
  • 檢索指向新進(jìn)程的環(huán)境變量的指針。
  • 對C/C++運(yùn)行期的全局變量進(jìn)行初始化。如果包含StdLib.h文件,代碼就可以訪問這些變量。
  • 對C運(yùn)行期的malloc和callo和其他底層輸入/輸出例程使用的內(nèi)存棧進(jìn)行初始化。
  • 為所有全局和靜態(tài)C++類對象調(diào)用構(gòu)造函數(shù)。

  應(yīng)用程序類型                            進(jìn)入點                                                     嵌入可執(zhí)行文件的啟動函數(shù)


ANSI碼GUI應(yīng)用程序                   WinMain                                               WinMainCRTStattup

UNICODE碼GUI應(yīng)用程序           wWinMain                                            wWinMainCRTStattup

ANSI碼CUI應(yīng)用程序                   main                                                       mainCRTStattup

UNICODE碼CUI應(yīng)用程序           wmain                                                    wmainCRTStattup


注意:應(yīng)用程序會根據(jù)SUBSYSTEM開關(guān)來查找嵌入可執(zhí)行啟動函數(shù),如果進(jìn)入點函數(shù)和啟動函數(shù)不匹配則顯示鏈接錯誤。可以刪除SUBSYSTEM(VS Project Settings)開關(guān),這樣應(yīng)用程序會自動需找匹配的函數(shù)。

進(jìn)入點函數(shù)返回時調(diào)用系統(tǒng)的exit函數(shù),將返回值傳遞給它。exit函數(shù)負(fù)責(zé)下面操作:

  • 調(diào)用由_onexit函數(shù)的調(diào)用而注冊的任何函數(shù)。
  • 為所有全局的和靜態(tài)的C++類對象調(diào)用析構(gòu)函數(shù)
  • 調(diào)用操作系統(tǒng)的ExitProcess,并將返回值傳遞給他,關(guān)閉進(jìn)程。

4.1.1 進(jìn)程的實例句柄

WinMain/wWinMain函數(shù)的第一個參數(shù)表示進(jìn)程加載的可執(zhí)行文件的基地址/句柄。對于加載資源的調(diào)用都要使用此句柄,比如HICON LoadIcon(HINSTANCE, PCTSTR)。有的函數(shù)需要使用HMODULE,和HINSTANCE是一個意思(區(qū)分主要在于16位的操作系統(tǒng)中)。

HMODULE GetModuleHandle(PCTSTR pszModele);

函數(shù)作用,返回加載調(diào)用進(jìn)程中的可執(zhí)行文件或者DLL的基地址/句柄,參數(shù)是可執(zhí)行文件或者DLL的名稱。給pszModule賦值NULL,則返回的是進(jìn)程中可執(zhí)行文件的句柄。

注意:如果找不到則返回NULL。如果在DLL中傳遞NULL,返回的仍然是進(jìn)程加載的可執(zhí)行文件的句柄。

4.1.2 進(jìn)程的前一個實例句柄

第二個參數(shù)都傳遞NULL,是為16位系統(tǒng)所保留的。

4.1.3 進(jìn)程的命令行

注意:不要試圖修改命令行內(nèi)部內(nèi)存的值,要使用修改先拷貝出來。

PTSTR GetCommandLine(); // 返回命令行字符串
 
PTSTR CommandLineToArgv(PTSTR pszCmdLine, int *pNumArgs); // 拆分命令行字符串函數(shù)

Demo:

int nNumargs;
PTSTR *ppArgv = CommandLineToArgv(GetCommandLine(), &nNumargs);
if ('x' == *ppArgv[1]) {
// TODO:
}

// 手動釋放內(nèi)存,一般不需要釋放,系統(tǒng)會進(jìn)程關(guān)閉時候自動釋放
HeapFree(GetProcessHeap, 0, ppArgv);


4.1.4 進(jìn)程的環(huán)境變量

環(huán)境塊是進(jìn)程地址空間中分配的內(nèi)存塊每個環(huán)境塊都包含一組字符串,格式如下:

VarName1=VarVarlue1\0

VarName2=VarVarlue2\0

VarName3=VarVarlue3\0

…..

VarNameX=VarVarlueX\0

\0

注意:

  • 排序必須按照字母順序。
  • ‘=’號不能是變量名的一部分。
  • 等號左右兩邊的空格將被算做名稱或者值。
  • 最后必須加個’\0’表示結(jié)束。
  • 子進(jìn)程和父進(jìn)程不共用環(huán)境塊,修改不會影響父/子進(jìn)程。
DWORD GetEnvironmentVariable(PCTSTR pszName, PTSTR pszValue, DWORD cchValue);


pszName指變量名,pszValue指向變量值的緩存區(qū),cchValue緩存區(qū)的大小。找不到變量名或者設(shè)置的長度不夠存放就返回0。

 

ExpandEnvironmentStrings(PCSTR pszSrc, PSTR pszDst, DWORD nSize);

用來用現(xiàn)實出可替換的環(huán)境變量的字符串。

BOOL SetEnvironmentVariable(PCTSTR pszName, PCTSTR pszValue);

設(shè)置環(huán)境變量的值,如果不存在則創(chuàng)建,如果存在則替換他的值。

4.1.5 進(jìn)程的親緣性

子進(jìn)程繼承父進(jìn)程的親緣性。(具體什么意思沒明白)

4.1.6 進(jìn)程的錯誤模式

進(jìn)程可以設(shè)置如何處理一些錯誤。

UINT SetErrorMode(UINT fuErrorMode);


各個模式用OR連接


      標(biāo)志                                                                                                               說明

SEM_FAILCRITICALERRORS                                                                    系統(tǒng)不顯示關(guān)鍵錯誤句柄消息框,并將錯誤返回給調(diào)用進(jìn)程

SEM_NOGOFAULTERRORBOX                                                               系統(tǒng)不顯示一般保護(hù)故障消息框。本標(biāo)志只應(yīng)該由采用異常情況處理程序來處理一般保護(hù)(GP)故障的調(diào)式應(yīng)用程式來設(shè)定

SEM_NOOPENFILEERRORBOX                                                               當(dāng)系統(tǒng)找不到文件時,它不顯示消息框。

SEM_NOALIGNMENTFAULTEXCEPT                                                    系統(tǒng)自動排除內(nèi)存沒有對其的故障,并使應(yīng)用程序看不到這些故障。本標(biāo)志對X86處理器不起作用。


子進(jìn)程繼承父進(jìn)程的錯誤模式,如果不想讓子進(jìn)程繼承父進(jìn)程的錯誤模式的話,可以再調(diào)用CreateProcess時設(shè)定CREATE_DEFAULT_ERROR_MODE標(biāo)志。

4.1.7 進(jìn)程的當(dāng)前驅(qū)動器和目錄

默認(rèn)情況下不提供全路徑的話,系統(tǒng)就會在當(dāng)前驅(qū)動器和目錄中查找文件,比如CreateFile,因為驅(qū)動器和目錄是每個進(jìn)程來維護(hù)的,所以某個線程改變了目錄和驅(qū)動器會改變整個進(jìn)程的目錄和驅(qū)動器。

下面兩個函數(shù)讀取和設(shè)置:

DWORD GetCurrentDirectory(DWORD cchCurDir, PTSTR pszCurDir);

BOOL SetCurrentDirectory(PCTSTR pszCurDir);

4.1.8 進(jìn)程的當(dāng)前目錄

驅(qū)動器環(huán)境塊的格式:

=C:=C:\Utility\Bin

程序查找驅(qū)動器環(huán)境塊,如果沒有則按驅(qū)動器名查找。

子進(jìn)程不能繼承父進(jìn)程的驅(qū)動器塊,如果想繼承必須寫到環(huán)境變量中去。(好像是這樣,如果有不對請高人指點)。

DWORD GetFullPathName(PCTSTR pszFile, DWORD cchPath, PTSTR pszPath, PTSTR *ppszFilePart);

獲取驅(qū)動器的當(dāng)前目錄,比如:

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


4.1.9 系統(tǒng)版本

DWORD GetVersion();此函數(shù)存在高地位的混論BUG,所以盡量不要使用。

BOOL GetVersion(POSVERSIONINFOEX pVersionInfomation);
typedef struct _OSVERSIONINFOEXA {
    DWORD dwOSVersionInfoSize;    // 在調(diào)用GetVersionEx函數(shù)之前,必必須置為sizeof(OSVERSIONINFOEX)
    DWORD dwMajorVersion;         // 主系統(tǒng)的主要版本號
     DWORD dwMinorVersion;         // 主系統(tǒng)的次要版本號
     DWORD dwBuildNumber;          // 當(dāng)前系統(tǒng)的構(gòu)建號
     DWORD dwPlatformId;           // 識別當(dāng)前系統(tǒng)的平臺??梢允筕ER_PLATFORM_WIN32(WIN32),VER_PLATFORM_WIN32_WINDOWS(WINDOWS 95/WINDOWS 98),VER_PLATFORM_WIN32_NT(WINDOWS NT/WINDOWS 2000)或VER_PLATFORM_WIN32_CEHH(WINDOWS CE)
    CHAR   szCSDVersion[ 128 ];     // Maintenance string for PSS usage 本域包含了附加文本,用于提供關(guān)于已經(jīng)安裝的操作系統(tǒng)的詳細(xì)信息
     WORD   wServicePackMajor;       // 最新安裝的服務(wù)程序包的主要版本號
     WORD   wServicePackMinor;       // 最新安裝的服務(wù)程序包的次要版本號
     WORD   wSuiteMask;              // 用于標(biāo)識系統(tǒng)上存在那個程序組(VER_SUITE_SMALLBUSINESS,VER_SUITE_ENTERPRISE,VER_SUITE_BACKOFFICE,VER_SUITE_COMMUNICATIONS,VER_SUITE_TERMINAL,VER_SUITE_SMALLBUSINESS_RESTRICTED,VER_SUITE_EMBEDDEDNT和VER_SUITE_DATACENTER)
     BYTE  wProductType;             // 用于標(biāo)識安裝了下面的哪個操作系統(tǒng):VER_NT_WORKSTATION,VER_NT_SERVER或VER_NT_DOMAIN_CONTROLLER
    BYTE  wReserved;                // 留作將來使用
} OSVERSIONINFOEXA, *POSVERSIONINFOEXA, *LPOSVERSIONINFOEXA;

這個是擴(kuò)展版本。
 
4.2 CreateProcess函數(shù)
終于看到正題了~大笑
BOOL CreateProcess(
    LPCSTR lpApplicationName,
    LPSTR lpCommandLine,
    LPSECURITY_ATTRIBUTES lpProcessAttributes,
    LPSECURITY_ATTRIBUTES lpThreadAttributes,
    BOOL bInheritHandles,
    DWORD dwCreationFlags,
    LPVOID lpEnvironment,
    LPCSTR lpCurrentDirectory,
    LPSTARTUPINFOA lpStartupInfo,
    LPPROCESS_INFORMATION lpProcessInformation
    );

  1. 進(jìn)程啟動時,首先創(chuàng)建一個進(jìn)程內(nèi)核對象,該內(nèi)核對象不是進(jìn)程,是一個管理進(jìn)程存儲進(jìn)程信息的小型數(shù)據(jù)結(jié)構(gòu)。(計數(shù)為1)
  2. 創(chuàng)建一個虛擬地址空間,加載可執(zhí)行文件和DLL。
  3. 為進(jìn)程創(chuàng)建個主線程的內(nèi)核對象,和進(jìn)程內(nèi)核對象一樣,是用來管理和存儲線程信息的小型數(shù)據(jù)結(jié)構(gòu)。(計數(shù)為1)
  4. 調(diào)用C/C++運(yùn)行期啟動代碼,主線程開始運(yùn)行,最終調(diào)用啟動函數(shù),成功返回TRUE(未能正確加載DLL也返回TRUE,所以父進(jìn)程無法查看)。

4.2.1 pszApplicationName和pszCommandLine

pszCommandLine參數(shù):用來創(chuàng)建進(jìn)程的命令行參數(shù)。查看第一個標(biāo)記,如果沒有”.exe”會自動添加”.exe”上去。(如果pszApplicationName參數(shù)NULL)

  1. 包含調(diào)用進(jìn)程的”.exe”文件的目錄。
  2. 調(diào)用進(jìn)程的當(dāng)前目錄。
  3. windows系統(tǒng)目錄
  4. windows目錄
  5. PATH環(huán)境變量中列出的目錄。

如果pszApplicationName參數(shù)不為NULL,系統(tǒng)將在當(dāng)前目錄中查找.exe文件(不會自動添加“.exe”),如果找不到將失敗,此時pszCommandLine作為參數(shù)傳遞給可執(zhí)行程序的進(jìn)程。

4.2.2 psaProcess,psaThread和binHeritHandles

psaProcess,psaThread是進(jìn)程和進(jìn)程主線程內(nèi)核對象的安全屬性。默認(rèn)值為NULL。

binHeritHandles設(shè)置為TRUE表示父進(jìn)程在創(chuàng)建子進(jìn)程可以繼承安全屬性標(biāo)志里設(shè)置為TRUE的任何可繼承的內(nèi)核對象。如果設(shè)置為FALSE子進(jìn)程將不繼承任何內(nèi)核對象。

4.2.3 fdwCreate

用于標(biāo)識標(biāo)志,定義規(guī)則如何創(chuàng)建新進(jìn)程。我一般寫默認(rèn)值NULL。具體的太多了,請查看MSDN吧,不想寫了。

4.2.4 pvEnvironment

設(shè)置子進(jìn)程使用的環(huán)境內(nèi)存塊,一般默認(rèn)值為NULL,表示子進(jìn)程繼承父進(jìn)程的環(huán)境塊。

PVOID GetEnvironmentString(); // 獲取當(dāng)前內(nèi)存塊的地址
BOOL FreeEnvironmentStrings(PTSTR pszEnvironmentBlock); // 不用的時候調(diào)用此函數(shù)釋放內(nèi)存塊


4.2.5 pszCurDir

設(shè)定工作目錄和驅(qū)動器號,如果為NULL則和應(yīng)用程序的目錄相同,如果設(shè)置比如以’\0’結(jié)尾的包含驅(qū)動器名的路徑。

4.2.6 psiStartInfo

typedef struct _STARTUPINFO {
    DWORD   cb;             //(兩者兼有,控制臺和窗口程序) 
    LPSTR   lpReserved;     // (兩者兼有)保留,必須初始化為NULL
    LPSTR   lpDesktop;      // (兩者兼有)用于標(biāo)識啟動應(yīng)用程序所在的桌面的名字。如果該桌面存在,新進(jìn)程便與指定的桌面相關(guān)聯(lián)。如果桌面不存在,便創(chuàng)建一個帶有默認(rèn)屬性的桌面,并使用為新進(jìn)程指定的名字。如果lpDesktop是NULL(這是最常見的情況),那么該進(jìn)程將與當(dāng)前桌面相關(guān)聯(lián)。
    LPSTR   lpTitle;        // (控制臺)用于設(shè)定控制臺窗口名稱。如果lpTitle是NULL,則可執(zhí)行文件的名字將用作窗口名
    DWORD   dwX;            // x,y坐標(biāo),只有當(dāng)子進(jìn)程用CW_USEDEFAULT作為CreateWindows的x參數(shù)來創(chuàng)建它的第一個重疊窗口時,才使用這兩個坐標(biāo)。若是創(chuàng)建控制臺窗口的應(yīng)用程序,這些成員用于指明控制臺窗口的左上角。
    DWORD   dwY;          
    DWORD   dwXSize;        //(兩者兼有)設(shè)定窗口寬度和長度,只有子進(jìn)程用WM_USEDEFAULT作為CreateWIndows的nWidth參數(shù)來創(chuàng)建它的第一個重疊窗口時才是用這個值??刂婆_就是控制臺的寬和長
    DWORD   dwYSize;
    DWORD   dwXCountChars;  //(控制臺)用于設(shè)定子應(yīng)用程序控制臺的長度和寬度(字符表示)
    DWORD   dwYCountChars;
    DWORD   dwFillAttribute;// (控制臺)用于設(shè)定子應(yīng)用程序的控制臺背影顏色和文本。
    DWORD   dwFlags;        // (兩者兼有)參見下一段
    WORD    wShowWindow;    // (窗口)用于設(shè)定子應(yīng)用程序初次調(diào)用ShowWindow將SW_SHOWDEFAULT作為nCmdShow參數(shù)傳遞時,該應(yīng)用程序的第一個重疊窗口應(yīng)該如何出現(xiàn)。本成員可以是通常用于ShowWindow函數(shù)的任何一個SW_*標(biāo)識符
    WORD    cbReserved2;    // 保留,必須初始化為0
    LPBYTE  lpReserved2;    // 保留,必須初始化為NULL
    HANDLE  hStdInput;      // (控制臺)用于設(shè)定控制臺輸入和輸出用的緩存的句柄。默認(rèn)設(shè)置hStdInput是鍵盤緩存,hStdOutput和hStdError窗口的緩存。
    HANDLE  hStdOutput;     // 
    HANDLE  hStdError;
} STARTUPINFO, *LPSTARTUPINFO;


設(shè)置某些值,大部分需要默認(rèn)值,必須初始化為0都。

STARTUPINFO si = {sizeof(si)};

dwFlags標(biāo)志,用于修改如何來創(chuàng)建子進(jìn)程。


標(biāo)志
STARTF_USESIZE                                                                              使用dwXSize和dwYSize成員

STARTF_USESHOWWINDOW                                                         使用wShowWIndow成員

STARTF_USEPOSITION                                                                    使用dwX和dwY成員

STARTF_USECOUNTCHARS                                                            使用dwXCountChars和dwYCountChars成員

STARTF_USEFILLATTRIBUTE                                                           使用dwFillAttribute成員

STARTF_USESTDHANDLES                                                             使用hStdInput,hStdOutput和hStdError成員

STARTF_RUN_FULLSCREEN                                                            強(qiáng)制再x86計算機(jī)上運(yùn)行的控制臺應(yīng)用程序以全屏幕方式啟動運(yùn)行

STARTF_FORCEONFEEDBACK                                                        光標(biāo)設(shè)置為沙漏,過了2秒如果進(jìn)程沒啟動GUI,CreateProcess程序?qū)⒐鈽?biāo)設(shè)置為箭頭,5秒內(nèi)顯示一個窗口,成功調(diào)用GetMessage則反復(fù)箭頭,如果沒有成功,等待5秒 變?yōu)榧^

STARTF_FORCEOFFFEEDBACK                                                                                      


4.2.7 ppiProcInfo

typedef struct _PROCESS_INFORMATION {
    HANDLE hProcess;
    HANDLE hThread;
    DWORD dwProcessId;
    DWORD dwThreadId;
} PROCESS_INFORMATION, *PPROCESS_INFORMATION, *LPPROCESS_INFORMATION;

返回的分別是,子進(jìn)程進(jìn)程句柄,子進(jìn)程中主線程的線程句柄,子進(jìn)程ID,子進(jìn)程中主線程的ID。

注意:

  1. hProcess和hThread被賦值后,內(nèi)核對象的計數(shù)器分別被+1。
  2. 系統(tǒng)為每個進(jìn)程和線程分配的ID值都是不同的,但是當(dāng)某進(jìn)程退出后,新進(jìn)程很可能會使用退出進(jìn)程的ID。

 

4.3 終止進(jìn)程的運(yùn)行

4.3.1 主線程的進(jìn)入點函數(shù)返回

最好強(qiáng)力推薦使用這種方式。

  1. 調(diào)用C++析構(gòu)函數(shù)。
  2. 釋放堆棧內(nèi)存。
  3. 將進(jìn)程退出代碼(進(jìn)程內(nèi)核對象中維護(hù))設(shè)置為進(jìn)入點函數(shù)返回值。
  4. 系統(tǒng)將進(jìn)程內(nèi)核對象的返回值減去1。

4.3.2 ExitProcess函數(shù)

避免使用這個方法。

VOID ExitProcess(UINT fuExitCode);

終止進(jìn)程運(yùn)行,并將退出碼設(shè)置為fuExitCode。

注意:

  1. 調(diào)用ExitProcess后,所有的代碼都將不會執(zhí)行,關(guān)閉進(jìn)程。
  2. 調(diào)用ExitProcess后,不會釋放C++析構(gòu)函數(shù)資源,有系統(tǒng)清理進(jìn)程時候直接釋放內(nèi)存。
  3. 進(jìn)程的主線程直接return退出后,啟動函數(shù)中也會調(diào)用ExitProcess函數(shù),進(jìn)程終止,其他線程也會關(guān)閉。
  4. 進(jìn)程的主線程調(diào)用_endThreadex或者EndThread函數(shù)關(guān)閉主線程后,進(jìn)程沒有被關(guān)閉,子線程繼續(xù)運(yùn)行。

 

4.3.3 TerminiateProcess函數(shù)

能不用就別用。

BOOL TerminiateProcess(HANDLE hProcess, UINT fuExitCode;)

關(guān)閉指定為hProcess句柄的進(jìn)程,推出代碼為fuExitCode。

注意:

  1. 關(guān)閉進(jìn)程將丟失所有需要保存到硬盤的數(shù)據(jù),因為進(jìn)程關(guān)閉時候最后會自己釋放內(nèi)存資源,關(guān)閉內(nèi)核對象的句柄值,所以不會造成內(nèi)存泄露。
  2. 此函數(shù)是個異步函數(shù),它返回的時候無法知道,需要關(guān)閉的進(jìn)程是否已經(jīng)被強(qiáng)制關(guān)閉了。

4.3.4 進(jìn)程終止運(yùn)行時出現(xiàn)的情況

  1. 進(jìn)程中剩余的所有線程全部終止運(yùn)行。
  2. 釋放該進(jìn)程引用的GDI和用戶對象,內(nèi)核對象被關(guān)閉(別的進(jìn)程有引用則計數(shù)器減1,如果沒有引用則關(guān)閉內(nèi)核對象)。
  3. 推出代碼將從STILL_ACTIVE(后面章節(jié)線程將介紹該結(jié)構(gòu))改為傳遞給ExitProcess和TerminiateProcess代碼。
  4. 內(nèi)核對象狀態(tài)變?yōu)槭盏酵ㄖ獱顟B(tài)(線程中介紹),其他線程掛起,知道進(jìn)程終止。
  5. 進(jìn)程內(nèi)核對象計數(shù)減去1,或者關(guān)閉。

注意:

進(jìn)程內(nèi)核對象的壽命可能遠(yuǎn)遠(yuǎn)大于進(jìn)程本身,父進(jìn)程保留子進(jìn)程內(nèi)核對象可以查看它的推出代碼調(diào)用下面函數(shù):

BOOL GetExitCodeProcess(HANDLE hProcess, PDWORD pdwExitCode);


可以調(diào)用這個函數(shù)來判斷子進(jìn)程是否關(guān)閉,如果子進(jìn)程沒有關(guān)閉,它的STILL_ACTIVE標(biāo)識符定義為0x103。但是這么作效率不是很高。

 

4.4 子進(jìn)程

沒什么好說的,前面的都說了,用CloseHandle關(guān)閉子進(jìn)程和子進(jìn)程中主線程的句柄值來切斷父進(jìn)程和子進(jìn)程的所有聯(lián)系。

 

4.5 每局系統(tǒng)中運(yùn)行的進(jìn)程

利用ToolHelp函數(shù)族來開發(fā)管理操作系統(tǒng)上的進(jìn)程。打算自己也寫個試試。

 

本文章的內(nèi)容是本人學(xué)習(xí)Windows核心編程第四章后的總結(jié),有錯誤請大家糾正,轉(zhuǎn)載注明出處:

http://www.cnblogs.com/xi52qian/

posted on 2011-03-07 09:40 xi52qian 閱讀(400) 評論(0)  編輯 收藏 引用

只有注冊用戶登錄后才能發(fā)表評論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


 
Copyright © xi52qian Powered by: 博客園 模板提供:滬江博客
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            久久亚洲国产精品日日av夜夜| 国产精品久久久久久久久借妻| 亚洲国产精品久久91精品| 亚洲欧美日韩国产中文在线| 一区二区三区黄色| 一本色道久久综合精品竹菊| 夜夜精品视频| 性欧美办公室18xxxxhd| 亚洲专区一区| 欧美在线免费看| 久久裸体艺术| 欧美精品亚洲精品| 国产精品日韩| 136国产福利精品导航网址应用| 亚洲国产专区| 一本色道久久综合亚洲精品婷婷 | 亚洲欧美日韩高清| 精品动漫一区二区| 国产精品久久久久久影视| 国产久一道中文一区| 国产综合色产在线精品| 亚洲国产一区在线| 欧美一区午夜视频在线观看| 美日韩精品视频免费看| 99视频日韩| 久久漫画官网| 国产农村妇女精品一二区| 亚洲国产精品v| 亚洲免费在线观看| 麻豆精品在线视频| 亚洲欧美99| 欧美日韩国产成人高清视频| 国户精品久久久久久久久久久不卡 | 国产欧美一区二区白浆黑人| 亚洲精品一区二区三区av| 性色av一区二区三区| 欧美国产先锋| 久久成人免费日本黄色| 国产精品高潮呻吟久久av无限| 亚洲成人在线视频网站| 久久aⅴ国产欧美74aaa| 一区二区三区高清在线| 欧美精品久久久久久久免费观看| 激情久久综艺| 久久精品导航| 亚洲欧美日韩中文播放| 欧美视频一区二区三区…| 亚洲精品小视频| 欧美国产欧美亚州国产日韩mv天天看完整| 欧美日韩在线播| 国产亚洲成av人片在线观看桃| 一区二区三区蜜桃网| 亚洲第一综合天堂另类专| 久久精品成人一区二区三区| 国产欧美日韩视频一区二区三区| 亚洲一区自拍| 在线视频中文亚洲| 国产精品国产三级国产| 国产精品99久久久久久www| 亚洲啪啪91| 欧美日韩国产免费观看| 中文国产亚洲喷潮| 亚洲午夜三级在线| 国产欧美日韩视频| 久久综合五月| 男人插女人欧美| 亚洲最新色图| 国产精品99久久久久久人| 国产精品国产a级| 久久精品国产第一区二区三区最新章节| 欧美一级在线播放| 亚洲一区观看| 国产日韩欧美精品一区| 日韩视频免费在线观看| 国产精品成人va在线观看| 国产精品99久久久久久www| 一区二区av| 国产亚洲人成网站在线观看| 久久这里有精品视频| 久久久蜜臀国产一区二区| 伊人久久婷婷色综合98网| 牛夜精品久久久久久久99黑人| 免费不卡亚洲欧美| 中文精品99久久国产香蕉| 午夜精品视频在线观看一区二区| 在线看欧美日韩| 一区二区三区国产精华| 韩国成人福利片在线播放| 亚洲国产成人91精品| 欧美香蕉大胸在线视频观看| 久久精品国产免费看久久精品| 美女网站在线免费欧美精品| 一本色道久久综合亚洲精品按摩| 亚洲欧美国产高清| 亚洲国产精品99久久久久久久久| 一区二区三区精品视频| 国产亚洲一区在线播放| 亚洲电影观看| 国产日本亚洲高清| 亚洲国产天堂久久国产91| 国产日本欧美视频| 日韩一区二区精品视频| 揄拍成人国产精品视频| 亚洲一区二区精品在线| 亚洲国产日韩欧美| 性欧美精品高清| 亚洲天堂偷拍| 欧美成人a∨高清免费观看| 久久爱91午夜羞羞| 欧美日韩在线不卡| 欧美激情亚洲激情| 黄色成人av网| 欧美一区二区精品| 亚洲欧美清纯在线制服| 欧美激情欧美狂野欧美精品 | 亚洲影院高清在线| 久久人人爽人人爽| 久久国产天堂福利天堂| 欧美色另类天堂2015| 亚洲国产精品精华液网站| 在线日韩电影| 久久精品在线视频| 欧美自拍丝袜亚洲| 国产精品久久久久免费a∨大胸| 最新日韩精品| 最新热久久免费视频| 久久久欧美精品sm网站| 久久精品综合| 国产日本欧美一区二区三区| 一区二区三区精品久久久| 一区二区激情视频| 欧美精品v国产精品v日韩精品 | 黄色欧美日韩| 久久成人精品电影| 久久女同精品一区二区| 欧美承认网站| 亚洲小少妇裸体bbw| 亚洲精品国产欧美| 91久久精品一区二区别| 9久草视频在线视频精品| 亚洲一区二区三区中文字幕在线| 99riav国产精品| 久久综合婷婷| 亚洲色图在线视频| 鲁大师影院一区二区三区| 欧美日韩国产综合在线| 欧美香蕉大胸在线视频观看| **性色生活片久久毛片| 欧美在线电影| 在线亚洲观看| 欧美日韩123| 亚洲精选成人| 亚洲娇小video精品| 久久精品国产久精国产思思| 国产精品红桃| 欧美一区二区三区视频在线观看| 亚洲国产欧美另类丝袜| 欧美激情一区在线观看| 日韩五码在线| 亚洲天堂av高清| 国产精品免费观看在线| 久久狠狠亚洲综合| 久久综合福利| 亚洲女人小视频在线观看| 亚洲香蕉伊综合在人在线视看| 国产精品乱码人人做人人爱| 久久九九热re6这里有精品| 久久精精品视频| 亚洲国产成人精品久久久国产成人一区| 91久久在线播放| 蜜桃av一区二区三区| avtt综合网| 先锋影音久久久| 日韩亚洲欧美成人| 国产日韩精品久久久| 亚洲一二三级电影| 亚洲欧美日韩精品久久亚洲区| 伊人狠狠色j香婷婷综合| 亚洲国产午夜| 狠狠色狠狠色综合日日91app| 亚洲精品日日夜夜| 亚洲娇小video精品| 亚洲欧美激情视频| 亚洲伦理在线观看| 久久久久国产精品一区三寸| 一区二区三区产品免费精品久久75 | 午夜精品在线| 亚洲桃色在线一区| 欧美特黄一级| 午夜亚洲影视| 中文网丁香综合网| 亚洲美女一区| 欧美1区2区3区| 亚洲高清影视| 亚洲精品一区二区三区在线观看| 性伦欧美刺激片在线观看| 亚洲综合欧美| 欧美三日本三级三级在线播放| 欧美成人激情视频免费观看| 国户精品久久久久久久久久久不卡 |