版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第9講 Windows進(jìn)程進(jìn)程是可運(yùn)行資源的載體講師:Gamebaby Rock Sun第9講 Windows進(jìn)程1.Windows進(jìn)程和入口2.進(jìn)程環(huán)境變量、親緣性和當(dāng)前目錄3.進(jìn)程默認(rèn)堆和堆管理4.進(jìn)程對(duì)象列表5.創(chuàng)建銷(xiāo)毀進(jìn)程、子進(jìn)程6.重定向子進(jìn)程的輸入和輸出7.枚舉系統(tǒng)中的進(jìn)程列表及PSAPI使用Windows進(jìn)程進(jìn)程是裝入內(nèi)存并準(zhǔn)備執(zhí)行的程序;在Windows中進(jìn)程由兩部分組成:一個(gè)是操作系統(tǒng)用來(lái)管理進(jìn)程的內(nèi)核對(duì)象。內(nèi)核對(duì)象也是系統(tǒng)用來(lái)存放關(guān)于進(jìn)程的統(tǒng)計(jì)信息的地方。另一個(gè)是地址空間,它包含所有可執(zhí)行模塊或DLL模塊的代碼和數(shù)據(jù)。它還包含動(dòng)態(tài)內(nèi)存分配的空間。如線程棧和堆空間。Windo
2、ws中,進(jìn)程分為三大類(lèi):控制臺(tái)應(yīng)用窗口應(yīng)用服務(wù)應(yīng)用從本質(zhì)上講這些應(yīng)用沒(méi)有質(zhì)的區(qū)別應(yīng)用類(lèi)型和入口控制臺(tái)應(yīng)用主要是彈出一個(gè)字符界面與用戶(hù)進(jìn)行交互入口是:ANSI版:main(與C/C+定義的一致)UNCODE版:wmain兼容版:_tmain窗口應(yīng)用主要是通過(guò)顯示窗口,并使用豐富的控件等界面元素與用戶(hù)交互,入口是:ANSI版:WinMainUNICODE版:wWinMain兼容版:_tWinMain服務(wù)應(yīng)用將在后面課程中專(zhuān)門(mén)講解(以上入口函數(shù)原型請(qǐng)參閱MSDN)決定應(yīng)用類(lèi)型的編譯選項(xiàng)很多時(shí)候,大多數(shù)程序員對(duì)應(yīng)用類(lèi)型和入口沒(méi)有概念,導(dǎo)致錯(cuò)誤的提供入口給不對(duì)應(yīng)的應(yīng)用類(lèi)型,并且無(wú)法編譯通過(guò)在VC+鏈接器
3、中有一個(gè)系統(tǒng)選項(xiàng),如果指定了Windows (/SUBSYSTEM:WINDOWS)那么表示這個(gè)項(xiàng)目將需要一個(gè)WinMain或wWinMain入口;如果指定了控制臺(tái)(/SUBSYSTEM:CONSOLE)則表示項(xiàng)目需要一個(gè)main或wmain入口;(沒(méi)有為正確的項(xiàng)目類(lèi)型指定正確的入口,這是很多初學(xué)者容易犯的錯(cuò)誤)VC/C+嵌入入口在VC+中實(shí)際上并不調(diào)用你編寫(xiě)的進(jìn)入點(diǎn)函數(shù)。它調(diào)用的是C/C+運(yùn)行期啟動(dòng)函數(shù)。該函數(shù)負(fù)責(zé)對(duì)C/C+運(yùn)行期庫(kù)進(jìn)行初始化,這樣,就可以調(diào)用malloc和free之類(lèi)的C庫(kù)函數(shù)。它還能夠確保已經(jīng)聲明的任何C+全局對(duì)象和靜態(tài)對(duì)象能夠在代碼執(zhí)行以前正確地創(chuàng)建。下表說(shuō)明源代碼中可
4、以實(shí)現(xiàn)哪個(gè)進(jìn)入點(diǎn)以及何時(shí)使用該進(jìn)入點(diǎn):入口對(duì)應(yīng)嵌入的入口WinMainWinMainCRTStartupwWinMainwWinMainCRTStartupmainmainCRTStartupwmainwmainCRTStartup入口參數(shù)main、wmain、_tmain入口函數(shù)的參數(shù)與標(biāo)準(zhǔn)C/C+語(yǔ)言定義和含義相同,此處就不再贅述WinMain、wWinMain、_tWinMain的4個(gè)入口參數(shù)含義:HINSTANCE hInstance:當(dāng)前進(jìn)程實(shí)例的實(shí)例句柄,一般保存該值在全局變量中或代表進(jìn)程的C+類(lèi)中,以便其它的API調(diào)用時(shí)使用該參數(shù),在Windows中,該值其實(shí)就是Exe模塊映射進(jìn)
5、虛擬地址空間中的基址,Win32中該值為0 xHINSTANCE hPrevInstance:16位Windows遺留的產(chǎn)物,現(xiàn)在不用,總為NULL(ANSI)LPSTR lpCmdLine、(UNICODE)LPWSTR lpCmdLine、(TCHAR)LPTSTR lpCmdLine:進(jìn)程啟動(dòng)時(shí)傳入的命令行參數(shù)int nCmdShow:窗口顯示的方式;主要指定程序主窗口在啟動(dòng)時(shí)應(yīng)如何顯示,如:最大化、最小化、隱藏、默認(rèn)等進(jìn)程的命令行與main和wmain函數(shù)不同在WinMain或wWinMain函數(shù)中,系統(tǒng)傳遞的命令行參數(shù)是一個(gè)字符串此時(shí)可以使用CommandLineToArgvW函數(shù)來(lái)
6、將命令行參數(shù)拆分成一個(gè)數(shù)組因?yàn)檫@個(gè)函數(shù)只有UNICODE版,所以需要將其它字符集的字符串轉(zhuǎn)換成UNICODE版的字串后再調(diào)用此函數(shù)(有關(guān)UNICODE字符串處理和轉(zhuǎn)換的內(nèi)容請(qǐng)復(fù)習(xí)第二講)該函數(shù)返回的內(nèi)存,需要用HeapFree來(lái)釋放命令行拆分示例嵌入入口和OnExit回調(diào)在main、wmain、WinMain、wWinMain等函數(shù)返回時(shí),嵌入的入口函數(shù)除了清理全局對(duì)象或靜態(tài)對(duì)象之外還會(huì)調(diào)用由_onexit添加的退出回調(diào)函數(shù)列表OnExit函數(shù)被調(diào)用的順序與添加的順序相反這個(gè)機(jī)制為自定義的退出時(shí)處理提供了方便的方法因?yàn)開(kāi)onexit注冊(cè)的回調(diào)函數(shù)總是先于全局對(duì)象或靜態(tài)對(duì)象銷(xiāo)毀之前調(diào)用,因此在這
7、些函數(shù)中仍可以正常使用這些全局對(duì)象和靜態(tài)對(duì)象_onexit調(diào)用示例自定義入口在Windows平臺(tái)上,應(yīng)用程序入口其實(shí)只是一個(gè)語(yǔ)法上的要求,對(duì)于編譯后的結(jié)果來(lái)說(shuō)只需要一個(gè)明確的地址即可(函數(shù)指針)在VS2008項(xiàng)目屬性-配置屬性-鏈接器-高級(jí)-入口點(diǎn) 中設(shè)置自定義的入口函數(shù)即可通過(guò)這個(gè)自定義入口就可以繞開(kāi)VC+的嵌入式入口,但此時(shí)所有的C/C+標(biāo)準(zhǔn)庫(kù)初始化、全局對(duì)象初始化等工作就要自己來(lái)實(shí)現(xiàn),當(dāng)然如果只使用API而不用C/C+庫(kù)函數(shù)的話這不是問(wèn)題自定義入口示例進(jìn)程環(huán)境變量進(jìn)程可以通過(guò)GetEnvironmentStrings和GetEnvironmentVariable方法來(lái)?yè)烊…h(huán)境變量或者進(jìn)程
8、可以使用C庫(kù)函數(shù)getenv(_wgetenv、_tgetenv)方法來(lái)更方便的撿取環(huán)境變量值可以在“我的電腦”右鍵菜單屬性對(duì)話框的高級(jí)屬性頁(yè)面中打開(kāi)環(huán)境變量對(duì)話框來(lái)快捷的更改系統(tǒng)級(jí)的環(huán)境變量設(shè)置注意:很多情況下不推薦再使用環(huán)境變量的方式來(lái)存取一些進(jìn)程需要的運(yùn)行時(shí)變量的值或其它信息,替代的可以考慮使用注冊(cè)表或者自定義的XML文件來(lái)存儲(chǔ)。本課程推薦使用XML方式來(lái)存儲(chǔ),XML的操作在后續(xù)課程中講詳細(xì)講解;進(jìn)程當(dāng)前目錄默認(rèn)情況下,進(jìn)的當(dāng)前目錄就是用來(lái)建立進(jìn)程的exe文件所在的目錄程序可以通過(guò)調(diào)用GetCurrentDirectory方法得到當(dāng)前的目錄可以通過(guò)調(diào)用SetCurrentDirector
9、y方法改變當(dāng)前目錄當(dāng)前目錄將影響一些API的行為,比如打開(kāi)一個(gè)文件或文件對(duì)話框等的默認(rèn)路徑這兩個(gè)函數(shù)調(diào)用比較簡(jiǎn)單就不再演示調(diào)用方法繼承子進(jìn)程可以從父進(jìn)程繼承一些屬性和資源;可以通過(guò)編程的方法禁止子進(jìn)程從父進(jìn)程繼承任何東西;可供繼承的資源有:由CreateFile打開(kāi)的可繼承句柄;如:文件、控制臺(tái)、命名管道、串口、郵槽等;進(jìn)程、線程、互斥對(duì)象、信標(biāo)量、管道、文件映射等的可繼承的句柄環(huán)境變量當(dāng)前目錄父進(jìn)程的控制臺(tái)(可以在創(chuàng)建子進(jìn)程時(shí)通過(guò)標(biāo)志的方法讓子進(jìn)程擁有獨(dú)立的)CreateProcess函數(shù)的bInheritHandles參數(shù)指定子進(jìn)程是否能夠繼承父進(jìn)程的句柄,而其他對(duì)象都在創(chuàng)建時(shí)通過(guò)指定安全
10、屬性結(jié)構(gòu)體的方式明確指定可否繼承缺省的情況下子進(jìn)程繼承父進(jìn)程的環(huán)境變量和當(dāng)前目錄;繼承子進(jìn)程繼承的句柄與父進(jìn)程有相同的值和訪問(wèn)優(yōu)先權(quán)要使用這些對(duì)象,子進(jìn)程必須能夠使用Open系列函數(shù)打開(kāi)這些對(duì)象的句柄,這要求子進(jìn)程能夠知道這些對(duì)象的信息,比如:對(duì)象名稱(chēng)不能通過(guò)簡(jiǎn)單的傳遞句柄值的方式來(lái)繼承這些對(duì)象,因?yàn)樽舆M(jìn)程和父進(jìn)程在不同的進(jìn)程虛擬地址空間中,而且句柄值也不相同,所有傳遞的句柄值實(shí)際上是沒(méi)有意義的要想傳遞這些對(duì)象的有用信息,父進(jìn)程可以通過(guò)命令行的方式或者進(jìn)程間通信的方式告訴子進(jìn)程進(jìn)程間通信可以通過(guò)管道、SOCKET、共享內(nèi)存等來(lái)實(shí)現(xiàn)進(jìn)程堆Windows系統(tǒng)為每個(gè)進(jìn)程都默認(rèn)創(chuàng)建了一個(gè)進(jìn)程默認(rèn)堆使用
11、GetProcessHeap方法可以得到這個(gè)默認(rèn)堆的句柄(詳情請(qǐng)復(fù)習(xí)第一講)使用GetProcessHeaps方法可以得到當(dāng)前進(jìn)程中所有堆的句柄數(shù)組(包括默認(rèn)堆和用CreateHeap創(chuàng)建的堆)堆屬于整個(gè)進(jìn)程,因此進(jìn)程中所有的線程都可以看到這些堆,并且可以平等的操作在多線程環(huán)境中一定要使用串行化堆(不要設(shè)置HEAP_NO_SERIALIZE標(biāo)準(zhǔn),詳情復(fù)習(xí)第一講)進(jìn)程的對(duì)象列表在第六講中,演示了一個(gè)可以查看系統(tǒng)所有句柄和對(duì)象的程序利用這個(gè)程序,可以通過(guò)取得的句柄的ProcessID=GetCurrentProcessID方法來(lái)過(guò)濾出屬于本進(jìn)程的句柄對(duì)象列表需要注意的是一般情況下,任何屬于進(jìn)程的內(nèi)
12、核對(duì)象,對(duì)于進(jìn)程內(nèi)的所有線程來(lái)說(shuō)都是可以訪問(wèn)的,因此內(nèi)核對(duì)象的一些API內(nèi)部本身都是嚴(yán)格串行化的,也就是說(shuō)多線程操作是安全的(GUI和GDI對(duì)象不是嚴(yán)格串行化的)進(jìn)程的親緣性可以通過(guò)調(diào)用SetProcessAffinityMask將進(jìn)程中線程的調(diào)度運(yùn)行限定在多核系統(tǒng)的某幾個(gè)特定的CPU上(CPU子集)此函數(shù)的第二個(gè)參數(shù)dwProcessAffinityMask是一個(gè)位向量,每一個(gè)二進(jìn)制位對(duì)應(yīng)表示相應(yīng)序號(hào)的CPU,當(dāng)該位為1時(shí)表示使用這個(gè)序號(hào)的CPU,否則就是不使用這個(gè)CPUCPU序號(hào)從031,對(duì)應(yīng)無(wú)符號(hào)32位值的相應(yīng)位通過(guò)調(diào)用GetSystemInfo方法可以得到系統(tǒng)中CPU的個(gè)數(shù)(多核CPU
13、被認(rèn)為是獨(dú)立的CPU)在Vista以上系統(tǒng)中通過(guò)調(diào)用GetLogicalProcessorInformation方法可以得到關(guān)于CPU的詳細(xì)信息,包括NUMA、SMT、Catch等信息本講示例GetLogicCPU就是一個(gè)演示調(diào)用GetLogicalProcessorInformation獲取CPU信息的例子注意:進(jìn)程親緣性會(huì)被子進(jìn)程繼承創(chuàng)建進(jìn)程CreateProcess任何類(lèi)型的應(yīng)用程序都可以通過(guò)調(diào)用CreateProcess函數(shù)來(lái)創(chuàng)建一個(gè)新的進(jìn)程BOOL WINAPI CreateProcess(LPCTSTR lpApplicationName,LPTSTR mandLine,LPSEC
14、URITY_ATTRIBUTES lpProcessAttributes,LPSECURITY_ATTRIBUTES lpThreadAttributes,BOOL bInheritHandles,DWORD dwCreationFlags,LPVOID lpEnvironment,LPCTSTR lpCurrentDirectory,LPSTARTUPINFO lpStartupInfo,LPPROCESS_INFORMATION lpProcessInformation);這個(gè)新的進(jìn)程將擁有新的獨(dú)立的虛擬地址空間和獨(dú)立的資源此新進(jìn)程就是當(dāng)前進(jìn)程(調(diào)用CreateProcess的進(jìn)程)的子進(jìn)
15、程CreateProcess提供兩種標(biāo)識(shí)要執(zhí)行程序的方法:lpApplicationName mandLine 如果lpApplicationName是NULL,那么程序就在 mandLine中指定如果CreateProcess成功,則返回包含新進(jìn)程和其主線程的句柄與ID在PROCESS_INFORMATION結(jié)構(gòu)體中即使通過(guò)安全描述符可以限制子進(jìn)程句柄的訪問(wèn)權(quán)限,父進(jìn)程對(duì)子進(jìn)程的句柄仍然有完全的訪問(wèn)權(quán)創(chuàng)建進(jìn)程CreateProcess通過(guò)STARTUPINFO結(jié)構(gòu)體對(duì)象父進(jìn)程可以指定與其子進(jìn)程的主窗口有關(guān)的屬性對(duì)于GUI進(jìn)程來(lái)說(shuō),STARTUPINFO結(jié)構(gòu)指定新進(jìn)程第一次調(diào)用CreateWi
16、ndow和ShowWindow建立和顯示重疊窗口時(shí)使用的缺省值:窗口的寬和高(單位:像素)窗口左上角位置ShowWindow的nCmdShow參數(shù)對(duì)于控制臺(tái)進(jìn)程而言,只有在新進(jìn)程用CREATE_NEW_CONSOLE調(diào)用CreateProcess,或新進(jìn)程自行調(diào)用AllocConsole時(shí),STARTUPINFO才起作用,此時(shí)該結(jié)構(gòu)控制如下內(nèi)容:新控制臺(tái)屏幕大小和位置(單位:字符)新控制臺(tái)屏幕緩沖大小新控制臺(tái)屏幕緩沖器字體和顏色等屬性新控制臺(tái)窗口標(biāo)題CreateProcess示例使用多進(jìn)程的一些提示何時(shí)使用多進(jìn)程呢?會(huì)帶來(lái)什么好處呢?這是一個(gè)需要思考的問(wèn)題因?yàn)樽舆M(jìn)程是在獨(dú)立的進(jìn)程空間中執(zhí)行,所
17、以它有一個(gè)先天的優(yōu)勢(shì)就是子進(jìn)程的任何未處理異常不會(huì)迫使父進(jìn)程退出(異常處理機(jī)制實(shí)際很多時(shí)候處理不了全部可能的異常)利用這個(gè)特點(diǎn),可以將一些容易出錯(cuò)的任務(wù)創(chuàng)建成子進(jìn)程比如:一個(gè)服務(wù)程序需要處理很多用戶(hù)請(qǐng)求,但是可能潛在的攻擊行為會(huì)使服務(wù)進(jìn)程異常退出,此時(shí)就可以考慮將用戶(hù)分成組,并為每組不同的用戶(hù)創(chuàng)建不同的進(jìn)程進(jìn)行服務(wù),這樣即使被惡意攻擊而導(dǎo)致進(jìn)程異常退出,后果也只是哪一組用戶(hù)數(shù)據(jù)丟失而已,可以將危害縮小到很小的范圍終止進(jìn)程下面幾組條件之一成立時(shí),進(jìn)程終止:進(jìn)程中任何線程調(diào)用了ExitProcess進(jìn)程的主線程返回(隱含調(diào)用ExitProcess)進(jìn)程的最后一個(gè)線程終止用進(jìn)程句柄調(diào)用Termina
18、teProcess進(jìn)程終止時(shí)發(fā)生下列事件:關(guān)閉進(jìn)程打開(kāi)的文件或其它對(duì)象的句柄(對(duì)象不一定銷(xiāo)毀);進(jìn)程對(duì)象的狀態(tài)置為有信號(hào)的,使得等待該句柄的函數(shù)可以返回進(jìn)程的終止?fàn)顟B(tài)從STILL_ACTIVE變成進(jìn)程的退出代碼父進(jìn)程終止時(shí),子進(jìn)程不自動(dòng)終止;終止進(jìn)程ExitProcess將通知所有附屬進(jìn)程中的DLL,并保證進(jìn)程中的全部線程都終止,因此它是終止進(jìn)程的首先方法;(應(yīng)用程序只需保證所有線程均正常終止即可)除非萬(wàn)不得已的情況下,不要調(diào)用TerminateProcess方法來(lái)終止進(jìn)程,因?yàn)樗粫?huì)通知dll進(jìn)程退出(實(shí)際就是不調(diào)用dll的dllmain函數(shù))調(diào)用ExitProcess和TerminateP
19、rocess時(shí),進(jìn)程中的所有線程是終止運(yùn)行的,此時(shí)結(jié)構(gòu)化異常處理中的_finally塊也沒(méi)有機(jī)會(huì)被執(zhí)行,因此盡量不要自行調(diào)用這些函數(shù)來(lái)終止進(jìn)程GetExitCodeProcess函數(shù)可以得到進(jìn)程的終止?fàn)顟B(tài),如果進(jìn)程仍在運(yùn)行,返回碼是STILL_ACTIVE,否則就返回進(jìn)程的退出代碼重定向進(jìn)程的輸入和輸出很多Windows命令程序都是控制臺(tái)進(jìn)程,默認(rèn)情況下控制臺(tái)應(yīng)用都會(huì)輸入輸出信息到父進(jìn)程的輸入輸出控制臺(tái)中通過(guò)設(shè)置STARTUPINFO中dwFlags為STARTF_USESTDHANDLES,并指定相應(yīng)的句柄值HANDLE hStdInput;HANDLE hStdOutput;HANDLE
20、hStdError;即可重定向標(biāo)準(zhǔn)輸入、輸出、錯(cuò)誤信息到指定的句柄中以上的句柄值可以是CreateFile創(chuàng)建的標(biāo)準(zhǔn)控制臺(tái)、文件、管道、串口等字符設(shè)備對(duì)象的句柄(在后面將詳細(xì)講解CreateFile函數(shù))重定向示例其它的創(chuàng)建進(jìn)程的方法默認(rèn)情況下CreateProcess創(chuàng)建的進(jìn)程,其所屬用戶(hù)組等安全信息是當(dāng)前進(jìn)程(調(diào)用CreateProcess的進(jìn)程)的用戶(hù)組通過(guò)調(diào)用CreateProcessAsUser方法可以指定創(chuàng)建一個(gè)不同的用戶(hù)組身份的進(jìn)程,此方法比CreateProcess多了一個(gè)代表不同用戶(hù)組的訪問(wèn)字符串Token句柄,通過(guò)LogonUser方法可以得到不同用戶(hù)組的Token,這樣就
21、可以改變子進(jìn)程的訪問(wèn)字符串特性(關(guān)于Token請(qǐng)復(fù)習(xí)第7講)通過(guò)CreateProcessWithLogonW方法可以直接利用已知的用戶(hù)名、域、密碼信息創(chuàng)建一個(gè)不同身份Token的進(jìn)程,這相當(dāng)于在內(nèi)部組合了LogonUser和CreateProcessAsUser方法這兩個(gè)方法詳情參見(jiàn)MSDN不再演示調(diào)用示例外殼中啟動(dòng)進(jìn)程的方法在Windows外殼(shell)中有一個(gè)方便的根據(jù)文件類(lèi)型啟動(dòng)相應(yīng)進(jìn)程的方法ShellExecute(更多信息版本ShellExecuteEx)可以用以下幾種方式調(diào)用ShellExecute來(lái)達(dá)到不同的目的:打開(kāi)一個(gè)文件夾: ShellExecute(hWnd, NU
22、LL, , NULL, NULL, SW_SHOWNORMAL);ShellExecute(hWnd, open, , NULL, NULL, SW_SHOWNORMAL);有資源管理器打開(kāi)一個(gè)文件夾:ShellExecute(hWnd, explore, , NULL, NULL, SW_SHOWNORMAL);打開(kāi)查找文件:ShellExecute(hWnd, find, , NULL, NULL, 0);打開(kāi)Windows計(jì)算器、記事本等:ShellExecute(hWnd,open,calc.exe,NULL,NULL,SW_SHOW);ShellExecute(hWnd,open,notepad.e
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025 小學(xué)四年級(jí)科學(xué)下冊(cè)植物根毛結(jié)構(gòu)與功能課件
- 2026年電氣工程師電路設(shè)計(jì)與分析試題集
- 2026年創(chuàng)意寫(xiě)作與情節(jié)拓展劇本創(chuàng)作校招筆試試題集
- 2026年計(jì)算機(jī)專(zhuān)業(yè)英語(yǔ)技術(shù)術(shù)語(yǔ)與翻譯綜合試題
- 2026年職業(yè)衛(wèi)生與安全知識(shí)測(cè)評(píng)題庫(kù)及答案
- 2026年機(jī)械工程師專(zhuān)業(yè)知識(shí)測(cè)試題集
- 瀑布式雨水管理方案
- 建筑廢棄物利用技術(shù)研發(fā)合作方案
- 城中村景觀小品設(shè)計(jì)方案
- 裝修項(xiàng)目節(jié)點(diǎn)控制方案
- 交通事故培訓(xùn)
- 2026年醫(yī)保藥品目錄調(diào)整
- 2026四川雅安市漢源縣審計(jì)局招聘編外專(zhuān)業(yè)技術(shù)人員2人筆試備考試題及答案解析
- 食品銷(xiāo)售業(yè)務(wù)員培訓(xùn)課件
- 2026年學(xué)校意識(shí)形態(tài)工作計(jì)劃
- 2025年銀行信息科技崗筆試真題及答案
- 山西電化學(xué)儲(chǔ)能項(xiàng)目建議書(shū)
- GB/T 46392-2025縣域無(wú)障礙環(huán)境建設(shè)評(píng)價(jià)規(guī)范
- DB32-T 4285-2022 預(yù)應(yīng)力混凝土空心方樁基礎(chǔ)技術(shù)規(guī)程
- 刺殺操課件教學(xué)課件
- 福建省廈門(mén)市雙十中學(xué)2026屆數(shù)學(xué)九年級(jí)第一學(xué)期期末復(fù)習(xí)檢測(cè)模擬試題含解析
評(píng)論
0/150
提交評(píng)論