




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
36、“不可能”這個字(法語是一個字),只在愚人的字典中找得到。--拿破侖。37、不要生氣要爭氣,不要看破要突破,不要嫉妒要欣賞,不要托延要積極,不要心動要行動。38、勤奮,機會,樂觀是成功的三要素。(注意:傳統(tǒng)觀念認(rèn)為勤奮和機會是成功的要素,但是經(jīng)過統(tǒng)計學(xué)和成功人士的分析得出,樂觀是成功的第三要素。39、沒有不老的誓言,沒有不變的承諾,踏上旅途,義無反顧。40、對時間的價值沒有沒有深切認(rèn)識的人,決不會堅韌勤勉。PC機的高級編程技術(shù)PC機的高級編程技術(shù)36、“不可能”這個字(法語是一個字),只在愚人的字典中找得到。--拿破侖。37、不要生氣要爭氣,不要看破要突破,不要嫉妒要欣賞,不要托延要積極,不要心動要行動。38、勤奮,機會,樂觀是成功的三要素。(注意:傳統(tǒng)觀念認(rèn)為勤奮和機會是成功的要素,但是經(jīng)過統(tǒng)計學(xué)和成功人士的分析得出,樂觀是成功的第三要素。39、沒有不老的誓言,沒有不變的承諾,踏上旅途,義無反顧。40、對時間的價值沒有沒有深切認(rèn)識的人,決不會堅韌勤勉。PC機的高級編程技術(shù)PC機的高級編程技術(shù)2第一節(jié)軟件對接口的訪問方式返回3頁返回4頁返回5頁返回6頁3初中體育教學(xué)由于學(xué)校和教師對體育學(xué)科的重視程度不高,導(dǎo)致教學(xué)內(nèi)容中存在一些明顯落后、不能滿足學(xué)生的體育需求的內(nèi)容,這使教學(xué)效果沒有達(dá)到理想效果。近幾年,國家提出了中學(xué)體育教學(xué)改革,重視青少年的身心發(fā)展。而體育教學(xué)的改革首先需要從教學(xué)內(nèi)容進(jìn)行針對性的改革和研究,從改革中不斷找到適合當(dāng)代學(xué)生所需要的體育教學(xué)內(nèi)容。為此,本課題教學(xué)內(nèi)容的研究是根據(jù)教學(xué)大綱和新課程標(biāo)準(zhǔn)為前提,以中學(xué)生為觀察對象,從實踐中找到改革的方法,對初中體育教學(xué)內(nèi)容進(jìn)行一些改進(jìn)的嘗試。一、研究方法初中體育教學(xué)內(nèi)容改革主要針對中學(xué)進(jìn)行開展,以初一年級學(xué)生為研究對象,進(jìn)行了長期的體育改革實施和觀察,改進(jìn)教學(xué)內(nèi)容。研究方法主要分為兩種,教學(xué)內(nèi)容改革開展之前,以文獻(xiàn)資料法找到一些國內(nèi)和國外在中學(xué)體育教學(xué)內(nèi)容改革過程中運用的模式和案例,了解當(dāng)前體育教學(xué)內(nèi)容和模式中存在的問題,為研究初中體育教學(xué)內(nèi)容打下基礎(chǔ)。根據(jù)學(xué)生在改革過程中的表現(xiàn)和適應(yīng)程度進(jìn)行判定改革的有效程度,同時針對學(xué)生對體育改革后的教學(xué)內(nèi)容進(jìn)行問卷調(diào)查和訪談,針對學(xué)生的回答情況進(jìn)行數(shù)據(jù)整理,找到改革實施過程中存在的一些問題和優(yōu)點,以數(shù)據(jù)的形式不斷研究和改進(jìn)教學(xué)內(nèi)容。二、分析與討論(一)體育教學(xué)現(xiàn)狀中學(xué)體育不同于其他公共課程,它具有一定的特殊性,可以充分鍛煉學(xué)生的心理素質(zhì)和身體素質(zhì)。但是由于學(xué)校和教師對體育學(xué)科的重視程度不高,導(dǎo)致學(xué)生在課堂中出現(xiàn)懶散、積極性不高的狀態(tài)。同時,中學(xué)體育的教學(xué)內(nèi)容和教學(xué)模式在教學(xué)發(fā)展過程中變化不大,教師的教學(xué)觀念普遍沒有得到有效的轉(zhuǎn)變。在以往的教學(xué)模式下,體育學(xué)科的優(yōu)點和價值沒有得到體現(xiàn),教學(xué)內(nèi)容在實際教學(xué)過程中可操作性并不強,內(nèi)容過于陳舊,不符合當(dāng)代學(xué)生對體育的需求。然而教師過于注重教學(xué)內(nèi)容,學(xué)生在學(xué)習(xí)過程中有厭煩心理在學(xué)習(xí)中存在差異性,導(dǎo)致學(xué)生的體育水平?jīng)]有得到提高,反而使得學(xué)生對體育的興趣降低。同時教師根據(jù)教學(xué)內(nèi)容制定教學(xué)計劃,往往過于注重是否加強學(xué)生的身體素質(zhì),忽略了對學(xué)生普及正確的運動知識和體育健康知識,使學(xué)生沒有正確的體育習(xí)慣,導(dǎo)致學(xué)生在運動過程中容易受傷。(二)體育改革的依據(jù)從體育學(xué)科作為中學(xué)的學(xué)科開始,國家頒布了六套體育教學(xué)大綱,這些教學(xué)大綱對體育教學(xué)發(fā)展、提高學(xué)生的體育水平和體育素質(zhì)都有重大影響,推動了我國初中體育教學(xué)發(fā)展。但是,根據(jù)目前我國初中體育教學(xué)現(xiàn)狀,地區(qū)、學(xué)校之間在教學(xué)大綱的引導(dǎo)下都存在很大的差異性,學(xué)生所處的教學(xué)環(huán)境和生活環(huán)境的不同,導(dǎo)致學(xué)生的體育愛好、身體素質(zhì)、體育需求都有很大的差異性,而這些教學(xué)過程中存在的問題都迫使初中體育教學(xué)改革。國家根據(jù)教學(xué)現(xiàn)狀提出了課程改革的標(biāo)準(zhǔn),為初中體育教學(xué)改革指出了方向,讓學(xué)校根據(jù)自身的特點進(jìn)行體育教學(xué)改革。同時課程改革的提出又提高學(xué)校、教師對體育教學(xué)改革的積極性,促進(jìn)體育教學(xué)改革發(fā)展。在全國初中體育教學(xué)改革背景下,我們也要根據(jù)課程改革標(biāo)準(zhǔn)進(jìn)行體育教學(xué)研究,找到適合教學(xué)實際情況的改革方法。(三)教學(xué)改革方法在新課程改革的背景下,以專家和學(xué)生的意見為主,根據(jù)體育教材和學(xué)校的體育教學(xué)現(xiàn)狀進(jìn)行課程改革,對教學(xué)內(nèi)容進(jìn)行重新地規(guī)劃,根據(jù)新的教學(xué)內(nèi)容制定教學(xué)計劃,嘗試新的教學(xué)。以學(xué)生的課程安排和對體育的喜好和需求,將學(xué)校的教學(xué)內(nèi)容增加到40個學(xué)時,分為四個板塊,第一板塊為20個學(xué)時,主要是安排基礎(chǔ)性強、操作性高的體育項目,學(xué)生可以根據(jù)自己的喜歡自由選擇,不單單是鍛煉學(xué)生在體育方面的基礎(chǔ)技能,同時培養(yǎng)學(xué)生對體育的學(xué)習(xí)興趣。通過學(xué)習(xí)和組織一些簡單的體育活動,幫助學(xué)生掌握到學(xué)習(xí)知識,激發(fā)學(xué)生的體育潛能,提升學(xué)生的體育水平。第二是10個學(xué)時,安排一些特殊的體育項目,比如?f游泳技能,利用少練習(xí)、難度低的教學(xué)內(nèi)容幫助學(xué)生掌握到一些求生的體育技能,同時在難度低的情況下學(xué)生可以在課上進(jìn)行反復(fù)地練習(xí),達(dá)到教學(xué)的理想效果。第三塊主要為理論知識,教師可以在課堂上為學(xué)生普及一些難度比較高、具有表演性質(zhì)的體育項目,比如說體操、標(biāo)槍等,這不僅僅擴大學(xué)生的體育知識面,同時激發(fā)學(xué)生的學(xué)習(xí)興趣。第四板塊主要是健康專欄,教師在課堂中講解體育活動中的體育習(xí)慣和安全措施,培養(yǎng)學(xué)生的體育健康意識,減少學(xué)生在運動過程中的受傷程度。(四)調(diào)整教學(xué)體制以往的教學(xué)體制沒有有效地提高教師的教學(xué)效率和學(xué)生的體育水平,重新調(diào)整體育教學(xué)體制,可以更好地改善以往的以運動技能為體育教學(xué)目標(biāo)的教學(xué)觀念,建立起以健康為主、培養(yǎng)正確的體育習(xí)慣、教學(xué)個性化的教學(xué)內(nèi)容體系。三、結(jié)語中學(xué)體育教學(xué)改革的核心是教學(xué)內(nèi)容的改革,教學(xué)內(nèi)容改革可以更好地促進(jìn)體育教學(xué)的發(fā)展,通過觀察了解當(dāng)代學(xué)生的身體素質(zhì)和體育需求,在初步實施過程中重新調(diào)整體育教學(xué)內(nèi)容和教學(xué)體制,進(jìn)行體育教學(xué)改革。雖然體育教學(xué)改革開始初步實施,但是體育教學(xué)改革還需要不斷地進(jìn)行探索和發(fā)展,在實施過程中只有不斷改進(jìn)教學(xué)體制和教學(xué)內(nèi)容,才能改善目前的教學(xué)現(xiàn)狀,提高初中體育教學(xué)質(zhì)量。眾所周知,要讓小學(xué)生掌握英語,除了掌握語音、詞匯、語法知識外,最應(yīng)強化的則是聽、說、讀、寫思想基本技能。如何才能有效的強化農(nóng)村小學(xué)生英語基本技能訓(xùn)練呢?筆者結(jié)合自己在萬全區(qū)小屯堡小學(xué)從事多年農(nóng)村小學(xué)英語教學(xué)所積累的經(jīng)驗,談幾點體會。一、注重“聽”的培養(yǎng)英語學(xué)習(xí)必須要學(xué)會“聽”,只有聽得懂,才能學(xué)的會。(一)克服“聽”的乏味感眾所周知,缺乏“聽”的興趣,極容易產(chǎn)生“聽”的乏味感。因此,在課堂教學(xué)中應(yīng)科學(xué)合理使用多媒體教學(xué)手段,配以小學(xué)生喜聞樂見的動畫、優(yōu)美的音樂,逼真的場景、純美的音色,從而有效的吸引學(xué)生的注意力,克服枯燥感,從小養(yǎng)成“聽”的良好習(xí)慣。(二)講究“聽”的準(zhǔn)確性英語教學(xué)中的“聽”大有學(xué)問。教師首先要訓(xùn)練學(xué)生養(yǎng)成靜心聽的習(xí)慣。諸如讓他們細(xì)心觀察老師嘴型的大、小、扁、圓及變化情況,做到看的準(zhǔn)、聽的清,從而使發(fā)音準(zhǔn)確到位,模仿效果好。不難發(fā)現(xiàn),小學(xué)生聽音頻跟說跟讀,往往機械的能跟得上說,跟得上讀,而對于語音、語調(diào)、句重音、停頓等則關(guān)注不夠。這就要求教師要引導(dǎo)學(xué)生如何做到聽的準(zhǔn)確,同時在播放音頻前,可分步提出聽的具體要求,使之聽一遍錄音,便有一次收獲。(三)享受“聽”的樂趣鞏固英語學(xué)習(xí)效果最佳的辦法是開展英語交際,而英語交際主要手段是“聽”和“說”。在交際活動中,我們要給學(xué)生們多創(chuàng)設(shè)“聽”的機會。小學(xué)生生性好動,注意力較弱,維持時間較短,還容易走神。我們在教學(xué)時要采用他們喜聞樂見的教學(xué)方法來凝聚小學(xué)生的注意力,比如“朋友見面打招呼”,“模擬商場購物”、“街頭問路”、“家庭成員介紹”等等。還可以借助教學(xué)內(nèi)容上的需要采用“逼問”形式來逼迫學(xué)生專心聽他人說英語,自覺融入課堂教學(xué)之中。提問某生:Howoldareyou?Whereareyoufrom?Isyourfatheradocror?然后改用第三人稱問其他學(xué)生:Howoldishe?Whereishefrom?Ishisfatheradoctor?再如讓學(xué)生自述“我的家庭”后,讓其他學(xué)生按此內(nèi)容相互問答,或者請學(xué)生指出發(fā)言者的錯誤所在,如何糾正等,以此引導(dǎo)學(xué)生用心聽他人說英語。二、優(yōu)化“說”的訓(xùn)練“說”,是英語學(xué)習(xí)必需環(huán)節(jié),是英語教學(xué)的根本目標(biāo)。(一)營造“說”的氛圍農(nóng)村小學(xué)生剛開始接觸英語,她們的眼里充滿了好奇和新鮮感,心里卻忐忑不安。這時就需要我們在英語教學(xué)中充分注重發(fā)揮紐帶作用的作用。首先要用一些成功的學(xué)習(xí)案例鼓勵學(xué)生,比如投影那些用熟練英語演講的影像視頻,使他們在羨慕的心態(tài)中滿懷信心的進(jìn)入學(xué)習(xí)狀態(tài),形成輕松、愉悅的課堂氣氛,從而有效地幫助學(xué)生消除心理障礙,創(chuàng)設(shè)敢講英語、爭講英語、愛講英語的氛圍。另外,我們教師要精心組織教學(xué),優(yōu)化教學(xué)方法,充分利用多媒體的聲光電系統(tǒng),為學(xué)生創(chuàng)設(shè)一種美輪美奐情景,讓學(xué)生身置語境,在愉悅課堂氛圍中學(xué)習(xí),有意識或無意識地開口練說,最大限度地調(diào)動學(xué)生說英語的主動性和積極性。(二)誘發(fā)“說”欲望讓每個農(nóng)村學(xué)生自覺開口說英語,可不是一件容易的事。這些學(xué)生由于缺乏學(xué)前基礎(chǔ),總是有些羞羞答答。此時就需要我們教師在教學(xué)中要特別關(guān)注那些存在怕說、缺乏勇氣的學(xué)生,千方百計幫助這些學(xué)生克服思想和心理障礙,必要時還應(yīng)該進(jìn)行個別耐心輔導(dǎo),要多給予鼓勵和表揚,肯定其點滴甚至是微不足道的進(jìn)步。讓他們多媒體電教手段的引導(dǎo)下多讀多練、反復(fù)糾正,力爭在口語訓(xùn)練中有所得,從而體驗到成功的歡樂,進(jìn)一步增強其說英語的自覺心里,激起其說英語的欲望。(三)增進(jìn)“說”自信農(nóng)村學(xué)生說英語時往往缺乏自信,教師應(yīng)允許學(xué)生暫時存在某些語言錯誤,待講完后,教師再指出并糾正。又如在連續(xù)說英語時停頓過長,還常加“嗯”之類語氣詞。這事就需要教師多留給學(xué)生一點思考時間,要求先想后說,想好再說,而且說話時要正視前方,不要低著頭,發(fā)言響亮,充滿自信,讓全班同學(xué)都能聽到。(四)培養(yǎng)“說”心態(tài)培養(yǎng)樂“說”的心態(tài),最重要的一點是引導(dǎo)學(xué)生在平時積極說英語,并熟記在不同的場合用不同的句子。例如第一次見面在正式場合可以說:Howdoyoudo?非正式場合遇到熟人則說Hi/Hello!首次見面應(yīng)該說Nicetomeetyou!認(rèn)識但不太熟的說Nicetoseeyouagain!三、突出“讀”力度閱讀能力的培養(yǎng)是小學(xué)英語教學(xué)的重要任務(wù)之一,對于農(nóng)村小學(xué)生料將一直就是一個弱項。因此,我們一是要嚴(yán)格要求小學(xué)生掌握“讀”的基本要領(lǐng)。比如注重指導(dǎo)學(xué)生能正確拼讀單詞,響亮地、流利地朗讀課文,語音語調(diào)基本正確。在平常讀單詞或句子時都要求他們用右手食指指著讀,以避免機械式的無意識朗讀。在拼讀單詞時要求他們熟記單詞,邊拼讀邊書寫。運用這樣拼讀單詞的基本技巧,有助于學(xué)生認(rèn)讀單詞和正確拼寫單詞。而是要側(cè)重克服“讀”英語的不良習(xí)慣。小學(xué)英語課文簡短易學(xué),讀來朗朗上口。有些學(xué)生覺得這些句都已能講能背了,朗讀時漫不經(jīng)心,發(fā)音不到位,無停頓,混著讀。特別是在集體朗讀時,伴有拖音明顯,節(jié)奏較差,語速偏慢,甚至“假?x”現(xiàn)象,隨時糾正學(xué)生朗讀的不良傾向,從而培養(yǎng)學(xué)生良好的讀的習(xí)慣。四、深化“寫”的改革寫的技能對于小學(xué)生很重要,必須從小就應(yīng)打好扎實的基礎(chǔ)。因此,我們一是要讓小學(xué)生認(rèn)真掌握“寫”的要領(lǐng)。這里必須強調(diào)教師的書寫示范作用,比如學(xué)生能認(rèn)清本子上的四線三格后,老師就邊示范邊講解:大寫字母占兩格,一格二格要頂格,小寫字母分清格;頭上有角一二格,尾巴拖拖二三格,無角無尾占中格。寫句子:開頭要大寫,末尾有標(biāo)點,一詞要靠攏,詞與詞要分開等等。而是要讓小學(xué)生認(rèn)真培養(yǎng)“寫”的興趣。比如老師先給學(xué)生一個主題,讓學(xué)生練習(xí),剛開始要求不高,能寫上一兩句就行,日積月累地要求寫上一段,寫上一篇。寫完老師可以給予修正,也可以讓學(xué)生互改,不斷提高自身水平。綜上所述,農(nóng)村小學(xué)英語教學(xué)存在一定的難度,提高基本技能不可一蹴而就,我們教師應(yīng)從農(nóng)村實際出發(fā),遵循循序漸進(jìn)的原則,注重拓展多種途徑,運用多種手段,在日常教學(xué)活動中有計劃地、有步驟、嚴(yán)格地訓(xùn)練學(xué)生,促使農(nóng)村學(xué)生聽說讀寫能力得到鍛煉和提升。PC機的高級編程技術(shù)
2第一節(jié)軟件對接口的訪問方式
裸機BIOS直接訪問
驅(qū)動程序操作系統(tǒng)實模式應(yīng)用程序返回3頁返回4頁返回5頁返回6頁3一、直接訪問層次
特點:可以直接進(jìn)行內(nèi)存和端口的訪問,也可以自行決定是否在實模式和保護(hù)模式間切換。
通常所有端口和內(nèi)存都是對程序員開放的。工具:匯編語言或C語言。應(yīng)用:BIOS都是基于這種低級層次編寫的;驅(qū)動程序也有使用這種方法的;實模式下應(yīng)用程序也可以使用這種方法。優(yōu)點:編寫的代碼執(zhí)行速度最快,占用空間最小。
缺點:需要對硬件和接口有很熟悉的了解;熟悉匯編,或熟練使用C語言的指針;不利于增加對新設(shè)備的控制。轉(zhuǎn)2頁4二、BIOS訪問層次
特點:通過BIOS提供的功能調(diào)用間接地對內(nèi)存或端口訪問,從而控制硬件。工具:匯編語言或C語言。應(yīng)用:驅(qū)動程序有些會使用這些功能調(diào)用;
需要獲得高效率的應(yīng)用程序也采用此方法。優(yōu)點:編寫的代碼執(zhí)行速度較快;編寫的代碼不需要直接對硬件進(jìn)行控制。
缺點:需要對底層信號有所了解;增加對新設(shè)備的控制不很方便,但好于低級層次。轉(zhuǎn)2頁5三、驅(qū)動程序?qū)哟?/p>
特點:使用BIOS功能調(diào)用、操作系統(tǒng)功能調(diào)用和直接訪問的方法編寫符合特定操作系統(tǒng)管理規(guī)范的設(shè)備驅(qū)動程序。工具:VC++與DDK開發(fā)包,或第三方開發(fā)工具如DriverStudio。應(yīng)用:在操作系統(tǒng)層面上的設(shè)備控制,并為應(yīng)用程序提供API支持。優(yōu)點:既能夠控制硬件,又保證操作系統(tǒng)的完整與安全。
缺點:需要對底層信號有所了解;需要對操作系統(tǒng)各管理模塊有深入的了解。轉(zhuǎn)2頁6四、應(yīng)用程序?qū)哟?/p>
特點:使用操作系統(tǒng)和各種驅(qū)動程序所提供的功能調(diào)用或API函數(shù)間接對硬件或內(nèi)存進(jìn)行訪問。工具:VC++、Delphi、Java等。應(yīng)用:編寫面向終端用戶的各類應(yīng)用程序。優(yōu)點:無需對硬件控制有太多了解,只需完成應(yīng)用層面的工作就可以,而且還保證操作系統(tǒng)的完整與安全。
缺點:需要了解大量的API和功能調(diào)用函數(shù)的功能;由于是間接調(diào)用,所以代碼的效率和編譯系統(tǒng)有很大的關(guān)系。轉(zhuǎn)2頁7第二節(jié)Pentium4的內(nèi)存管理一、實模式的存儲管理(同PC/XT)采用內(nèi)存分段的辦法,內(nèi)存分為若干段,段的大小根據(jù)需要決定,最大為64KB。16位段地址16位段內(nèi)偏移:16位段地址16位段內(nèi)偏移(左移四位)+20位物理地址=軟件地址:物理地址:思考:軟件地址到物理地址變換的二義性及應(yīng)用?段地址大小設(shè)置與地址變換的關(guān)聯(lián)?8內(nèi)存區(qū)分配:0000000A0000100000110000≈≈FFFFFF640KB常規(guī)內(nèi)存384KB高端內(nèi)存塊UMB64KB高端內(nèi)存區(qū)HMA1~4095MB擴展內(nèi)存塊EMB存放用戶程序和DOS駐留部分存放顯存、網(wǎng)卡和部分用戶的DOS驅(qū)動程序和BIOS存放部分DOS駐留程序大于1M以上的擴展內(nèi)存,DOS下不能直接訪問,需要用XMS規(guī)范使用。可利用DOS調(diào)用或BIOS調(diào)用來使用。9二、保護(hù)模式下的系統(tǒng)地址寄存器說明:①GDTR、IDTR在進(jìn)入保護(hù)模式前設(shè)置,TR、LDTR在任務(wù)切換時設(shè)置。
②GDT、IDT整個系統(tǒng)各一個,TSS、LDT每個任務(wù)一個。③選擇符與描述符含義不同。名稱縮寫長度內(nèi)容全局描述符表寄存器GDTR48位GDT的32位線性地址+16位界限值中斷描述符表寄存器IDTR48位IDT的32位線性地址+16位界限值任務(wù)狀態(tài)段寄存器TR16位TSS的16位選擇符全局描述符表寄存器LDTR16位LDT的16位選擇符1、系統(tǒng)地址寄存器匯總表10基址界限選擇符TSS描述符……線性地址TSS結(jié)構(gòu)2、系統(tǒng)地址寄存器與系統(tǒng)表關(guān)系基址界限選擇符LDT描述符……01LDT2段描述符段寄存器選擇符選擇符基址界限IDTR(48bit)……01門描述符IDT2門描述符基址界限GDTR(48bit)TR(16bit)選擇符……01TSS描述符GDT2LDT描述符段描述符LDTR(16bit)選擇符描述符長均為8Byte返回下頁返回12頁返回13頁11說明1:
GDT表項類型—LDT描述符、TSS描述符、段描述符;IDT表項類型—中斷門描述符、陷阱門描述符、任務(wù)門描述符、調(diào)用門描述符;LDT表項類型—段描述符。說明3:表或結(jié)構(gòu)長度=(界限)+1。例:GDTR的內(nèi)容為00F0000000FFH,求GDT的首地址和末地址及該表含有多少個描述符?轉(zhuǎn)上頁解:GDT首址=00F00000H;GDT末址=00F00000H+0FFH=00F000FFH;GDT描述符個數(shù)=GDT長度/8=(0FFH+1)/8=32。說明2:不同類型描述符通過第5字節(jié)的D3~D0區(qū)分。轉(zhuǎn)19頁123、TSS與LDT關(guān)系I/O允許位映象(最大8K)中斷重定向位映象(32字節(jié))操作系統(tǒng)可利用(長度可變)I/O允許位映象域基址0T0任務(wù)LDT選擇符0GS、FS選擇符0DS、SS選擇符0CS、ES選擇符EDI、ESI、EBP、EBX、EDX、ECX、EAXEFLAG、EIPCR30SS2(特權(quán)級2)ESP20SS1(特權(quán)級1)ESP10SS0(特權(quán)級0)ESP00反向鏈00H04H08H0cH10H14H18H1cH20H28H48H50H58H60H64H68HTSS段限TSS結(jié)構(gòu)當(dāng)前任務(wù)LDTR選擇符上一任務(wù)TR選擇符當(dāng)前任務(wù)的段選擇符當(dāng)前任務(wù)的優(yōu)先級可改變,堆棧的優(yōu)先級也要相應(yīng)改變。系統(tǒng)為任務(wù)的0~2級堆棧指針用SSi和ESPi表示。虛擬8086模式且CR4中VME=1時有效轉(zhuǎn)10頁134、門描述符與段選擇符關(guān)系偏移屬性選擇符IDTRIDT邊界屬性基地址GDT/LDT線性地址中斷服務(wù)子程序代碼段基地址偏移EIP門描述符段選擇符或TSS選擇符段描述符說明:利用段選擇符的bit2確定查詢GDT或LDT。段選擇符指向一個段描述符。對任務(wù)門而言,選擇符為TSS選擇符。任務(wù)的切換:通過直接改變TR方式,
或通過任務(wù)門間接方式實現(xiàn)。轉(zhuǎn)10頁14三、保護(hù)模式下Pentium4的段式存儲管理
1、段式管理的地址變換段寄存器的15~2位偏移量4532310段描述符段表32位線性地址物理地址邏輯地址段基址Pentium系列的虛擬地址空間是246=64TB。注意:保護(hù)模式下段寄存器的含義已變?yōu)槎芜x擇符,通常稱段寄存器為段選擇符。152、段描述符表與段選擇符RPLTI段選擇符15210索引TI=1TI=0……01GDT2段描述符段描述符……01LDT2段描述符段描述符163、段描述符D7D0段界限7~0段界限15~8基址7~0基址15~8基址23~16基址31~24TYPESAVLDPLPGD/B0段界限19~1601234567返回20頁17D7D0AVLGD/B0段界限19~16用戶/操作系統(tǒng)可用位D/B位粒度位D/B位代碼段(D位)D=1使用32位操作系統(tǒng)和32位尋址方式D=0使用16位操作系統(tǒng)和16位尋址方式數(shù)據(jù)段(B位)B=1堆棧使用ESP寄存器,上限為FFFFFFFFH
B=0堆棧使用SP寄存器,上限為FFFFH
段描述符中的第6字節(jié):思考:如何知道該段為代碼段或數(shù)據(jù)段?18段描述符中非系統(tǒng)段的第5字節(jié):AWREDCE=0E=1S=1DPLPD7D0存在位特權(quán)位S=1是非系統(tǒng)段S=0是系統(tǒng)描述符代碼段標(biāo)志數(shù)據(jù)段標(biāo)志兼容位可讀位訪問位擴展方向位可寫位19段描述符中系統(tǒng)段的第5字節(jié):類型值段類型類型值段類型0(0000)未定義8(1000)未定義1(0001)286的有效任務(wù)狀態(tài)段9(1001)386的有效任務(wù)狀態(tài)段2(0010)LDT描述符10(1010)未定義3(0011)286的忙碌任務(wù)狀態(tài)段11(1011)386的忙碌任務(wù)狀態(tài)段4(0100)286的調(diào)用門12(1100)386的調(diào)用門5(0101)286或386的任務(wù)門13(1101)未定義6(0110)286的中斷門14(1110)386的中斷門7(0111)286的陷阱門15(1111)386的陷阱門D7D0TYPESDPLP返回11頁20#include"stdafx.h"#include<stdio.h>#include<wtypes.h>
//wtypes.h定義了DWORDLONG,DWORD,WORD等數(shù)據(jù)類型DWORDLONGgdtr,savegdt;//下面是GDT中將創(chuàng)建的數(shù)據(jù)段描述符表,基地址0X00000F00,段界限為0XFFFF,優(yōu)先級為//3的在內(nèi)存中的可寫數(shù)據(jù)段,同P16段描述符WORDdescriptor[4]={0xFFFF,0X0F00,0XF200,0X0040};
intresult[10];intmain(intargc,char*argv[]){_asm{
push
ebp
sgdt
gdtr
//將GDTR寄存器的內(nèi)容讀取到gdtr開始的6個字節(jié)中,其中 //前兩個字節(jié)給出GDT的界限值,高4個字節(jié)給出GDT的基地址
mov
ebp,dwordptr[gdtr+2]//將gdt的基地址讀到EBP中
add
ebp,70h //我們選擇70H偏移下的段描述符(GDT中第14個描述符)
lea
edi,savegdt
mov
esi,ebp
movsd
movsd //以上4條指令保存原來在70H偏移上的描述符
mov
edi,ebp
lea esi,descriptor;
movsd
movsd
//把我們的數(shù)據(jù)段描述符裝入70H偏移上
push
es
mov
ax,0073h
//選擇字為描述符偏移70H拼接上低3位控制位元, //其中Ti為0,表示訪問GDT,RPL為11,說明3級優(yōu)先級,所以就為73H
轉(zhuǎn)16頁21 mov
es,ax
//ES裝入選擇字73H
lea
edi,result
//將存放輸出結(jié)果的變量的地址放在EDI中
mov
eax,1
mov
ebx,1}_asm{
mov
cx,10a1: mov
es:[eax],eax
add
eax,4
loop
a1
//上面4條指令將向物理地址0X00000F00處寫10個雙字}_asm{
mov
cx,10a2: mov
eax,es:[ebx]
mov
[edi],eax
add
ebx,4
add
edi,4
loop
a2
//以上從物理地址0X00000F00處依次讀出10個數(shù)據(jù)存放在
//result數(shù)組中}_asm{
pop
es
pop
ebp}22 printf("result="); for(inti=0;i<10;i++) printf("%d,",result[i]);
//輸出結(jié)果 return0;}23四、保護(hù)模式下Pentium4的虛擬頁式存儲管理
主存~~~~頁框頁面程序1程序2程序3241、頁面大小選擇PGEPCE83176543210MCEPAEPSEDETSDVMEPVI保留,缺省為全0CR4PAEPSE物理地址位數(shù)頁面大小0032位4KB0132位4KB/4MB1036位4KB1136位4KB/2MB252、32位4KB分頁方式地址變換
32位線性地址頁目錄項號頁面號偏移CR332位物理地址31222112110頁目錄頁表3112119876543210PWTPCD頁表基地址31~12PRWUSAVLAD0頁目錄項PWTPCD頁框基地址31~12PRWUSAVLAD頁表項3112119876543210P=出現(xiàn)位,US=用戶/監(jiān)督位,PCD是頁Cache禁止,D=Cache“臟”位,RW=讀/寫位,PWT=頁寫貫穿位,A=訪問位,AVL=用戶的操作系統(tǒng)可用位。而第7位(PS)在4KB分頁中為0263、32位4MB分頁方式地址變換
32位線性地址頁目錄項號偏移CR332位物理地址3122210頁目錄3122876543210PWTPCD頁框基地址31~22PRWUSAD1頁目錄項274、36位4KB分頁方式地址變換
31543210PWTPCD32字節(jié)對齊的PDPT基地址CR3寄存器31363512116543210PWTPCDPAVLPDPT項4KB對齊的頁目錄基地址(高24位)32位線性地址頁目錄項號頁面號偏移CR336位物理地址313029212012110頁目錄頁表PDPT項號頁目錄指針表4×64位512×64位512×64位63363512119876543210PWTPCD4KB對齊的頁表基地址PRWUSAVLA0頁目錄項PWTPCD4KB對齊的頁框基地址PRWUSAVLAD頁表項633635121198765432100G285、36位2MB分頁方式地址變換
32位線性地址頁目錄項號偏移CR336位物理地址31302921200頁目錄PDPT項號頁目錄指針表4×64位512×64位頁目錄項PWTPCD2MB對齊的頁框基地址PRWUSAVLAD6336352120121198765432101G低21位高15位29第三節(jié)Windows9x驅(qū)動程序設(shè)計一、虛擬機與VxD的引入計算機底層硬件操作系統(tǒng)內(nèi)核與VxD操作系統(tǒng)提供的接口應(yīng)用軟件特權(quán)級3特權(quán)級030Windows9x運行環(huán)境:
Windows9x虛擬機環(huán)境SYSVMWin16地址空間Win16程序Win16程序Win16程序Win16程序Win32程序Win32地址空間Win32程序Win32地址空間……DOSVMDOS程序DOSVMDOS程序……31二、虛擬機下I/O端口訪問執(zhí)行in,out指令CPL<IOPL?IOPM相關(guān)位=0?進(jìn)行I/O操作否否產(chǎn)生一個一般保護(hù)異常是是IOPL用以表示指定的I/O操作處于特權(quán)級的哪一級。它在EFLAGS中。CPL當(dāng)前段的I/O優(yōu)先級,它實際上是CS段選擇符的第0~第1位。
IOPM是對所有VM都起作用的權(quán)限機制,它以位(bit)來代表每個端口。某位為1,則該代表的端口被禁止訪問;某位為0,則允許訪問該位所代表的端口。1、保護(hù)模式下I/O訪問
約定:IOPL為0。322、V86模式下I/O訪問
執(zhí)行in,out指令I(lǐng)OPM相關(guān)位=0?進(jìn)行I/O操作否產(chǎn)生一個一般保護(hù)異常是
約定:忽略CPL<IOPL的判斷。
訪問:符合保護(hù)模式下的I/O訪問規(guī)則。如何捕獲一個端口的訪問?配置IOPM相關(guān)位333、VxDs捕獲的I/O端口34三、虛擬機下中斷或異常的處理
外部中斷和處理器異常軟中斷CPL≤門描述符的DPL?是訪問各類門描述符轉(zhuǎn)移后代碼段的DPL≤CPL?是執(zhí)行0特權(quán)級別中的中斷處理程序禁止訪問否否
約定:外部中斷和異常處理的DPL為0;軟中斷的DPL不變,為設(shè)定值。35
特權(quán)切換:中斷處理程序特權(quán)級為0;轉(zhuǎn)移后DPL≤CPL時,運行中斷處理程序。Win32程序虛擬機VxD中的回調(diào)函數(shù)VPICDINTxCALLRETIRET硬件中斷IRET異常處理程序
思考:如何使自己從用戶級轉(zhuǎn)到核心級?
利用保護(hù)模式下中斷的處理流程。36例:
在IDT中構(gòu)造一個中斷門描述符,使它的DPL=3,這樣它就可以被用戶級的程序訪問(DPL≤CPL),將該中斷門描述符的段選擇字設(shè)為028H,顯然該選擇字對應(yīng)的代碼段在GDT中,由于OS代碼段基地址為00000000H,段界限為FFFFFFFFH,所以現(xiàn)在中斷門的偏移量就實際給出了中斷處理程序入口的線性地址,我們只要把一個過程作為中斷處理程序,這個過程就處在核心級里了。程序如下:37#include"stdafx.h"#include<stdio.h>#include<wtypes.h>
//wtypes.h定義了DWORDLONG,DWORD,WORD等數(shù)據(jù)類型DWORD
_cr0;
//用來保存CR0寄存器的值void_declspec(naked)newint3(void)//運行在核心級的中斷3處理程序{_asm{
mov
eax,cr0
//這是必須在核心級才能執(zhí)行的特權(quán)指令
mov
_cr0,eax}_asm
iretd
//中斷返回}intmain(intargc,char*argv[]){DWORDLONGidtr,saveidt;WORD
newgate[4]={0x0000,0x0028,0xee00,0x0000};
//中斷門描述符_asm{
sidt
idtr
//將IDTR的值存在idtr變量開始的6個字節(jié)中
mov
ebx,DWORDptr[idtr+2]
//把IDT的基地址讀入EBX寄存器
add
ebx,24
//選擇中斷3作為進(jìn)入核心級的入口,中斷3的門描述符
//的地址是IDT基地址加上3*8(每個門描述符8個字節(jié))
mov
esi,ebx
lea
edi,saveidt
movsd
movsd
//保存原來中斷3的門描述符到saveidt中
lea
eax,newint3轉(zhuǎn)下頁38 mov
newgate,ax
shr
eax,16 mov
[newgate+6],ax
//向新的中斷描述符中填入中斷處理程序的偏移量
lea
esi,newgate
mov
edi,ebx
movsd
movsd
//用新中斷描述符在IDT中替換原來的中斷3描述符
int
3h
//觸發(fā)中斷3,使程序跳轉(zhuǎn)到0級執(zhí)行中斷處理程序
lea
esi,saveidt
mov
edi,ebx
movsd
movsd
//恢復(fù)原來中斷3的門描述符} printf("cr0=0x%x",_cr0);
//輸出結(jié)果 return0;}返回上頁PDPL01110000保留偏移量15~00偏移量31~16段選擇符(28H—C,30H--D)311615141312876540中斷門描述符:39四、虛擬設(shè)備驅(qū)動程序(VxD)基礎(chǔ)1、VxD的程序文件結(jié)構(gòu)
VxD包含五個段:
VxD_CODE(保護(hù)模式下的代碼段):含設(shè)備驅(qū)動程序回調(diào)例程、服務(wù)程序、API接口函數(shù)和控制程序。
VxD_DATA(保護(hù)模式下的數(shù)據(jù)段):包含設(shè)備描述塊、服務(wù)表、全局變量等。
VxD_ICODE(保護(hù)模式下的初始化代碼段):初始化時用的服務(wù)程序和過程,初始化后被丟棄。
VxD_IDATA(保護(hù)模式下的初始化數(shù)據(jù)段):初始化時用的數(shù)據(jù),初始化后被丟棄。
VxD_REAL_INIT(實模式下的初始化資料與代碼):初始化時調(diào)用,該過程返回后被丟棄。每個VxD裝入主存后產(chǎn)生一個對象,每種型號的設(shè)備共用一個VxD對象。402、VxD的設(shè)備描述符塊DDBtypedefstructtagDDB{ DWORD
DDB_Next;
//VMM使用這一項來指出下一個DDB的地址 WORD
DDB_SDK_Version;//建立該VxD所使用的SDK/DDK的版本號 WORD DDB_Req_Device_Number;//設(shè)備ID。UNDEFINED_DEVICE_ID //表示不使用唯一ID BYTE
DDB_Dev_Major_Version;//
VxD的主版本號 BYTE
DDB_Dev_Minor_Version;//
VxD的次版本號 WORD
DDB_Flags;
//DDB標(biāo)志位 BYTE
DDB_Name[8];
//
VxD的名字,不足8個字節(jié)必須以空格補滿 DWORD
DDB_ Init_Order;//指定VxD的初始化順序,如果沒有特別的初 //始化要求就使用 UNDEFINED_INIT_ORDER DWORD
DDB_Control_Proc;
//
設(shè)備控制程序的地址 DWORD
DDB_V86_API_Proc;
//V86API程序的入口地址 DWORD
DDB_PM_API_Proc;
//保護(hù)模式API程序的入口地址 DWORD
DDB_V86_API_CSIP
//V86入口點的CS:IP DWORD
DDB_PM_API_CSIP;
//保護(hù)模式入口點的CS:IP DWORD
DDB_Reference_Data;
//實模式初始化代碼設(shè)置的參考資料 DWORD
DDB_VxD_Service_Table_Ptr;//VxD服務(wù)表的地址 DWORD
DDB_VxD_Service_Table_Size;//VxD服務(wù)表中提供的VxD服務(wù)的 //數(shù)目}DDB;每個設(shè)備(含同型號設(shè)備)均有一個DDB。413、VxD的加載與卸載動態(tài)加載:API函數(shù)發(fā)的消息功能CreateFileSys_Dynamic_Device_Init加載VxDDeviceIOControlW32_DeviceIOControl與VxD進(jìn)行交互處理CloseHandleSys_Dynamic_Device_Exit卸載VxDhDevice=CreateFile("\\\\.\\myfirst.vxd",0,0,0,OPEN_EXISTING, FILE_FLAG_DELETE_ON_CLOSE,0);DeviceIoControl(hDevice,DIOC_MY_IO,NULL,0,NULL,0, NULL,NULL);CloseHandle(hDevice);加載:使設(shè)備與Win32API掛鉤。42靜態(tài)加載:434、VMM與VxD間的消息5、Win32與VxD間的通信Win32應(yīng)用程序調(diào)用指令回調(diào)函數(shù)VxDDeviceIoControl()1.Shell_PostMessage()給應(yīng)用程序消息2.VWIN32_QueueUserApc()給應(yīng)用線程事件3.發(fā)通過轉(zhuǎn)換后的Ring0級事件給應(yīng)用程序44第四節(jié)Windows2000/XP設(shè)備驅(qū)動程序設(shè)計
一、Windows2000/XP的設(shè)備驅(qū)動程序
虛擬設(shè)備驅(qū)動程序(VDD)內(nèi)核模式驅(qū)動程序文件系統(tǒng)驅(qū)動程序保留設(shè)備驅(qū)動程序PnP驅(qū)動程序顯示驅(qū)動程序WDM驅(qū)動程序類驅(qū)動程序迷你驅(qū)動程序45
虛擬設(shè)備驅(qū)動程序(VirtualDeviceDriver,VDD)可使DOS應(yīng)用程序訪問x86平臺上的硬件,也可支持Windows9x下的對端口訪問。
WDM驅(qū)動程序是一種遵循電源管理協(xié)議并能在Win98和Win2000上實現(xiàn)源代碼級兼容的PnP驅(qū)動程序。WDM驅(qū)動程序又可分為類驅(qū)動程序(管理已定義類的設(shè)備)和迷你驅(qū)動程序(提供廠商專有的支持)。
顯示驅(qū)動程序是用于顯示和打印設(shè)備的內(nèi)核模式驅(qū)動程序。
文件系統(tǒng)驅(qū)動程序在本地磁盤或網(wǎng)絡(luò)上實現(xiàn)標(biāo)準(zhǔn)PC文件系統(tǒng)模型(含多層次目錄結(jié)構(gòu)和命名文件概念)。
保留設(shè)備驅(qū)動程序主要包括WindowsNT早期版本的驅(qū)動程序,它直接控制一個硬設(shè)備而不用其他驅(qū)動程序幫助,可以不做修改地在Windows2000中運行。46二、WDM的基本結(jié)構(gòu)1、設(shè)備對象及設(shè)備對象棧設(shè)備對象:系統(tǒng)為幫助軟件管理硬件而創(chuàng)建的一個數(shù)據(jù)結(jié)構(gòu)(包括PDO、FDO、FiDO)。
硬件僅指某功能設(shè)備,多功能設(shè)備有幾個設(shè)備對象。
PDO(物理設(shè)備對象):設(shè)備對象中的物理型對象。
FDO(功能設(shè)備對象):設(shè)備對象中的功能型對象。
FiDO(過濾器設(shè)備對象):在I/O管理器、FDO和PDO間的監(jiān)視、修改IRP流的過濾型對象,分上層過濾和下層過濾對象。設(shè)備對象棧:描述對設(shè)備對象內(nèi)部處理請求的驅(qū)動層次的棧型結(jié)構(gòu),是設(shè)備對象的內(nèi)部屬性。轉(zhuǎn)下頁47FDO設(shè)備對象FiDOFiDOPDO設(shè)備對象棧上層過濾器驅(qū)動程序功能驅(qū)動程序下層過濾器驅(qū)動程序總線驅(qū)動程序IRPI/O系統(tǒng)服務(wù)Win32子系統(tǒng)應(yīng)用程序用戶態(tài)核心態(tài)I/O管理器返回上頁返回下頁返回49頁返回50頁482、設(shè)備驅(qū)動程序
WDM模型中,設(shè)備驅(qū)動程序有下列幾種類型:
功能驅(qū)動程序:管理FDO所代表的設(shè)備,負(fù)責(zé)其初始化、處理I/O操作、I/O操作完成時產(chǎn)生中斷事件,為用戶提供一種適當(dāng)?shù)脑O(shè)備控制方式。
總線驅(qū)動程序:負(fù)責(zé)管理PDO硬件和計算機之間的連接。
過濾器驅(qū)動程序:管理FiDO所代表的設(shè)備,用于監(jiān)視和修改IRP流,硬件或軟件人員可利用過濾器驅(qū)動程序修改上級驅(qū)動程序的傳遞過來的操作。
每種硬件設(shè)備的驅(qū)動程序由上述兩到三種驅(qū)動程序組成(可以無過濾器驅(qū)動程序)。相同類型的總線共用一種總線驅(qū)動程序(如PCI總線驅(qū)動程序)。轉(zhuǎn)上頁493、設(shè)備對象與設(shè)備驅(qū)動程序a.功能設(shè)備與設(shè)備對象每個功能設(shè)備對應(yīng)一個設(shè)備對象(設(shè)備對象棧為設(shè)備對象內(nèi)部屬性),相同型號的多個功能設(shè)備對應(yīng)多個設(shè)備對象。
每個設(shè)備對象具有不同的私有屬性值(如設(shè)備ID)。c.設(shè)備對象與驅(qū)動程序相同類型的多個設(shè)備對象共用一個過濾驅(qū)動程序和功能驅(qū)動程序,即指向同一個驅(qū)動程序?qū)ο蟆.設(shè)備驅(qū)動程序與設(shè)備驅(qū)動程序?qū)ο?/p>
設(shè)備驅(qū)動程序加載時建立一個設(shè)備驅(qū)動程序?qū)ο蟆^D(zhuǎn)47頁504、應(yīng)用程序?qū)υO(shè)備對象的操作過程
Win32子系統(tǒng)處理:將I/O操作轉(zhuǎn)換后交I/O管理器處理,I/O管理器創(chuàng)建一個I/O請求包(IRP)后,送到設(shè)備對象棧的最上層設(shè)備對象對應(yīng)的驅(qū)動程序。轉(zhuǎn)47頁操作接口:設(shè)備驅(qū)動程序的Win32API函數(shù),或重載的設(shè)備驅(qū)動程序的Win32API回調(diào)函數(shù)。
操作參數(shù):設(shè)備句柄、操作類型及其它信息。
例:DeviceIoControl(hDevice,DIOC_MY_IO,NULL,0,NULL,0,NULL,NULL);
驅(qū)動程序處理:每層驅(qū)動程序都可決定如何處理IRP,既可直接處理完該IRP就不再向下傳,也可處理完后繼續(xù)向下傳遞,還可只做向下傳遞工作。下層處理完的返回信息又通過該包的結(jié)構(gòu)逐層向上傳遞。515、設(shè)備驅(qū)動程序的裝入過程總線驅(qū)動程序檢測到新的硬件安裝向?qū)е付ㄐ碌挠布愋腿〉脧S商、設(shè)備類型、版本、資源需求等信息取配置頭區(qū)域信息由指定得到信息硬件接入添加新設(shè)備系統(tǒng)重啟檢測指定PnP管理器就創(chuàng)建PDO,在注冊表中添加某些項所有硬件檢測完畢?NYPnP管理器決定分配哪些資源給各個設(shè)備52PnP管理器查找注冊表中與該PDO相吻合的各級驅(qū)動程序執(zhí)行DriverEntry(),設(shè)置各例程的入口地址,將對象指針裝入I/O管理器中找到?NY讀INF文件,按INF文件指令安裝各級驅(qū)動程序PnP管理器裝入最底層過濾驅(qū)動程序,調(diào)用其AddDevice函數(shù),該函數(shù)創(chuàng)建一個FiDO,實現(xiàn)FiDO與同級驅(qū)動程序的連接PnP管理器查找所選驅(qū)動程序?qū)ο笠言贗/O管理器中已裝入?NY53PnP管理器根據(jù)需要給設(shè)備發(fā)送各種PnPIRPPnP管理器給設(shè)備發(fā)送“啟動設(shè)備”PnPIRP,驅(qū)動程序?qū)⒎峙涞馁Y源信息向下傳送到設(shè)備配置頭區(qū)域中,并啟動設(shè)備驅(qū)動程序處于等待狀態(tài),等待IRP的到來PnP管理器依次裝入各級驅(qū)動程序,完成整個設(shè)備對象棧AddDevice函數(shù)把PDO連接到FiDO上54三、WDM驅(qū)動程序的結(jié)構(gòu)
WDM驅(qū)動程序包含許多例程,操作系統(tǒng)調(diào)用這些例程來執(zhí)行對IRP的各種操作。基本驅(qū)動程序例程I/O控制例程分發(fā)例程DriverEntryAddDeviceStartIOAdapterControlOnInterruptDpcForIsrDispatchPnpDispatchPowerDispatchWmiDispatchReadDispatchWrite
StartIO處理請求隊列、AdapterControl處理DMA操作、OnInterrupt處理中斷。55在每個WDM驅(qū)動程序中,下列例程必須有:DriverEntry例程:這個例程是每一個設(shè)備驅(qū)動程序的入口。完成某些全局初始化(如將驅(qū)動程序?qū)ο笾羔樠b入到I/O管理器中)工作,設(shè)置響應(yīng)各種用戶請求的分發(fā)例程與I/O控制例程的入口。AddDevice例程:對于功能驅(qū)動程序,其AddDevice函數(shù)的基本職責(zé)是創(chuàng)建一個設(shè)備對象并把它連接到以PDO為底的設(shè)備堆棧中。
DispatchPnp例程:用于處理IRP_MJ_PNP消息,以便能實現(xiàn)即插即用的功能。DispatchPower例程:用于實現(xiàn)對電源管理的支持。DispatchWmi例程:WMI是微軟實現(xiàn)的基于Web的企業(yè)管理工業(yè)標(biāo)準(zhǔn),該例程用于處理有關(guān)的消息。56
驅(qū)動程序的DriverEntry函數(shù)示例:extern"C"NTSTATUSDriverEntry(INPDRIVER_OBJECTDriverObject,INPUNICODE_STRINGRegistryPath){
//初始化例程的入口地址DriverObject->DriverUnload=DriverUnload;DriverObject->DriverExtension->AddDevice=AddDevice;DriverObject->DriverStartIo=StartIo;DriverObject->MajorFunction[IRP_MJ_PNP]=DispatchPnp;DriverObject->MajorFunction[IRP_MJ_POWER]=DispatchPower;DriverObject->MajorFunction[IRP_MJ_SYSTEM_CONTROL]=DispatchWmi;……//這里可加入其他MajorFunction處理例程的入口地址返回66頁57//如果驅(qū)動程序需要訪問設(shè)備的服務(wù)鍵,則備份//RegistryPathservkey.Buffer=(PWSTR)ExAllocatePool(PagedPool,RegistryPath->Length+sizeof(WCHAR));if(!servkey.Buffer)returnSTATUS_INSUFFICIENT_RESOURCES;servkey.MaximumLength=RegistryPath->Length+sizeof(WCHAR);RtlCopyUnicodeString(&servkey,RegistryPath);returnSTATUS_SUCCESS;}58驅(qū)動程序的AddDevice函數(shù)示例:NTSTATUSAddDevice(PDRIVER_OBJECTDriverObject,PDEVICE_OBJECTpdo){NTSTATUSstatus;PDEVICE_OBJECTfdo;status=IoCreateDevice(DriveObject, sizeof(WDM_DEVICE_EXTENSION), NULL, FILE_DEVICE_UNKNOWN, 0, FALSE, &fdo);//在fdo中產(chǎn)生我們的功能設(shè)備對象if(NT_ERROR(status))returnstatus;……}59驅(qū)動程序的IRP派遣函數(shù)示例:NTSTATUSDispatchXxx(PDEVICE_OBJECTdevice,PIRPIrp){PIO_STACK_LOCATIONstack=IoGetCurrentIrpStackLocation(Irp);//獲得棧單元指針PDEVICE_EXTENSIONpdx=
(PDEVICE_EXTENSION)device->DeviceExtension;
//獲得設(shè)備擴展
……
//其他IRP處理操作returnSTATUS_Xxx;
//返回狀態(tài)碼}60四、I/O請求包(IRP)
定義:I/O請求包(IRP)是驅(qū)動程序操作的中心,它是一個內(nèi)核“對象”,是預(yù)先定義的數(shù)據(jù)結(jié)構(gòu)。應(yīng)用:I/O管理器通過IRP對設(shè)備對象進(jìn)行操作。
I/O管理器接收到一個I/O請求后,分配并初始化一個IRP,再把它傳遞到合適的設(shè)備驅(qū)動程序中的最高驅(qū)動程序中。設(shè)備對象屬性(IRP的參數(shù))為設(shè)備驅(qū)動程序處理的數(shù)據(jù)。1、IRP組成由一個固定的首部和一個可變數(shù)目的I/O棧組成。
6162
I/O棧:通過IO_STACK_LOCATION結(jié)構(gòu)數(shù)組實現(xiàn)。
一次I/O請求可能對應(yīng)多個I/O操作的實現(xiàn)方法:較多個IRP實現(xiàn);一個IRP實現(xiàn)+I/O棧實現(xiàn)。(較優(yōu))
IO_STACK_LOCATION結(jié)構(gòu)成員:MajorFunction(該IRP的主功能碼)MinorFunction(該IRP的副功能碼)Parameters(IRP參數(shù))DeviceObject(與該棧單元對應(yīng)的設(shè)備對象地址)FileObject(內(nèi)核文件對象地址)CompletionRoutine(I/O完成程序地址)Context(任意的與上下文相關(guān)的值)。63Parameters成員的幾個常見的類型:
IRP_MJ_CREATE請求,創(chuàng)建設(shè)備映射;
IRP_MJ_CLOSE請求,關(guān)閉設(shè)備映射;
IRP_MJ_READ請求,讀取設(shè)備對象的信息;
IRP_MJ_WRITE請求,對設(shè)備對象寫信息;
IRP_MJ_PNP請求,實現(xiàn)PnP管理,如IRP_MN_START_DEVICE請求,啟動設(shè)備;
IRP_MJ_IOCTL請求,I/O控制。642、IRP創(chuàng)建與處理
創(chuàng)建者:I/O管理器,或其他的驅(qū)動程序。創(chuàng)建IRP的函數(shù):IoBuildAsynchronousFsdRequest();//創(chuàng)建異步IRPIoBuildSynchronousFsdRequest();//創(chuàng)建同步IRPIoBuildDeviceIoControlRequest();//創(chuàng)建同步IRP_MJ_DEVICE_CONTROL或//IRP_MJ_INTERNAL_DEVICE_CONTROL請求IoAllocateIrp();//創(chuàng)建其他種類IRPIoMakeAssociatedIrp();//創(chuàng)建某些IRP的子IRP65
IRP的設(shè)置與派遣:I/O管理器在創(chuàng)建完IRP后,將I/O請求信息設(shè)置到IRP中,并將IRP發(fā)送到設(shè)備驅(qū)動程序中。已知參數(shù)信息:PDEVICE_OBJECTDeviceObject; //設(shè)備對象結(jié)構(gòu)
IRP_MJ_Xxx;//I/O請求對應(yīng)的功能碼I/O管理器的處理流程:PIO_STACK_LOCATIONstack=IoGetNextIrpStackLocation(Irp);//獲得該IRP第一個堆棧單元的指針(堆棧初始為空)stack->MajorFunction=IRP_MJ_Xxx;
//填充MajorFunction代碼…… //對棧做其他初始化的工作//如StartIo()NTSTATUSstatus=IoCallDriver(DeviceObject,Irp);
//把IRP發(fā)送到設(shè)備驅(qū)動程序66IoCallDriver的執(zhí)行過程:NTSTATUSIoCallDriver(PDEVICE_OBJECTdevice,PIRPIrp){IoSetNextIrpStackLocation(Irp);PIO_STACK_LOCATIONstack=IoGetCurrentIrpStackLocation(Irp);//獲得棧單元指針stack->DeviceObject=device;//設(shè)置設(shè)備對象結(jié)構(gòu)地址ULONGfcn=stack->MajorFunction;//得到主功能號PDRIVER_OBJECTdriver=device->DriverObject;
//獲得驅(qū)動程序?qū)ο蟮牡刂穜eturn(*driver->MajorFunction[fcn])(device,Irp);
//利用主功能號調(diào)用相應(yīng)的派遣函數(shù)}*driver->MajorFunction[fcn]是函數(shù)指針,它所指向的派遣函數(shù)是在DriverEntry例程中指定的。轉(zhuǎn)56頁673、IRP參數(shù)與Win32API
大部分IRP參數(shù)可以和Win32函數(shù)對應(yīng)起來:IRP類型Win32APIIRP_MJ_CREAT
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 掌握金融分析師考試的財務(wù)分析技巧試題及答案
- 2025年銀行從業(yè)資格證考試的信心建立與試題與答案
- 小語種證書考試如何應(yīng)對壓力及試題與答案
- 高效復(fù)習(xí)的小語種證書試題及答案
- 2024年小語種證書考試指導(dǎo)試題及答案
- 銀行管理創(chuàng)新案例試題及答案2025年解析
- 網(wǎng)絡(luò)編輯師內(nèi)容設(shè)計思維試題及答案
- 如何制定個人的小語種考試復(fù)習(xí)計劃及試題及答案
- 多角度審視網(wǎng)絡(luò)編輯師試題及答案
- 畜牧師職稱考試基礎(chǔ)試題及答案總結(jié)
- 油庫設(shè)計的畢設(shè)論文
- [水穩(wěn)層]旁站監(jiān)理記錄表(范本)√
- 小學(xué)四年級上冊數(shù)學(xué)課后訓(xùn)練題:《數(shù)字編碼》
- 長城牌通用潤滑油、脂替代其他品牌產(chǎn)品清單
- API-682密封系統(tǒng)-中英文對照版
- 電動葫蘆出廠檢驗報告
- 挖機大中斗油封資料,液壓泵資料
- 技術(shù)開發(fā)部個人技能矩陣圖
- Hillstone設(shè)備密碼與配置恢復(fù)方法
- 二年級下冊語文教案第六單元部編版
- 廢氣處理工程施工方案模板
評論
0/150
提交評論