Windows核心編程

出版時(shí)間:2008-5  出版社:機(jī)械工業(yè)出版社  作者:理查德  頁(yè)數(shù):728  譯者:黃隴,李虎  
Tag標(biāo)簽:無(wú)  

內(nèi)容概要

  本書(shū)是講解Windows操作系統(tǒng)內(nèi)部機(jī)制的一本專(zhuān)著。作者從基本概念入手,全面系統(tǒng)地介紹了Windows底層實(shí)現(xiàn)機(jī)制、Windows應(yīng)用程序的基本構(gòu)件(包括進(jìn)程、線程、內(nèi)存管理、動(dòng)態(tài)鏈接庫(kù)、線程本地存儲(chǔ)和Unicode)以及各類(lèi)Windows API等,并列舉了大量應(yīng)用程序示例,精辟地分析了Windows編程的各個(gè)難點(diǎn)和要點(diǎn),為掌握Windows編程技巧提供了一條有效的捷徑?! ”緯?shū)適合Windows編程人員參考。

作者簡(jiǎn)介

作者:(美)理查德 譯者:黃隴 李虎Jeffrey Richter,是一位在全球享有盛譽(yù)的技術(shù)作家,尤其在Windows/.NET領(lǐng)域有著杰出的貢獻(xiàn)。他的第一本W(wǎng)indows著作《Windows 95:A Developer'S Guide》大獲好評(píng),從而聲名遠(yuǎn)揚(yáng)。之后,他又推出了經(jīng)典著作《Windows高級(jí)編程指南》和dWindows核心編程》。如今這兩本書(shū)早已成為Windows程序設(shè)計(jì)領(lǐng)域的經(jīng)典之作,培育了幾代軟件開(kāi)發(fā)設(shè)計(jì)人員。Jeffrey是WinteIIect公司的創(chuàng)始人之一,也是MSDN雜志.NET專(zhuān)欄的特邀編輯。他對(duì)Windows思想的領(lǐng)悟、對(duì)Windows細(xì)節(jié)的熟稔,是其他任何作家難以企及的。他是Windows技術(shù)作家中當(dāng)之無(wú)愧的一面旗幟。

書(shū)籍目錄

譯者序前言作譯者簡(jiǎn)介第一部分 程序員必讀第1章 錯(cuò)誤處理1.1 自定義錯(cuò)誤處理的實(shí)現(xiàn)1.2 錯(cuò)誤顯示例程第2章 Unicode2.1 字符集2.1.1 單字節(jié)和雙字節(jié)字符集2.1.2 Unicode:寬字節(jié)字符集2.2 為何需要Unicode2.3 Windows 2000和Unicode2.4 Windows 98和Unicode2.5 Windows CE和Unicode2.6 評(píng)論2.7 關(guān)于COM2.8 如何編寫(xiě)Unicode源代碼2.8.1 C運(yùn)行庫(kù)的Unicode支持2.8.2 Windows定義的Unicode數(shù)據(jù)類(lèi)型2.8.3 Windows系統(tǒng)中的Unicode函數(shù)和ANSI函數(shù)2.8.4 Windows字符串函數(shù)2.9 讓?xiě)?yīng)用程序符合ANSI和Unicode規(guī)范2.9.1 Windows字符串函數(shù)2.9.2 資源2.9.3 確定文本是ANSI型還是Unicode型2.9.4 在Unicode和ANSI間轉(zhuǎn)換字符串第3章 內(nèi)核對(duì)象3.1 內(nèi)核對(duì)象的概念3.1.1 使用計(jì)數(shù)3.1.2 安全性3.2 內(nèi)核對(duì)象句柄表3.2.1 創(chuàng)建內(nèi)核對(duì)象3.2.2 關(guān)閉內(nèi)核對(duì)象3.3 進(jìn)程間內(nèi)核對(duì)象的共享3.3.1 對(duì)象句柄的繼承性3.3.2 改變句柄標(biāo)志3.3.3 命名對(duì)象3.3.4 終端服務(wù)器命名空間3.3.5 復(fù)制對(duì)象句柄第二部分 完成編程任務(wù)第4章 進(jìn)程4.1 編寫(xiě)第一個(gè)Windows應(yīng)用程序4.1.1 進(jìn)程的實(shí)例句柄4.1.2 進(jìn)程的前一個(gè)實(shí)例句柄4.1.3 進(jìn)程的命令行4.1.4 進(jìn)程的環(huán)境變量4.1.5 親緣性4.1.6 進(jìn)程的錯(cuò)誤模式4.1.7 當(dāng)前驅(qū)動(dòng)器和目錄4.1.8 當(dāng)前目錄4.1.9 系統(tǒng)版本4.2 CreateProcess函數(shù)4.2.1 pszApplicationName和pszCommandLine4.2.2 psaProcess、psaThread和bInheritHandles4.2.3 fdwCreate4.2.4 pvEnvironment4.2.5 pszCurDir4.2.6 psiStartInfo4.2.7 ppiProcInfo4.3 進(jìn)程的終止4.3.1 主線程的入口函數(shù)返回4.3.2 ExitProcess函數(shù)4.3.3 TerminateProcess函數(shù)4.3.4 進(jìn)程中所有線程的運(yùn)行終止4.3.5 進(jìn)程的運(yùn)行終止4.4 子進(jìn)程4.5 枚舉系統(tǒng)中運(yùn)行的進(jìn)程第5章 作業(yè)5.1 對(duì)作業(yè)進(jìn)程的限制5.2 把進(jìn)程放入作業(yè)5.3 終止作業(yè)中所有進(jìn)程的運(yùn)行5.4 查詢(xún)作業(yè)統(tǒng)計(jì)信息5.5 作業(yè)通知信息5.6 JobLab示例應(yīng)用程序第6章 線程的基本知識(shí)6.1 創(chuàng)建線程的時(shí)機(jī)6.2 何時(shí)不能創(chuàng)建線程6.3 編寫(xiě)第一個(gè)線程函數(shù)6.4 CreateThread函數(shù)6.4.1 psa6.4.2 cbStack6.4.3 pfnStartAddr和pvParam6.4.4 fdwCreate6.4.5 pdwThreadID6.5 終止線程6.5.1 線程函數(shù)返回6.5.2 ExitThread函數(shù)6.5.3 TerminateThread函數(shù)6.5.4 在進(jìn)程終止運(yùn)行時(shí)終止線程6.5.5 線程終止運(yùn)行時(shí)發(fā)生的操作6.6 線程的一些內(nèi)部細(xì)節(jié)6.7 對(duì)于C/C++運(yùn)行時(shí)庫(kù)的考慮6.7.1 Oops-錯(cuò)誤地調(diào)用了CreateThread6.7.2 不該調(diào)用的C/C++運(yùn)行時(shí)庫(kù)函數(shù)6.8 線程的身份標(biāo)識(shí)第7章 線程的調(diào)度、優(yōu)先級(jí)和親緣性7.1 掛起和恢復(fù)線程的運(yùn)行7.2 進(jìn)程的掛起和喚醒7.3 睡眠7.4 線程切換7.5 線程的運(yùn)行時(shí)間7.6 上下文環(huán)境切換7.7 線程優(yōu)先級(jí)7.8 優(yōu)先級(jí)的抽象說(shuō)明7.9 編程優(yōu)先級(jí)7.9.1 動(dòng)態(tài)提高線程的優(yōu)先級(jí)等級(jí)7.9.2 為前臺(tái)進(jìn)程調(diào)整調(diào)度程序7.9.3 Scheduling Lab示例應(yīng)用程序7.10 親緣性第8章 用戶(hù)模式下的線程同步8.1 原子訪問(wèn):互鎖函數(shù)族8.2 高速緩存行8.3 高級(jí)線程同步8.4 臨界區(qū)8.4.1 臨界區(qū)準(zhǔn)確的描述8.4.2 臨界區(qū)與循環(huán)鎖8.4.3 臨界區(qū)與錯(cuò)誤處理8.4.4 有用的提示和技巧第9章 線程與內(nèi)核對(duì)象的同步9.1 等待函數(shù)9.2 成功等待的副作用9.3 事件內(nèi)核對(duì)象9.4 等待定時(shí)器內(nèi)核對(duì)象9.4.1 用等待定時(shí)器給APC項(xiàng)排隊(duì)9.4.2 定時(shí)器的松散特性9.5 信號(hào)量?jī)?nèi)核對(duì)象9.6 互斥內(nèi)核對(duì)象9.6.1 釋放問(wèn)題9.6.2 互斥對(duì)象與臨界區(qū)的比較9.6.3 Queue應(yīng)用程序示例9.7 線程同步對(duì)象表9.8 其他線程同步函數(shù)9.8.1 異步設(shè)備I/O9.8.2 WaitForInputIdle9.8.3 MsgWaitForMultipleObjects(Ex)9.8.4 WaitForDebugEvent9.8.5 SignalObjectAndWait第10章 線程同步工具包10.1 臨界區(qū)的實(shí)現(xiàn):Optex10.2 創(chuàng)建線程安全的數(shù)據(jù)類(lèi)型和反信號(hào)量10.3 單寫(xiě)入多讀出程序的保護(hù)10.4 WaitForMultipleExpressions函數(shù)的實(shí)現(xiàn)第11章 線程池11.1 場(chǎng)景1:異步調(diào)用函數(shù)11.2 場(chǎng)景2:按規(guī)定的時(shí)間間隔調(diào)用函數(shù)11.3 場(chǎng)景3:在某個(gè)內(nèi)核對(duì)象變?yōu)橐淹ㄖ獱顟B(tài)時(shí)調(diào)用函數(shù)11.4 場(chǎng)景4:異步I/O請(qǐng)求運(yùn)行完成時(shí)調(diào)用函數(shù)第12章 纖程12.1 使用纖程12.2 Counter示例應(yīng)用程序第三部分 內(nèi)存管理第13章 Windows內(nèi)存結(jié)構(gòu)13.1 進(jìn)程的虛擬地址空間13.2 虛擬地址空間分區(qū)13.2.1 無(wú)效斷點(diǎn)分配分區(qū)(適于Windows 2000和Windows 98)13.2.2 MS-DOS/16位Windows應(yīng)用程序兼容分區(qū)(僅適于Windows 98)13.2.3 用戶(hù)模式分區(qū)(適用Windows 2000和Windows 98)13.2.4 64KB禁止進(jìn)入分區(qū)(僅適用于Windows 2000)13.2.5 共享的MMF分區(qū)(僅適用于Windows 98)13.2.6 內(nèi)核模式分區(qū)(使用于Windows 2000和Windows 98)13.3 地址空間區(qū)域13.4 在地址空間區(qū)域中提交物理存儲(chǔ)器13.5 物理存儲(chǔ)器和頁(yè)面文件13.6 保護(hù)屬性13.6.1 Copy-On-Write訪問(wèn)13.6.2 特殊訪問(wèn)保護(hù)屬性標(biāo)志13.7 綜合使用所有元素13.7.1 區(qū)域的內(nèi)部詳情13.7.2 Windows 98上地址空間的差異13.8 數(shù)據(jù)對(duì)齊的重要性第14章 虛擬內(nèi)存14.1 系統(tǒng)信息14.2 虛擬內(nèi)存的狀態(tài)14.3 確定地址空間狀態(tài)14.3.1 VMQery函數(shù)14.3.2 虛擬內(nèi)存表應(yīng)用程序示例第15章 應(yīng)用程序中虛擬內(nèi)存的使用15.1 地址空間中保留區(qū)域15.2 在保留區(qū)域中提交存儲(chǔ)器15.3 同時(shí)進(jìn)行保留區(qū)域并提交內(nèi)存15.4 何時(shí)提交物理存儲(chǔ)器15.5 物理存儲(chǔ)器的回收和地址空間區(qū)域的釋放15.5.1 何時(shí)回收物理存儲(chǔ)器15.5.2 虛擬內(nèi)存分配示例應(yīng)用程序15.6 改變保護(hù)屬性15.7 清除物理存儲(chǔ)器內(nèi)容15.8 地址窗口擴(kuò)展(僅使用于Windows 2000)第16章 線程棧16.1 Windows 98下的線程棧16.2 C/C++運(yùn)行時(shí)庫(kù)中的棧檢測(cè)函數(shù)16.3 Summation示例應(yīng)用程序第17章 內(nèi)存映射文件17.1 內(nèi)存映射的可執(zhí)行文件和DLL文件17.1.1 可執(zhí)行文件或DLL的多個(gè)實(shí)例之間無(wú)法共享的靜態(tài)數(shù)據(jù)17.1.2 在可執(zhí)行文件或DLL的多個(gè)實(shí)例之間共享靜態(tài)數(shù)據(jù)17.1.3 AppInst示例應(yīng)用程序17.2 內(nèi)存映射數(shù)據(jù)文件17.2.1 方法1:一個(gè)文件,一個(gè)緩存17.2.2 方法2:兩個(gè)文件,一個(gè)緩存17.2.3 方法3:一個(gè)文件,兩個(gè)緩存17.2.4 方法4:一個(gè)文件,零個(gè)緩存17.3 使用內(nèi)存映射文件17.3.1 步驟1:創(chuàng)建或打開(kāi)文件內(nèi)核對(duì)象17.3.2 步驟2:創(chuàng)建文件映射內(nèi)核對(duì)象17.3.3 步驟3:將文件數(shù)據(jù)映射到進(jìn)程地址空間17.3.4 步驟4:進(jìn)程地址空間中撤銷(xiāo)文件數(shù)據(jù)的映像17.3.5 步驟5和步驟6:關(guān)閉文件映射對(duì)象和文件對(duì)象17.3.6 文件倒序示例應(yīng)用程序17.4 使用內(nèi)存映射文件處理大文件17.5 內(nèi)存映射文件的一致性17.6 設(shè)定內(nèi)存映射文件的基地址17.7 實(shí)現(xiàn)內(nèi)存映射文件的具體細(xì)節(jié)17.8 使用內(nèi)存映射文件在進(jìn)程之間實(shí)現(xiàn)數(shù)據(jù)共享17.9 受頁(yè)面文件支持的內(nèi)存映射文件17.10 稀疏提交的內(nèi)存映射文件第18章 堆18.1 進(jìn)程的默認(rèn)堆18.2 創(chuàng)建輔助堆的原因18.2.1 保護(hù)組件18.2.2 更有效地管理內(nèi)存18.2.3 進(jìn)行本地訪問(wèn)18.2.4 減少線程同步開(kāi)銷(xiāo)18.2.5 快速釋放18.3 創(chuàng)建輔助堆的方法18.3.1 分配堆中的內(nèi)存塊18.3.2 改變內(nèi)存塊的大小18.3.3 獲取內(nèi)存塊的大小18.3.4 釋放內(nèi)存塊18.3.5 銷(xiāo)毀堆18.3.6 用C++程序使用堆18.4 其他堆函數(shù)第四部分 動(dòng)態(tài)鏈接庫(kù)第19章 DLL基礎(chǔ)19.1 DLL與進(jìn)程的地址空間19.2 DLL的總體運(yùn)行情況19.3 創(chuàng)建DLL模塊19.3.1 導(dǎo)出的真正含義19.3.2 使用非Visual C++工具創(chuàng)建DLL19.4 創(chuàng)建可執(zhí)行模塊19.5 運(yùn)行可執(zhí)行模塊第20章 DLL高級(jí)技術(shù)20.1 顯式加載DLL模塊和符號(hào)鏈接20.1.1 顯式加載DLL模塊20.1.2 顯式卸載DLL模塊20.1.3 顯式鏈接到導(dǎo)出符號(hào)20.2 DLL的入口函數(shù)20.2.1 DLL_PROCESS_ATTACH通知20.2.2 DLL_PROCESS_DETACH通知20.2.3 DLL_THREAD_ATTACH通知20.2.4 DLL_THREAD_DETACH通知20.2.5 順序調(diào)用DllMain20.2.6 DllMain和C/C++運(yùn)行時(shí)庫(kù)20.3 延遲加載DLL20.4 函數(shù)轉(zhuǎn)發(fā)器20.5 已知的DLL20.6 DLL重定向20.7 模塊的基址重置20.8 綁定模塊第21章 線程本地存儲(chǔ)21.1 動(dòng)態(tài)TLS21.2 靜態(tài)TLS第22章 DLL注入以及API掛接22.1 DLL注入:一個(gè)例子22.2 使用注冊(cè)表注入DLL22.3 使用Windows鉤子注入DLL22.4 使用遠(yuǎn)程線程注入DLL22.4.1 Inject Library示例應(yīng)用程序22.4.2 Image Walk DLL22.5 使用特洛伊DLL注入DLL22.6 將DLL作為調(diào)試程序注入22.7 在Windows 98平臺(tái)上使用內(nèi)存映射文件注入代碼22.8 使用CreateProcess來(lái)注入代碼22.9 API掛接:一個(gè)例子22.9.1 通過(guò)覆寫(xiě)代碼實(shí)現(xiàn)API掛接22.9.2 通過(guò)操作模塊的導(dǎo)入部分來(lái)實(shí)現(xiàn)API掛接22.9.3 LastMsgBoxInfo示例應(yīng)用程序第五部分 結(jié)構(gòu)化異常處理第23章 終止處理例程23.1 Funcenstein123.2 Funcenstein223.3 Funcenstein323.4 Funcfurter123.5 小測(cè)驗(yàn):FuncaDoodleDoo23.6 Funcenstein423.7 Funcarama123.8 Funcarama223.9 Funcarama323.10 Funcarama4:最終的邊界23.11 有關(guān)finally塊的說(shuō)明23.12 Funcfurter223.13 SEH終止示例應(yīng)用程序第24章 異常處理程序和軟件異常24.1 通過(guò)例子理解異常過(guò)濾器和異常處理程序24.1.1 Funcmeister124.1.2 Funcmeister224.2 EXCEPTION_EXECUTE_HANDLER24.2.1 一些有用的例子24.2.2 全局展開(kāi)24.2.3 暫停全局展開(kāi)24.3 EXCEPTION_CONTINUE_EXECUTION24.4 EXCEPTION_CONTINUE_SEARCH24.5 GetExceptionCode24.5.1 與內(nèi)存相關(guān)的異常24.5.2 與異常相關(guān)的異常24.5.3 與調(diào)試相關(guān)的異常24.5.4 與整數(shù)相關(guān)的異常24.5.5 與浮點(diǎn)數(shù)相關(guān)的異常24.6 GetExceptionInformation24.7 軟件異常第25章 未處理異常和C++異常25.1 即時(shí)調(diào)試25.2 關(guān)閉異常消息框25.2.1 強(qiáng)制進(jìn)程終止運(yùn)行25.2.2 包裝一個(gè)線程函數(shù)25.2.3 包裝所有的線程函數(shù)25.2.4 自動(dòng)調(diào)用調(diào)試器25.3 自己調(diào)用UnhandledExceptionFilter25.4 UnhandledExceptionFilter函數(shù)的內(nèi)部細(xì)節(jié)25.5 異常和調(diào)試程序25.6 C++異常與結(jié)構(gòu)化異常比較第六部分 窗口第26章 窗口消息26.1 線程的消息隊(duì)列26.2 將消息投送到一個(gè)線程的消息隊(duì)列中26.3 向窗口發(fā)送消息26.4 喚醒一個(gè)線程26.4.1 隊(duì)列狀態(tài)標(biāo)志26.4.2 從線程隊(duì)列中提取消息的算法26.4.3 使用內(nèi)核對(duì)象或者隊(duì)列狀態(tài)標(biāo)志來(lái)喚醒一個(gè)線程26.5 使用消息發(fā)送數(shù)據(jù)26.6 Windows處理ANSI/Unicode字符和字符串的方法第27章 硬件輸入模型與本地輸入狀態(tài)27.1 原始輸入線程27.2 本地輸入狀態(tài)27.2.1 鍵盤(pán)輸入和焦點(diǎn)27.2.2 鼠標(biāo)光標(biāo)管理27.3 將虛擬輸入隊(duì)列和本地輸入狀態(tài)相關(guān)聯(lián)27.3.1 LISLab示例應(yīng)用程序27.3.2 LISWatch示例應(yīng)用程序附錄附錄A 構(gòu)建環(huán)境附錄B 消息解析器、子控件宏以及API宏

章節(jié)摘錄

第一部分 程序員必讀第1章 錯(cuò)誤處理在開(kāi)始學(xué)習(xí)Windows提供的一些必要特性之前,有必要了解各種Windows函數(shù)是如何進(jìn)行錯(cuò)誤處理的。當(dāng)調(diào)用一個(gè)Windows函數(shù)時(shí),系統(tǒng)首先驗(yàn)證傳遞給該函數(shù)的參數(shù)是否有效,然后開(kāi)始執(zhí)行該函數(shù)的任務(wù)。如果函數(shù)接收到一個(gè)無(wú)效的參數(shù),或者由于其他原因?qū)е略摵瘮?shù)不能執(zhí)行,則通過(guò)某種返回值來(lái)指示函數(shù)執(zhí)行失敗。表1-1給出了大多數(shù)Windows函數(shù)用到的返回值的數(shù)據(jù)類(lèi)型。當(dāng)一個(gè)Windows函數(shù)返回一個(gè)錯(cuò)誤代碼時(shí),了解該函數(shù)為何執(zhí)行失敗往往非常有用。微軟公司已經(jīng)編譯了一系列可能的錯(cuò)誤代碼,而且為每個(gè)錯(cuò)誤代碼賦予了一個(gè)32位的數(shù)字。在系統(tǒng)內(nèi)部,當(dāng)一個(gè)Windows函數(shù)檢測(cè)到一個(gè)錯(cuò)誤時(shí),它常常使用一種稱(chēng)為線程本地存儲(chǔ)(thread-local storage)的機(jī)制來(lái)將合適的錯(cuò)誤代碼號(hào)和被調(diào)用的線程聯(lián)系起來(lái)(線程一本地存儲(chǔ)機(jī)制在第21章中討論)。這樣就允許線程之間互相獨(dú)立地運(yùn)行,而不會(huì)影響彼此的錯(cuò)誤代碼。當(dāng)函數(shù)返回其值后,該返回值會(huì)指示發(fā)生了一個(gè)錯(cuò)誤。可調(diào)用GetLastError函數(shù)查看錯(cuò)誤詳情。

編輯推薦

《經(jīng)典重讀?Windows核心編程(原書(shū)第4版)》幫助讀者:理解Windows操作系統(tǒng)內(nèi)部機(jī)制,精通32位或64位基于Windows的應(yīng)用程序構(gòu)件,掌握DLL的本質(zhì)及其高級(jí)技術(shù),使用結(jié)構(gòu)化異常處理創(chuàng)建充分利用內(nèi)存的應(yīng)用程序,理解進(jìn)和線程的實(shí)質(zhì),精通內(nèi)存管理,用封裝的可重用代碼工具箱解決常見(jiàn)的線程同步問(wèn)題,掌握Windows消息循環(huán)的原理。

圖書(shū)封面

圖書(shū)標(biāo)簽Tags

無(wú)

評(píng)論、評(píng)分、閱讀與下載


    Windows核心編程 PDF格式下載


用戶(hù)評(píng)論 (總計(jì)6條)

 
 

  •   這本書(shū)本身是沒(méi)說(shuō)的,經(jīng)典,深入解析了系統(tǒng)的編程方法,介紹了很多系統(tǒng)的函數(shù)。但是卓越這次寄給我的書(shū)簡(jiǎn)直是壓箱底的一本書(shū),寄來(lái)的時(shí)候特別舊,比我看了兩年的書(shū)還爛,而且整本書(shū)感覺(jué)像是泡了水,整本書(shū)都不平,當(dāng)時(shí)那貨的時(shí)候就應(yīng)該退貨來(lái)著!下次再這樣就再也不來(lái)卓越買(mǎi)貨了?。?!
  •   就是有些譯得概念不清
  •   紙質(zhì)很好,服務(wù)也不錯(cuò),快遞時(shí)間長(zhǎng)了一點(diǎn),總體來(lái)說(shuō)不錯(cuò)了,五星。
  •   第五版已經(jīng)可以買(mǎi)到了,內(nèi)容充實(shí)了一些。就不要再買(mǎi)第四版了
  •   書(shū)中的內(nèi)容絕對(duì)值得學(xué)習(xí)?。?!
  •   這本書(shū)是在朋友的推薦下買(mǎi)的。??戳艘恍?,還沒(méi)看完。。感覺(jué)還不錯(cuò)。。
 

250萬(wàn)本中文圖書(shū)簡(jiǎn)介、評(píng)論、評(píng)分,PDF格式免費(fèi)下載。 第一圖書(shū)網(wǎng) 手機(jī)版

京ICP備13047387號(hào)-7