Windows核心編程

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

內(nèi)容概要

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

作者簡介

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

書籍目錄

譯者序前言作譯者簡介第一部分 程序員必讀第1章 錯誤處理1.1 自定義錯誤處理的實(shí)現(xiàn)1.2 錯誤顯示例程第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 評論2.7 關(guān)于COM2.8 如何編寫Unicode源代碼2.8.1 C運(yùn)行庫的Unicode支持2.8.2 Windows定義的Unicode數(shù)據(jù)類型2.8.3 Windows系統(tǒng)中的Unicode函數(shù)和ANSI函數(shù)2.8.4 Windows字符串函數(shù)2.9 讓應(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)核對象3.1 內(nèi)核對象的概念3.1.1 使用計(jì)數(shù)3.1.2 安全性3.2 內(nèi)核對象句柄表3.2.1 創(chuàng)建內(nèi)核對象3.2.2 關(guān)閉內(nèi)核對象3.3 進(jìn)程間內(nèi)核對象的共享3.3.1 對象句柄的繼承性3.3.2 改變句柄標(biāo)志3.3.3 命名對象3.3.4 終端服務(wù)器命名空間3.3.5 復(fù)制對象句柄第二部分 完成編程任務(wù)第4章 進(jìn)程4.1 編寫第一個Windows應(yīng)用程序4.1.1 進(jìn)程的實(shí)例句柄4.1.2 進(jìn)程的前一個實(shí)例句柄4.1.3 進(jìn)程的命令行4.1.4 進(jìn)程的環(huán)境變量4.1.5 親緣性4.1.6 進(jìn)程的錯誤模式4.1.7 當(dāng)前驅(qū)動器和目錄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 對作業(yè)進(jìn)程的限制5.2 把進(jìn)程放入作業(yè)5.3 終止作業(yè)中所有進(jìn)程的運(yùn)行5.4 查詢作業(yè)統(tǒng)計(jì)信息5.5 作業(yè)通知信息5.6 JobLab示例應(yīng)用程序第6章 線程的基本知識6.1 創(chuàng)建線程的時機(jī)6.2 何時不能創(chuàng)建線程6.3 編寫第一個線程函數(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)行時終止線程6.5.5 線程終止運(yùn)行時發(fā)生的操作6.6 線程的一些內(nèi)部細(xì)節(jié)6.7 對于C/C++運(yùn)行時庫的考慮6.7.1 Oops-錯誤地調(diào)用了CreateThread6.7.2 不該調(diào)用的C/C++運(yùn)行時庫函數(shù)6.8 線程的身份標(biāo)識第7章 線程的調(diào)度、優(yōu)先級和親緣性7.1 掛起和恢復(fù)線程的運(yùn)行7.2 進(jìn)程的掛起和喚醒7.3 睡眠7.4 線程切換7.5 線程的運(yùn)行時間7.6 上下文環(huán)境切換7.7 線程優(yōu)先級7.8 優(yōu)先級的抽象說明7.9 編程優(yōu)先級7.9.1 動態(tài)提高線程的優(yōu)先級等級7.9.2 為前臺進(jìn)程調(diào)整調(diào)度程序7.9.3 Scheduling Lab示例應(yīng)用程序7.10 親緣性第8章 用戶模式下的線程同步8.1 原子訪問:互鎖函數(shù)族8.2 高速緩存行8.3 高級線程同步8.4 臨界區(qū)8.4.1 臨界區(qū)準(zhǔn)確的描述8.4.2 臨界區(qū)與循環(huán)鎖8.4.3 臨界區(qū)與錯誤處理8.4.4 有用的提示和技巧第9章 線程與內(nèi)核對象的同步9.1 等待函數(shù)9.2 成功等待的副作用9.3 事件內(nèi)核對象9.4 等待定時器內(nèi)核對象9.4.1 用等待定時器給APC項(xiàng)排隊(duì)9.4.2 定時器的松散特性9.5 信號量內(nèi)核對象9.6 互斥內(nèi)核對象9.6.1 釋放問題9.6.2 互斥對象與臨界區(qū)的比較9.6.3 Queue應(yīng)用程序示例9.7 線程同步對象表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ù)類型和反信號量10.3 單寫入多讀出程序的保護(hù)10.4 WaitForMultipleExpressions函數(shù)的實(shí)現(xiàn)第11章 線程池11.1 場景1:異步調(diào)用函數(shù)11.2 場景2:按規(guī)定的時間間隔調(diào)用函數(shù)11.3 場景3:在某個內(nèi)核對象變?yōu)橐淹ㄖ獱顟B(tài)時調(diào)用函數(shù)11.4 場景4:異步I/O請求運(yùn)行完成時調(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 無效斷點(diǎn)分配分區(qū)(適于Windows 2000和Windows 98)13.2.2 MS-DOS/16位Windows應(yīng)用程序兼容分區(qū)(僅適于Windows 98)13.2.3 用戶模式分區(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ū)域中提交物理存儲器13.5 物理存儲器和頁面文件13.6 保護(hù)屬性13.6.1 Copy-On-Write訪問13.6.2 特殊訪問保護(hù)屬性標(biāo)志13.7 綜合使用所有元素13.7.1 區(qū)域的內(nèi)部詳情13.7.2 Windows 98上地址空間的差異13.8 數(shù)據(jù)對齊的重要性第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ū)域中提交存儲器15.3 同時進(jìn)行保留區(qū)域并提交內(nèi)存15.4 何時提交物理存儲器15.5 物理存儲器的回收和地址空間區(qū)域的釋放15.5.1 何時回收物理存儲器15.5.2 虛擬內(nèi)存分配示例應(yīng)用程序15.6 改變保護(hù)屬性15.7 清除物理存儲器內(nèi)容15.8 地址窗口擴(kuò)展(僅使用于Windows 2000)第16章 線程棧16.1 Windows 98下的線程棧16.2 C/C++運(yùn)行時庫中的棧檢測函數(shù)16.3 Summation示例應(yīng)用程序第17章 內(nèi)存映射文件17.1 內(nèi)存映射的可執(zhí)行文件和DLL文件17.1.1 可執(zhí)行文件或DLL的多個實(shí)例之間無法共享的靜態(tài)數(shù)據(jù)17.1.2 在可執(zhí)行文件或DLL的多個實(shí)例之間共享靜態(tài)數(shù)據(jù)17.1.3 AppInst示例應(yīng)用程序17.2 內(nèi)存映射數(shù)據(jù)文件17.2.1 方法1:一個文件,一個緩存17.2.2 方法2:兩個文件,一個緩存17.2.3 方法3:一個文件,兩個緩存17.2.4 方法4:一個文件,零個緩存17.3 使用內(nèi)存映射文件17.3.1 步驟1:創(chuàng)建或打開文件內(nèi)核對象17.3.2 步驟2:創(chuàng)建文件映射內(nèi)核對象17.3.3 步驟3:將文件數(shù)據(jù)映射到進(jìn)程地址空間17.3.4 步驟4:進(jìn)程地址空間中撤銷文件數(shù)據(jù)的映像17.3.5 步驟5和步驟6:關(guān)閉文件映射對象和文件對象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 受頁面文件支持的內(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)行本地訪問18.2.4 減少線程同步開銷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 銷毀堆18.3.6 用C++程序使用堆18.4 其他堆函數(shù)第四部分 動態(tài)鏈接庫第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高級技術(shù)20.1 顯式加載DLL模塊和符號鏈接20.1.1 顯式加載DLL模塊20.1.2 顯式卸載DLL模塊20.1.3 顯式鏈接到導(dǎ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)行時庫20.3 延遲加載DLL20.4 函數(shù)轉(zhuǎn)發(fā)器20.5 已知的DLL20.6 DLL重定向20.7 模塊的基址重置20.8 綁定模塊第21章 線程本地存儲21.1 動態(tài)TLS21.2 靜態(tài)TLS第22章 DLL注入以及API掛接22.1 DLL注入:一個例子22.2 使用注冊表注入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平臺上使用內(nèi)存映射文件注入代碼22.8 使用CreateProcess來注入代碼22.9 API掛接:一個例子22.9.1 通過覆寫代碼實(shí)現(xiàn)API掛接22.9.2 通過操作模塊的導(dǎo)入部分來實(shí)現(xiàn)API掛接22.9.3 LastMsgBoxInfo示例應(yīng)用程序第五部分 結(jié)構(gòu)化異常處理第23章 終止處理例程23.1 Funcenstein123.2 Funcenstein223.3 Funcenstein323.4 Funcfurter123.5 小測驗(yàn):FuncaDoodleDoo23.6 Funcenstein423.7 Funcarama123.8 Funcarama223.9 Funcarama323.10 Funcarama4:最終的邊界23.11 有關(guān)finally塊的說明23.12 Funcfurter223.13 SEH終止示例應(yīng)用程序第24章 異常處理程序和軟件異常24.1 通過例子理解異常過濾器和異常處理程序24.1.1 Funcmeister124.1.2 Funcmeister224.2 EXCEPTION_EXECUTE_HANDLER24.2.1 一些有用的例子24.2.2 全局展開24.2.3 暫停全局展開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 即時調(diào)試25.2 關(guān)閉異常消息框25.2.1 強(qiáng)制進(jìn)程終止運(yùn)行25.2.2 包裝一個線程函數(shù)25.2.3 包裝所有的線程函數(shù)25.2.4 自動調(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 將消息投送到一個線程的消息隊(duì)列中26.3 向窗口發(fā)送消息26.4 喚醒一個線程26.4.1 隊(duì)列狀態(tài)標(biāo)志26.4.2 從線程隊(duì)列中提取消息的算法26.4.3 使用內(nèi)核對象或者隊(duì)列狀態(tài)標(biāo)志來喚醒一個線程26.5 使用消息發(fā)送數(shù)據(jù)26.6 Windows處理ANSI/Unicode字符和字符串的方法第27章 硬件輸入模型與本地輸入狀態(tài)27.1 原始輸入線程27.2 本地輸入狀態(tài)27.2.1 鍵盤輸入和焦點(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章 錯誤處理在開始學(xué)習(xí)Windows提供的一些必要特性之前,有必要了解各種Windows函數(shù)是如何進(jìn)行錯誤處理的。當(dāng)調(diào)用一個Windows函數(shù)時,系統(tǒng)首先驗(yàn)證傳遞給該函數(shù)的參數(shù)是否有效,然后開始執(zhí)行該函數(shù)的任務(wù)。如果函數(shù)接收到一個無效的參數(shù),或者由于其他原因?qū)е略摵瘮?shù)不能執(zhí)行,則通過某種返回值來指示函數(shù)執(zhí)行失敗。表1-1給出了大多數(shù)Windows函數(shù)用到的返回值的數(shù)據(jù)類型。當(dāng)一個Windows函數(shù)返回一個錯誤代碼時,了解該函數(shù)為何執(zhí)行失敗往往非常有用。微軟公司已經(jīng)編譯了一系列可能的錯誤代碼,而且為每個錯誤代碼賦予了一個32位的數(shù)字。在系統(tǒng)內(nèi)部,當(dāng)一個Windows函數(shù)檢測到一個錯誤時,它常常使用一種稱為線程本地存儲(thread-local storage)的機(jī)制來將合適的錯誤代碼號和被調(diào)用的線程聯(lián)系起來(線程一本地存儲機(jī)制在第21章中討論)。這樣就允許線程之間互相獨(dú)立地運(yùn)行,而不會影響彼此的錯誤代碼。當(dāng)函數(shù)返回其值后,該返回值會指示發(fā)生了一個錯誤。可調(diào)用GetLastError函數(shù)查看錯誤詳情。

編輯推薦

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

圖書封面

圖書標(biāo)簽Tags

評論、評分、閱讀與下載


    Windows核心編程 PDF格式下載


用戶評論 (總計(jì)6條)

 
 

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

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

京ICP備13047387號-7