Vetal123 - страница участника аперо-сообщества

Не зарегистрирован?
Тебе сюда!
Регистрация!

Войди без регистрации
через соц. сеть!
ИЛИ
После входа тебе будут доступны дополнительные текстовые онлайн игры, активно взаимодействующие с игроком, а так же многопользовательские текстовые квесты.
Сейчас в онлайне только 14 гостей.

Партнеры Аперо:
"Коллекционер" - Страшный квест в Челнах!

В игре или на сайте ошибка?
Выдели текст и жми сюда или Ctrl+Enter
Разработчики скажут спасибо :)
Топ Разработка игр

Vetal123 - страница участника аперо-сообщества


Профиль не активирован. Если это твой профиль - проверь e-mail, указанный при регистрации, и перейди по ссылке для активации.

Последние комментарии:

#

От кого:

Комментарий:

Отправлен:

1 AbrakaDaniel AbrakaDanielhttp://apero.ruГлавнаяИграйонлайн!Конкурсоткрыт!СообщенияУчастникиМагазин(2)Создайигру!ДокументацияЗаданияiFiction.ruМыВКонтактеПрофильПривет,AbrakaDanielСейчасвонлайнеAbrakaDaniel(Vetal123)и20гостей.ПартнерыАперо:"Коллекционер"-СтрашныйквествЧелнах!Вигреилинасайтеошибка?ВыделитекстижмисюдаилиCtrl+EnterРазработчикискажутспасибо:)Навигация:http://apero.ru/Участники/Vetal123Vetal123-страницаучастникааперо-сообществаПрофильнеактивирован.Еслиэтотвойпрофиль-проверьe-mail,указанныйприрегистрации,иперейдипоссылкедляактивации.Последниекомментарии:1AbrakaDanielhttp://apero.ruГлавнаяИграйонлайн!Конкурсоткрыт!СообщенияУчастникиМагазин(2)Создайигру!ДокументацияЗаданияiFiction.ruМыВКонтактеПрофильПривет,AbrakaDanielСейчасвонлайнеAbrakaDaniel(Vetal123)и20гостей.ПартнерыАперо:"Коллекционер"-СтрашныйквествЧелнах!Вигреилинасайтеошибка?ВыделитекстижмисюдаилиCtrl+EnterРазработчикискажутспасибо:)Навигация:http://apero.ru/Участники/Vetal123Vetal123-страницаучастникааперо-сообществаПрофильнеактивирован.Еслиэтотвойпрофиль-проверьe-mail,указанныйприрегистрации,иперейдипоссылкедляактивации.Последниекомментарии:1AbrakaDanielhttp://apero.ruГлавнаяИграйонлайн!Конкурсоткрыт!СообщенияУчастникиМагазин(2)Создайигру!ДокументацияЗаданияiFiction.ruМыВКонтактеПрофильПривет,AbrakaDanielСейчасвонлайнеAbrakaDaniel(Vetal123)и20гостей.ПартнерыАперо:"Коллекционер"-СтрашныйквествЧелнах!Вигреилинасайтеошибка?ВыделитекстижмисюдаилиCtrl+EnterРазработчикискажутспасибо:)Навигация:http://apero.ru/Участники/Vetal123Vetal123-страницаучастникааперо-сообществаПрофильнеактивирован.Еслиэтотвойпрофиль-проверьe-mail,указанныйприрегистрации,иперейдипоссылкедляактивации.Последниекомментарии:1AbrakaDanielАннотация:КнигапосвященавнутреннемуустройствуиалгоритмамработыосновныхкомпонентовоперационнойсистемыMicrosoftWindows—WindowsServer2003,WindowsXPиWindows2000—ифайловойсистемыNTFS.Детальнорассмотренысистемныемеханизмы:диспетчеризацияловушекипрерываний,DPC,APC,LPC,RPC,синхронизация,системныерабочиепотоки,глобальныефлагиидр.Такжеописываютсявсеэтапызагрузкиоперационнойсистемыизавершенияееработы.Bчетвертомизданиикнигибольшевниманияуделяетсяглубокомуанализуиустранениюпроблем,из-закоторыхпроисходиткрахоперационнойсистемыилииз-закоторыхеенеудаетсязагрузить.Крометого,рассматриваютсядеталиреализацииподдержкиаппаратныхплатформAMDx64иIntelIA64.Книгасостоитиз14глав,словарятерминовипредметногоуказателя.Книгапредназначенасистемнымадминистраторам,разработчикамсерьезныхприложенийивсем,ктохочетпонять,какустроенаоперационнаясистемаWindows.Названиявсехкоманд,диалоговыхоконидругихинтерфейсныхэлементовоперационнойсистемыприведеныкакнаанглийскомязыке,такинарусском.ВерсияFb2редакции—1.5.Обошибкахпросьбасообщатьпоадресу—general2008@ukr.net.---------------------------------------------М.Руссинович,Д.СоломонВнутреннееустройствоMicrosoftWindows(главы1–4)WindowsServer™2003,WindowsXPиWindows20004-еизданиеПредысторияЯвновьпризнателенДэвидуСоломону(DavidSolomon)иМаркуРуссиновичу(MarkRussinovich)зато,чтоонипредоставилимневозможностьсказатьнесколькословоновомизданииихкниги«ВнутреннееустройствоMicrosoftWindows».Прошлоужеболеетрехлетсмоментавыходапоследнегоизданияэтойкниги,изаэтовремянасветпоявилисьдвавыпускаоперационнойсистемыWindows—оченьзначимыеобновленияклиентскойисервернойсистем.Передавторамистоялидвезадачи,которыепостоянноусложняются:отслеживаниеэволюционногоразвитиясистемыMicrosoftWindowsNTидокументированиетого,какменяласьреализацияеекомпонентоввкаждойверсии.Bэтомсмыслеавторыпроделалипростовыдающуюсяработу.(Слеванаправо)ДэвидСоломон,ДэвидКатлериМаркРуссиновичВпервыеяпознакомилсясДэвидомСоломоном,когдаемубыловсего16лет,аяработалвDigitalEquipmentCorporationнадоперационнойсистемойVMSдляVAX.Cтехпоронучаствовалвразработкеоперационныхсистем,атакжепреподавалвэтойобласти.CМаркомРуссиновичемяпознакомилсяпозже,ноужезадолгодоэтогобылнемалонаслышаноегоглубокихпознанияхвобластиоперационныхсистем.BчислеегозаслугверсияфайловойсистемыNTFS,которуюонзаставилработатьвMicrosoftWindows98,и«живой»отладчикядраWindows,позволяющийзаглянутьвнутрьсистемыWindowsвпроцессееевыполнения.ИстокиWindowsNTвосходяткоктябрю1988года,когдабылорешеносоздатьпереносимуюоперационнуюсистему,совместимуюсOS/2,поддерживающуюPOSIXимногопроцессорнуюобработку,обладающуювысокойзащищенностью,надежностьюиинтегрированнымисредствамиработывсетях.CприходомWindows3.0иееколоссальнымуспехомзаявленныецелинесколькоизменились:совместимостьсOS/2былаперенесенасуровнявсейсистемынауровеньотдельнойподсистемы.Поначалумыполагали,чтосумеемсоздатьWindowsNTзапарулет,новдействительностиееперваяверсиявышлалишьчерезчетыресполовинойгода—летом1993-го.ЭтаверсияподдерживалапроцессорыInteli386,Inteli486иMIPSR4000.ШестьнедельспустямыввелиподдержкуидляпроцессоровDigitalAlpha.ПерваяверсияWindowsNTполучиласьболеегромоздкойимедленной,чеможидалось,такчтоследующейвехойсталпроектDaytona(такназываетсяавтострадавоФлориде).Главнойцельювэтойверсиибылоуменьшениеразмерасистемы,повышениееебыстродействияи,разумеется,надежности.ЧерезполгодапослевыпускаWindowsNT3.5осенью1994-гомыподготовилиWindowsNT3.51,котораяпредставляласобойобновленнуюверсиюсдополнительнойподдержкойпроцессораIBMPowerPC.ТолчкомксозданиюследующейверсииWindowsNTсталожеланиесделатьпользовательскийинтерфейс,совместимыйсWindows95,ивключитьтехнологииCairo,уженаходившиесявразработкепарулет.Haсозданиеэтойсистемыушлоещедвагода,илетом1996годабылапредставленаWindowsNT4.0.НазваниеследующейверсииNTбылоизмененонаWindows2000.Онасталапоследнейсистемой,длякоторойодновременновыпускалиськлиентскаяисервернаяверсии.Windows2000былапостроенанатойжетехнологииWindowsNT,чтоипредыдущиеверсии,нообладалановойважнойфункциональностью,поддерживая,вчастности,ActiveDirectory.HaразработкуWindows2000ушлотрисполовинойгода,инатотпериодонабыласамойоптимизированнойинаиболеетщательнопротестированнойверсиейтехнологииWindowsNTWindows2000сталакульминациейболеечемодиннадцатилетнихразработок,реализованныхначетырехархитектурах.BконцеразработкиWindows2000мыприступиликработенадамбициознымпланомреализацииновыхверсийклиентскойисервернойсистем,которыедолжныбылипредоставитьновые,болеесовершенныевозможностипотребителямиулучшитьхарактеристикисерверов.Hoпотомсталоясно,чтореализациясерверныхсредствпривелабыкзадержкевреализацииклиентских,ипоэтомубылорешеноразделитьвыпуски.Bавгусте2001годанасветпоявилисьWindowsXPProfessionalиWindowsXPHomeEdition,aчерезгодснебольшим,вмарте2003годабылавыпущенаMicrosoftWindowsServer2003.ПомимоархитектурыIntelx86,этисистемыподдерживалиIntelIA64,благодарячемуWindowsNTвпервыевышланастезю64-разрядныхвычислений.Этакнигаединственная,гдетакглубокоиполнорассмотренывнутренниеструктурыипринципыфункционированияWindowsXPиWindowsServer2003.Крометого,онапредлагаетзаглянутьвбудущее—переводWindowsна64-разрядные«рельсы»,т.е.наееподдержкуархитектурx64(AMD64)иIntelEM64T,объявленныхAMDв2003годуиIntelвфеврале2004годасоответственно.Выпускклиентскойисервернойверсийсполнойподдержкойx64запланированнапервуюполовину2005года,ивэтойкнигесодержитсямассаинформацииовнутреннихдеталяхреализациих64-системы.Архитектурах64—этоначалоновойэрыдляWindowsNTвтотмомент,когдавремяархитектурыx86подходиткконцу.Архитектураx64обеспечиваетсовместимостьс32-разряднойх86-платформойипредоставляет64-разряднуюадресациюдлянаиболеетребовательных,совершенноновыхприложений.Этопозволитсохранитьинвестициив32-разрядноепрограммноеобеспечение,втожевремявдохнувновуюжизньвWindowsNTнаближайшеедесятилетиеилидаженаболеедлительныйпериод.ХотяназваниеNT-системызапоследниенескольколетнеоднократноменялось,онапо-прежнемуполностьюосновананаисходнойкодовойбазеWindowsNT.Hoвремябежит,появляютсяновыетехнологии,иреализациямногихвнутреннихкомпонентовифункцийзначительноизменилась.Авторыпроделаливнушительнуюработу,собравстолькодетальнойинформацииокодовойбазеWindowsNTиеереализацияхвразныхвыпускахнаразныхплатформах,атакжесоздавпримерыиутилиты,которыепомогаютчитателюразобратьсявтом,какработаюткомпонентыиподсистемыWindows.Экземплярэтойкнигидолженлежатьнастолеукаждогоразработчикасерьезногопрограммногообеспечения.ДэвидH.Катлер,заслуженныйстаршийинженеркорпорацииMicrosoftПредисловиеMicrosoftWindowsбылачастьюмоейжизницелых14лет.Заэтовремя—отверсиикверсии—нашаоперационнаясистемаразвиваласьвширьивглубь.СегодняработанадWindows—одинизсамыхважныхисложныхпроектоввмире.BвыпускеWindowsучаствуютболее5000инженеров.СредипользователейWindowsестьпредставителиужепочтивсехкультур,онаиспользуетсякакнакрупныхпредприятиях,такималенькимидетьми.ПользователиWindowsпостояннотребуютеесовершенствованияпрактическивовсехсферах—отэффективнойработынакрупнейшихсерверахдоприменениявдошкольномобучении.Windowsпоставляетсявсамыхразныхипостасях—отвстраиваемыхверсийивыпусковдлямедиа-центровдоредакцийдляцентровобработкиданных.ВсеэтипродуктыопираютсянаодниитежебазовыекомпонентыWindows,которыеразвиваютсяисовершенствуютсявкаждойновойверсии.ЭтофундаментальнаякнигаовнутреннемустройствебазовыхкомпонентовWindows.ЕсливыхотитекакможнобыстрееосвоитьпринципывнутреннейработыWindows,тогдаэтакнигадлявас.Освоениевсехчастейстольосновательногопродукта—задачаустрашающая.Hoесливыначнетесбазовыхконцепцийсистемы,сложитьфрагментыголоволомкивоединобудетгораздолегче.CэволюциейсамойWindowsразвиваетсяиэтакнига—сейчаспубликуетсяеечетвертоеиздание.МыужедавноиспользуемеедляобученияновыхсотрудниковMicrosoft,такчтопредлагаемыевамматериалыпроверенынапрактике.Есливывродеменя,значит,вамтоженравитсяразбиратьсявтом,какустроенывещи.Чтениекнижектипа«какиспользоватьто-тоито-то»меняникогданеудовлетворяло.Когдапонимаешь,какименноустроенавещь,пользуешьсяеюгораздоэффективнееи,честноговоря,сбольшимудовольствием.ЕсливасинтересуетWindows«сизнанки»,вывыбралиподходящуюкнигу.ДэвидиМаркпроделалипревосходнуюработу,написавкнигуотехнической«изнанке»Windows.Aинструменты,которыеонипредлагаютвам,—отличноесредстводлясамостоятельногообученияидиагностики.Прочитавэтукнигу,выбудетегораздолучшепонимать,каквзаимодействуютмеждусобойразличныекомпонентыиподсистемы,какиеусовершенствованиявнесенывновуюверсиюикаквыжатьизнихмаксимумвозможного.Этобылдолгийпуть—ионвсеещепродолжается.Такчтооткрывайтекнигу,азаодноикапот,подкоторымбьетсясердцеоднойизсамыхпотрясающихоперационныхсистем.ДжимОлчин,вице-президентгруппыплатформкорпорацииMicrosoftБлагодарностиBпервуюочередьмыхотимособопоблагодаритьследующихлюдей.•ДэйваКатлера(DaveCutler),заслуженногостаршегоинженераипервогоархитектораMicrosoftWindowsNT.ДэйвразрешилДэвидуСоломону(DavidSolomon)доступкисходномукодуивсяческиподдерживалегопреподавательскуюдеятельность,посвященнуюобъяснениюдеталейвнутреннегоустройстваWindowsNT,атакжеегоработунадвторымитретьимизданиемкниги.Помиморецензированияглавыпопроцессамипотокам,ДэйвответилнамассувопросовобархитектуреядраинаписалобисториисозданияWindowsдлянашейкниги.•ДжимаОлчинаJimAllchin),нашегоглавногоспонсора,—запредисловиекэтойкнигеизаотстаиваниеинтересовнашегоделавMicrosoft.•РобаШорта(RobShort),вице-президента,которыйпозаботилсяотом,чтобынампредоставилиресурсыидоступкнужнымлюдям.МытакжевыражаемпризнательностьдвумразработчикамизотделаWindowsзаподготовкуновыхматериалов,включенныхвэтоиздание:•АдриануМаринеску(AdrianMarinescu),которыйнаписалзаметноразросшийсяразделподиспетчерукучвглаве,гдерассматриваетсядиспетчерпамяти.•СамеруАрафеху(SamerArafeh),которыйпредоставилматериалыпоWow64.Спасибонашемустаромуприятелю,ДжеффриРихтеруJeffreyRichter),скоторыммычастовместеобедаем,заврезку«Какнасчет.NETиWinFX?»вглаве1изапостоянноенапоминаниеотом,какмалолюдей,по-настоящемуинтересующихсятем,очеммыговоримвсвоейкниге.Bэтойкнигенебылобытакойглубиныиточностиизложениятехническихсведенийбезподдержки,замечанийипредложенийключевыхчленовкомандыразработчиковMicrosoftWindows.Вотэтилюди:Былиидругие,ктоотвечалнанашивопросывкоридорахиликафетериях,—еслимываспропустили,пожалуйста,проститенас!МытакжевыражаемблагодарностьДжеймиХанраханJamieHanrahan)изAziusDeveloperTraining(www.azius.com),котораявсоавторствесДэвидомподготовилаучебныйкурсповнутреннейархитектуреисходнойверсииWindows.Haосновеэтогокурсабылонаписановтороеизданиеэтойкниги.Джейми,укоторойнастоящийталантдоходчивообъяснятьсложнейшиевещи,предоставиланамотдельныематериалы,атакжерядсхемииллюстраций.СпасибоДэйвуПроберту(DaveProbert)зато,чторазместилвсетинашичерновыематериалыдляраспространениясредирецензентоввнутриMicrosoft.БлагодаримДжонатанаСлавза(JonathanSloves)изAMD,спомощьюкоторогонампредоставилитестовыесистемыAMD64;ониоченьпомоглинамвнаписанииматериаловпо64-разряднойархитектуреивпереносерядаутилитSysinternalsнаплатформуx64.Наконец,мыхотимвыразитьблагодарностьследующимсотрудникамMicrosoftPressзаихвкладвэтукнигу.•РобинуВан-Штеенбергу(RobinvanSteenburgh),рецензентуиздательства,затерпениевработеснаминадэтимпроектом.•СаллиСтикни(SallyStickney),котораянапервыхпорахпо-прежнемубыларедакторомнашегопроекта,нопотомеезакрутилводоворотадминистративныхдел.Мыоченьскучалибезвас!•ВалериВулли(ValerieWoolley),котораяпринялабраздыправленияотСаллиисталанашимновымредакторомпроекта.Вызамечательнаяинетакаярезкая,какСалли!•РоджеруЛебланку(RogerLeBlanc),которыйодолелвсеглавыисумелсократитьвнихтекст,найтинесогласованностиивообщедовестинашурукописьдовысокихстандартовMicrosoftPress.ДэвидСоломониМаркРуссиновичсентябрь2004г.ВведениеЧетвертоеизданиеэтойкнигиориентированонаквалифицированныхспециалистов(программистов,разработчиковисистемныхадминистраторов),желающихразобратьсявпринципахвнутреннейработыосновныхкомпонентовоперационныхсистемMicrosoftWindows2000,MicrosoftWindowsXPиMicrosoftWindowsServer2003.Знаяих,разработчикисмогутприниматьболееэффективныерешениянаэтапахпроектированияприложенийдляплатформыWindows.Такиезнанияпомогутпрограммистамивотладке—приустранениисложныхпроблем.Информация,изложеннаявкниге,будеттакжеполезнасистемнымадминистраторам:пониманиетого,какустроенаиработаетоперационнаясистема,упроститимоптимизациюсвоихсистемиустранениенеполадоквслучаекаких-либосбоев.Прочитавэтукнигу,вылучшепоймете,какфункционируетWindowsипочемуонаведетсебяименнотак,анекак-тоиначе.СтруктуракнигиПервыедвеглавызакладываютфундамент,вводятерминыиконцепции,используемыевовсейкниге.Следующиетриглавыописываютключевыемеханизмыоперационнойсистемы.BследующихвосьмиглавахдетальнорассматриваютсябазовыекомпонентыWindows—процессы,потокиизадания,управлениепамятью,защита,подсистемаввода-вывода,управлениевнешнейпамятью,диспетчеркэша,файловыесистемыиподдержкасетей.Наконец,впоследнейглавепоясняется,какпроводитьанализаварийныхдамповпамяти.ИсториянаписаниякнигиЭточетвертоеизданиекниги,котораяизначальноназывалась«InsideWindowsNT»(MicrosoftPress,1992)ибыланаписанаХеленКастер(HelenCuster)ещедовыпускаMicrosoftWindowsNT3.1.ОнасталапервойкнигойпоWindowsNTипредставляласобойглубокийобзорархитектурыэтойсистемы.Второеиздание,«InsideWindowsNT»(MicrosoftPress,1998),былонаписаноДэвидомСоломоном.BнеговошлановаяинформацияпоWindowsNT4.0,асамакнигасталагораздоболееглубокой.Третьеиздание,«InsideWindows2000»(MicrosoftPress,2000),былоподготовленоДэвидомСоломономиМаркомРуссиновичем.Bнемпоявилосьмногоновыхтематическихразделов,втомчислепоэтапамзагрузкиизавершенияработысистемы,внутреннемуустройствусервисовиреестра,подрайверамфайловыхсистем,поддержкесетей,атакжепоновойфункциональностиядраWindows2000,напримермоделиWDM,PlugandPlay,WMI,шифрованию,TerminalServicesидр.ОсобенностичетвертогоизданияНовоеизданиедополненоинформациейобизмененияхвядре,которыебыливнесенывWindowsXPиWindowsServer2003,втомчислекасающихсяподдержки64-разрядныхсистем.Материалыдляэкспериментовтакжебылиобновлены,чтобыотразитьизменениявусовершенствованныхутилитахинаучитьваспользоватьсяновымиинструментами,которыхнебылонамоментподготовкитретьегоиздания.ТаккакотличияновыхверсийWindowsотWindows2000относительноневелики(посравнениюсразличиямимеждуWindowsNT4.0иWindows2000),основнаячастькнигиравноприменимакWindows2000,WindowsXPиWindowsServer2003.Поэтому,еслинеоговореноиное,всесказанноеотноситсяковсемтремверсиям.ИнструментыдляпроведенияэкспериментовДажебездоступакисходномукодусуществующиеинструментывродеотладчикаядрапозволяютмногоепрояснитьвовнутреннемустройствеWindows.Bтомместе,гдедлядемонстрациикакого-либоаспектаповеденияWindowsиспользуетсятотилиинойинструмент,воврезке«Эксперимент»даютсяинструкциипоегоприменению.Такиеврезкичастовстречаютсявкниге,имырекомендуемвампроделыватьэтиэкспериментывпроцессечтения:наглядноувидев,какведетсебяWindowsвконкретнойситуации,выгораздолучшеусвоитепрочитанныйматериал.Тематика,нерассматриваемаявкнигеWindows—большаяисложнаяоперационнаясистема.Нельзяобъятьнеобъятное,ипоэтомуосновноевниманиевкнигеуделяетсятолькобазовымсистемнымкомпонентам.Например,мынерассматриваемCOM+,инфраструктуруобъектно-ориентированногопрограммированияраспределенныхприложенийдляWindows,или.NETFramework,платформудляследующегопоколенияприложенийсуправляемымкодом.ПосколькунашакнигаовнутреннемустройствеWindows,анеотом,какпользоватьсяэтойоперационнойсистемой,программироватьдлянееилиадминистрироватьсистемы,созданныенаееоснове,выненайдетездесьникакихсведенийобиспользовании,программированиииконфигурированииWindows.ПодводныекамниBкнигеописываютсянедокументированныевнутренниеструктурыифункцииядра,архитектураиразличныеаспектывнутреннейработыWindows,ичастьтакихструктурифункцийможетизменитьсявследующемвыпускеэтойоперационнойсистемы.(Впрочем,внешниеинтерфейсывродеWindowsAPIвсегдасохраняютсовместимостьсаналогичнымиинтерфейсамивочередныхвыпусках.)Говоря«можетизмениться»,мынеимеемввиду,чтодеталиустройствасистемыобязательноизменятсявследующемвыпуске,алишьобращаемвниманиенато,чтодостоверностьинформациигарантируетсяисключительнодляданныхверсий.Любоепрограммноеобеспечение,использующеенедокументированныеинтерфейсы,можетперестатьработатьвбудущихверсияхWindows.Болеетого,такоепрограммноеобеспечение,еслионоработаетврежимеядра(как,например,драйверыустройств),можетпривестиккрахуболееновыхверсийWindows.ТехническаяподдержкаМыприложилимаксимумусилий,чтобынедопуститьнеточностейиошибоквкниге.Еслиувасвозникнуткакие-либопроблемыиливопросы,пожалуйста,обращайтесьпоадресам,указаннымвследующихдвухразделах.ОтавторовЭтакнигаотнюдьнесовершенна.Несомненновнейестькакие-тонеточности;можетбыть,мыупустиличто-товажное.Есливынайдетето,чтосчитаетеошибочным,илиесливысочтете,чтовкнигуследуетвключитьдополнительныйматериал,пожалуйста,пошлитесвоесообщениепоадресуwindowsinternals@sysinternals.com.Обновленияиисправлениябудутвыкладыватьсянастраницуwwwsysinternals.com/windowsinternals*ОтMicrosoftPressMicrosoftпубликуетисправленияккнигампоадресуhttp://www.microsoftcom/learning/support.ДляпрямогоподключениякMicrosoftLearningKnowledgeBaseивводазапросапопроблеме,скоторойвыстолкнулись,заходитенастраницуhttp://www.microsoft.comflearning/support/search.asp.Bпереводеучтеныисправления,опубликованныенаэтойWeb-странице,посостояниюна1июля2005года.—Прим.перев.ГЛABA1КонцепциииинструментыBэтойглавемыпознакомимвассосновнымиконцепциямиитерминамиоперационнойсистемыMicrosoftWindows,которыебудутиспользоватьсявпоследующихглавах,втомчислесWindowsAPI,процессами,потоками,виртуальнойпамятью,режимомядраипользовательскимрежимом,объектами,описателями(handles),защитой,реестром.Мытакжерасскажемобинструментах,спомощьюкоторыхвысможетеисследоватьвнутреннееустройствоWindows.Kнимотносятся,например,отладчикядра,оснасткаPerformanceиважнейшиеутилитыссайтаwww.sysinternals.com.Крометого,мыпоясним,какпользоватьсяWindowsDeviceDriverKit(DDK)иPlatformSoftwareDevelopmentKit(SDK)вкачествеисточникадополнительнойинформацииовнутреннемустройствеWindows.Выдолжныхорошопониматьвсе,чтонаписановэтойглаве,—востальнойчастикнигимыпредполагаемименнотак.ВерсииоперационныхсистемWindowsЭтакнигаохватываеттрипоследниеверсииоперационнойсистемыMicrosoftWindows,основанныенакодовойбазеWindowsNT:Windows2000,WindowsXP(32-и64-разрядныеверсии)иWindowsServer2003(32-и64-разрядныеверсии).Текстотноситсяковсемтремверсиям,еслинеоговореноиное.Bтаблице1–1перечисленывыпускикодовойбазыWindowsNT,номераверсийиназванияпродуктов.WindowsNTиWindows95ПрипервомвыпускеWindowsNTкомпанияMicrosoftдалаяснопонять,чтоэтодолгосрочнаязаменаWindows95(иеепоследующихвыпусков—Windows98иWindowsMillenniumEdition).ВотсписокнекоторыхархитектурныхразличийипреимуществWindowsNT(иеепоследующихвыпусков)надWindows95(иеепоследующимивыпусками).•WindowsNTподдерживаетмногопроцессорныесистемы,aWindows95—нет.•ФайловаясистемаWindowsNTподдерживаетсредствазащиты,напримеруправлениеизбирательнымдоступом(discretionaryaccesscontrol).BфайловойсистемеWindows95этогонет.•WindowsNT—полностью32-разрядная(атеперьи64-разрядная)операционнаясистема,внейнет16-разрядногокода,крометого,которыйпредназначендлявыполнения16-разрядныхWindows-приложений.Windows95содержитбольшойобъемстарого16-разрядногокодаизпредшествующихоперационныхсистем—Windows3.1nMS-DOS.•WindowsNTполностьюреентерабельна,амногиечастиWindows95нереентерабельны(восновномэтокасается16-разрядногокода,взятогоизWindows3.1).Большинствофункций,связанныхсграфикойиуправлениемокнами(GDIиUSER),включаютименнонереентерабельныйкод.Когда32-разрядноеприложениевWindows95пытаетсявызватьсистемныйсервис,реализованныйкакнереентерабельный16-разрядныйкод,онодолжносначалаполучитьобщесистемнуюблокировку(илимьютекс),чтобыпредотвратитьвходдругихпотоковвнереентерабельнуюкодовуюбазу.Ещехуже,что16-разрядноеприложениеудерживаеттакуюблокировкувтечениевсеговременисвоеговыполнения.Bитоге,хотяядроWindows95содержит32-разрядныйпланировщиксподдержкоймно-гопоточностиивытесняющеймногозадачности,приложениячастоработаюткакоднопоточныеиз-затого,чтобольшаячастьсистемыреализованакакнереентерабельныйкод.•WindowsNTпозволяетвыполнять16-разрядныеWindows-приложенияввыделенномадресномпространстве,aWindows95всегдавыполняеттакиеприложениявобщемадресномпространстве,вкоторомонимогутнавредитьдругдругуипривестикзависаниюсистемы.•Разделяемая(общая)памятьпроцессавWindowsNTвиднатолькотемпроцессам,которыеимеютпроекциюнаодинитотжеблокразделяемойпамяти.BWindows95всяобщаяпамятьвиднаидоступнадлязаписивсемпроцессам.Такимобразом,любойпроцессможетчто-тозаписатьиповредитькакие-тоданныевобщейпамяти,используемыедругимипроцессами.•Некоторыекритическиважныестраницыпамяти,занимаемыеоперационнойсистемойWindows95,доступныдлязаписиизпользовательскогорежима,азначит,обычноеприложениеможетповредитьсодержимоеэтихстраниципривестиккрахусистемы.Единственное,чтоумеетWindows95ичегоникогданесмогутделатьоперационныесистемынаосновеWindowsNT,—выполнятьвсестарыепрограммыдляMS-DOSиWindows3.1(аименнопрограммы,требующиепрямогодоступакоборудованию),атакже16-разрядныедрайверыустройствMS-DOS.ЕслиоднойизосновныхцелейразработкиWindows95была100%-ясовместимостьсMS-DOSиWindows3.1,тоисходнойцельюразработкиWindowsNT—возможностьвыполнениябольшинствасуществующих16-разрядныхприложенийприусловиисохраненияцелостностиинадежностисистемы.БазовыеконцепцииитерминыBкнигебудутчастовстречатьсяссылкинаконцепциииструктуры,скоторыминекоторыечитатели,возможно,незнакомы.Здесьмыопределимсясиспользуемойвдальнейшемтерминологией.WindowsAPIЭтосистемныйинтерфейспрограммированиявсемействеоперационныхсистемMicrosoftWindows,включаяWindows2000,WindowsXP,WindowsServer2003,Windows95,Windows98,WindowsMillenniumEdition(Me)иWindowsCE.КаждаяоперационнаясистемареализуетразноеподмножествоWindowsAPI.Windows95,Windows98,WindowsMeиWindowsCEвэтойкнигенерассматриваются.ПРИМЕЧАНИЕWindowsAPIописываетсявдокументацииPlatformSoftwareDevelopmentKit(SDK).(См.раздел«PlatformSoftwareDevelopmentKit(SDK)»далеевэтойглаве.)Этудокументациюможнобесплатнопросмотретьнасайтеmsdn.microsoft.com.ОнатакжепоставляетсясMicrosoftDeveloperNetwork(MSDN)всехуровнейподписки.(MSDN—этопрограммаMicrosoftдляподдержкиразработчиков.Подробностисм.насайтеmsdn.microsqft.com.)Отличноеописаниетого,какпрограммироватьсиспользованиембазовогоWindowsAPI,см.вчетвертомизданиикнигиДжеффриРихтераJeffreyRichter)«MicrosoftWindowsдляпрофессионалов»(РусскаяРедакция,2000).Допоявления64-разрядныхверсийWindowsXPиWindowsServer2003интерфейспрограммирования32-разрядныхверсийоперационныхсистемWindowsназывалсяWin32API,чтобыотличатьегоотисходного1разрядногоWindowsAPI.Bэтойкнигетермин«WindowsAPI»относитсяк32-разрядномуинтерфейсупрограммированияWindows2000,атакжек32-и64разрядныминтерфейсампрограммированияWindowsXPиWindowsServer2003.WindowsAPIвключаеттысячивызываемыхфункций,которыесгруппированывследующиеосновныекатегории:•базовыесервисы(BaseServices);•сервисыкомпонентов(ComponentServices);•сервисыпользовательскогоинтерфейса(UserInterfaceServices);•сервисыграфикиимультимедиа(GraphicsandMultimediaServices);•коммуникационноевзаимодействиеисовместнаяработа(MessagingandCollaboration);•сети(Networking);•Webсервисы(WebServices).Основноевниманиевнашейкнигеуделяетсявнутреннемуустройствуключевыхбазовыхсервисов,вчастностиподдержкипроцессовипотоков(threads),управленияпамятью,вводаыводаизащиты.Какнасчет.NETиWinFXETFrameworkсостоитизбиблиотекиклассов,называемойFrameworkClassLibrary(FCL),иобщеязыковойисполняющейсреды(CommonLanguageRuntime,CLR),котораяпредоставляетсредудлявыполненияуправляемогокодастакимивозможностями,каккомпиляцияпотребованию(justimecompilation,JITcompilation),верификациятипов,сбормусораизащитапоправамдоступакода(codeaccesssecurity).БлагодаряэтомуCLRсоздаетсредуразработки,котораяповышаетпродуктивностьтрудапрограммистовиуменьшаетвероятностьпоявленияраспространенныхошибокпрограммирования.Отличноеописание.NETFrameworkиеебазовойархитектурысм.вкнигеДжеффриРихтера«ПрограммированиенаплатформеMicrosoft.NETFramework»(РусскаяРедакция,2003).CLRреализованакакклассическийСОМсервер,кодкоторойхранитсявстандартнойWindowsDLLпользовательскогорежима.Фактическивсекомпоненты.NETFrameworkреализованыкакстандартныеWindowsDLLпользовательскогорежима,занимающиеуровеньповерхнеуправляемыхфункцийWindowsAPL(Никакиекомпоненты.NETFrameworkнеработаютврежимеядра.)Haрис.1показанывзаимосвязиэтихкомпонентов«новыйWindowsAPI».Эторезультатэволюционногоразвития.NETFramework,котораябудетпоставлятьсясверсиейWindowsподкодовымназвание«Longhorn»,следующимвыпускомWindows.WinFXтакжеможноустановитьвWindowsXPиWindowsServer2003.WinFXобразуетфундаментдляприложенийследующегопоколения,создаваемыхдляоперационнойсистемыWindows.ИсториясозданияWin32APIИнтересно,чтопоначалуWin32нерассматривалсякакинтерфейспрограммированиядляMicrosoftWindowsNT.ПосколькупроектWindowsNTначиналсякакзаменаOS/2версии2,основныминтерфейсомпрограммированиябыл32азрядныйOS/2PresentationManagerAPI.ОднакогодспустянарынкепоявиласьMicrosoftWindows3.0,быстроставшаяоченьпопулярной.BрезультатеMicrosoftсменилакурсиперенацелилапроектWindowsNTнабудущуюзаменусемействапродуктовWindows,анеOS/2.ВотнаэтомтоперепутьеивсталвопрососозданииWindowsAPIоэтогоWindowsAPIсуществовалтолькокак16разрядныйинтерфейс.ХотявWindowsAPIдолжнобылопоявитьсямногоновыхфункций,отсутствующихвWindows3.1,MicrosoftрешиласделатьновыйPIповозможностисовместимымсименамифункций,семантикойитипамиданныхв16разрядномWindowsAPI,чтобымаксимальнооблегчитьбремяпереносасуществующих16разрядныхWindowsприложенийвWindowsNTПоэтомутот,кто,впервыеглядянаWindowsAPI,удивляется,почемумногиеименаиинтерфейсыфункцийкажутсяпротиворечивыми,долженучитывать,чтооднойизпричинтакойпротиворечивостибылостремлениесделатьWindowsAPIсовместимымсостарым16разряднымWindowsAPI.Сервисы,функцииипроцедурыНесколькотерминоввдокументацииWindowsдляпользователейипрограммистовимеетразныйсмыслвразныхконтекстах.Например,понятие«сервис»(service)можетотноситьсяквызываемойфункцииоперационнойсистемы,драйверуустройстваилисерверномупроцессу(впоследнемслучаесервисчастоназываютслужбой).Нижепоказано,чтоозначаютподобныетерминывэтойкниге.•ФункцииWindowsAPIДокументированные,вызываемыеподпрограммывWindowsAPI,напримерCreateProcess,CreateFileиGetMessage.•Неуправляемые(«родные»)системныесервисы(илиисполняемыесистемныесервисы)Недокументированныенизкоуровневыесервисыоперационнойсистемы,которыеможновызыватьвпользовательскомрежиме.Так,NtCreateProcessэтовнутрисистемныйсервис,вызываемыйWindowsфункциейCreateProcessприсозданииновогопроцесса(Определениенеуправляемыхфункцийсм.вразделе«Диспетчеризациясистемныхсервисов»главы3.)•Функции(илипроцедуры)ядраПодпрограммывнутриоперационнойсистемыWindows,которыеможновызыватьтольковрежимеядра(определениемыдадимчутьпозже).Например,ExAllocatePoolпроцедура,вызываемаядрайверамиустройствдлявыделенияпамятиизсистемныхкуч(динамическираспределяемыхобластейпамяти)Windows.•WindowsсервисыПроцессы,запускаемыедиспетчеромуправлениясервисамивWindows(ХотявдокументациинареестрдрайверыустройствWindowsопределяютсякаксервисы,мынепользуемсятакимтерминомвэтойкниге.)Например,сервисTaskSchedulerвыполняетсявпроцессепользовательскогорежима,которыйподдерживаеткомандуat(аналогичнуюUNIXкомандеatилиcron).•DLL(динамическиподключаемаябиблиотека)Наборвызываемыхподпрограмм,включенныхводиндвоичныйфайл,которыйприложения,использующиеэтиподпрограммы,могутдинамическизагружатьвовремясвоеговыполнения.BкачествепримераможнопривестимодулиMsvcrt.dll(библиотекаисполняющейподсистемыC)иKernel32.dll(однаизбиблиотекподсистемыWindowsAPI).DLLактивноиспользуютсякомпонентамииприложениямиWindowsпользовательскогорежима.ПреимуществоDLLнадстатическимибиблиотекамивтом,чтоприложениямогутразделятьDLLмодули,aWindowsгарантирует,чтовпамятибудетнаходитьсялишьпоодномуэкземпляруиспользуемыхDLL.Процессы,потокиизаданияХотянапервыйвзглядкажется,чтопрограммаипроцесспонятияпрактическиодинаковые,онифундаментальноотличаютсядруготдруга.Программапредставляетсобойстатическийнаборкоманд,апроцесэтоконтейнердлянабораресурсов,используемыхпривыполненииэкземплярапрограммы.HaсамомвысокомуровнеабстракциипроцессвWindowsвключаетследующее:•закрытоевиртуальноеадресноепространстводиапазонадресоввиртуальнойпамяти,которымможетпользоватьсяпроцесс;•исполняемуюпрограммуначальныйкодиданные,проецируемыенавиртуальноеадресноепространствопроцесса;•списокоткрытыхописателей(handles)различныхсистемныхресурсовсемафоров,коммуникационныхпортов,файловидругихобъектов,доступныхвсемпотокамвданномпроцессе;•контекстзащиты(securitycontext),называемыймаркеромдоступа(accesstoken)иидентифицирующийпользователя,группыбезопасностиипривилегии,сопоставленныеспроцессом;•уникальныйидентификаторпроцесса(вовнутрисистемнойтерминологииназываемыйидентификаторомклиента);•минимумодинпоток.Каждыйпроцесстакжеуказываетнасвойродительскийпроцесс(процесссоздатель).Однако,еслиродительсуществует,этаинформациянеобновляется.Поэтомуестьвероятность,чтонекийпроцессуказываетнауженесуществующегородителя.Этонесоздаетникакойпроблемы,посколькуниктонеполагаетсянаналичиетакойинформации.Следующийэкспериментиллюстрируетданныйслучай.ЭКСПЕРИМЕНТ:просмотрдеревапроцессовБольшинствоутилитнеотображаеттакойуникальныйатрибут,какидентификаторродительскогопроцесса.ЗначениеэтогоатрибутаможнополучитьпрограммноилиспомощьюоснасткиPerformance,запросивзначениесчетчикаCreatingProcessID[Код(ID)создавшегопроцесса].ДеревопроцессовпоказываетсяутилитойTlist.exe(изWindowsDebuggingTools),есливыуказываетеключ/t.Вотобразецвыводаэтойкоманды:Взаимоотношенияпроцессов(дочернийродительский)Tlistпоказываетотступами.Именапроцессов,родительскиепроцессыкоторыхнаданныймоментзавершились,выравниваютсяполевомукраю,потомучтоустановитьихродственныесвязиневозможнодажееслипроцессыпрапредкиещесуществуют.Windowsсохраняетидентификатортолькородительскогопроцесса,такчтопроследитьегосоздателянельзя.Чтобыубедитьсявэтом,выполнитеследующиеоперации.1.Откройтеокнокоманднойстроки.2.Наберитеstartcmdдлязапускавторогоокнакоманднойстроки.3.Откройтедиспетчерзадач.4.Переключитесьнавтороеокнокоманднойстроки.5.ВведитеmspaintдлязапускаMicrosoftPaint.6.Щелкнитевтороеокнокоманднойстроки.7.Введитеexit(Заметьте,чтоокноPaintостается.)8.Переключитесьвдиспетчерзадач.9.ОткройтееговкладкуApplications(Приложения).10.ЩелкнитеправойкнопкоймышизадачуCommandPrompt(Команднаястрока)ивыберитеGoToProcess(Перейтикпроцессам).11.ЩелкнитепроцессCmd.exe,выделенныйсерымцветом.12.Щелкнувправойкнопкоймыши,выберитекомандуEndProcessTree(Завершитьдеревопроцессов).13.BокнеTaskManagerWarning(Предупреждениедиспетчеразадач)щелкнитеYes(Да).Первоеокнокоманднойстрокиисчезнет,новыпопрежнемусможетенаблюдатьокноPaint,таккаконоявляетсявнукомпервогоиззавершенныхпроцессовCommandPrompt.Aпосколькувторой(родительскийпроцессPaint)тожезавершен,связьмеждуродителемивнукомпотеряна.Дляпросмотра(имодификации)процессовиинформации,связаннойсними,существуетцелыйнаборутилит.Следующиеэкспериментыдемонстрируют,какполучитьтуилиинуюинформациюопроцессеспомощьюнекоторыхизэтихутилит.ОнивключаютсянепосредственновсамуWindows,атакжевWindowsSupportTools,WindowsDebuggingTools,ресурсыWindowsиPlatformSDK.Многиеизэтихутилитвыводятперекрывающиесяподмножестваинформацииобазовыхпроцессахипотоках,иногдаидентифицируемыепоразнымименам.Вероятно,наиболееширокоприменяемаяутилитадляанализаактивностипроцессовTaskManager(Диспетчерзадач(Любопытно,чтовядреWindowsнеттакогопонятия,какзадача,такчтоTaskManagerнасамомделеявляетсяинструментомдляуправленияпроцессами.)Следующийэкспериментпоказываетразницумеждутем,чтоTaskManagerперечисляеткакприложенияипроцессы.ЭКСПЕРИМЕНТ:просмотринформацииопроцессахчерездиспетчерзадачДиспетчерзадачWindowsотображаетсписоквыполняемыхвсистемепроцессов.Егоможнозапуститьтремяспособами:1)нажавклавишиCtrl+Shift+Esc;2)щелкнувпанельзадачправойкнопкоймышиивыбравкомандуTaskManager(Диспетчерзадач);3)нажавклавишиCtrl+Alt+Del.ПослезапускадиспетчеразадачоткройтевкладкуProcesses(Процессы).Заметьте,чтопроцессыидентифицируютсяпоимениобраза,экземплярамикоторогоониявляются.BотличиеотнекоторыхобъектоввWindowsпроцессамнельзяприсваиватьглобальныеимена.ДляпросмотраболееподробныхсведенийвыберитеизменюView(Вид)командуSelectColumns(Выбратьстолбцы)иукажите,какаядополнительнаяинформациявасинтересует.ЕсливкладкаProcessesокнадиспетчеразадачсовсейочевидностьюпо 4 дня назад
2 AbrakaDaniel AbrakaDanielhttp://apero.ruГлавнаяИграйонлайн!Конкурсоткрыт!СообщенияУчастникиМагазин(2)Создайигру!ДокументацияЗаданияiFiction.ruМыВКонтактеПрофильПривет,AbrakaDanielСейчасвонлайнеAbrakaDaniel(Vetal123)и20гостей.ПартнерыАперо:"Коллекционер"-СтрашныйквествЧелнах!Вигреилинасайтеошибка?ВыделитекстижмисюдаилиCtrl+EnterРазработчикискажутспасибо:)Навигация:http://apero.ru/Участники/Vetal123Vetal123-страницаучастникааперо-сообществаПрофильнеактивирован.Еслиэтотвойпрофиль-проверьe-mail,указанныйприрегистрации,иперейдипоссылкедляактивации.Последниекомментарии:1AbrakaDanielhttp://apero.ruГлавнаяИграйонлайн!Конкурсоткрыт!СообщенияУчастникиМагазин(2)Создайигру!ДокументацияЗаданияiFiction.ruМыВКонтактеПрофильПривет,AbrakaDanielСейчасвонлайнеAbrakaDaniel(Vetal123)и20гостей.ПартнерыАперо:"Коллекционер"-СтрашныйквествЧелнах!Вигреилинасайтеошибка?ВыделитекстижмисюдаилиCtrl+EnterРазработчикискажутспасибо:)Навигация:http://apero.ru/Участники/Vetal123Vetal123-страницаучастникааперо-сообществаПрофильнеактивирован.Еслиэтотвойпрофиль-проверьe-mail,указанныйприрегистрации,иперейдипоссылкедляактивации.Последниекомментарии:1AbrakaDanielhttp://apero.ruГлавнаяИграйонлайн!Конкурсоткрыт!СообщенияУчастникиМагазин(2)Создайигру!ДокументацияЗаданияiFiction.ruМыВКонтактеПрофильПривет,AbrakaDanielСейчасвонлайнеAbrakaDaniel(Vetal123)и20гостей.ПартнерыАперо:"Коллекционер"-СтрашныйквествЧелнах!Вигреилинасайтеошибка?ВыделитекстижмисюдаилиCtrl+EnterРазработчикискажутспасибо:)Навигация:http://apero.ru/Участники/Vetal123Vetal123-страницаучастникааперо-сообществаПрофильнеактивирован.Еслиэтотвойпрофиль-проверьe-mail,указанныйприрегистрации,иперейдипоссылкедляактивации.Последниекомментарии:1AbrakaDanielАннотация:КнигапосвященавнутреннемуустройствуиалгоритмамработыосновныхкомпонентовоперационнойсистемыMicrosoftWindows—WindowsServer2003,WindowsXPиWindows2000—ифайловойсистемыNTFS.Детальнорассмотренысистемныемеханизмы:диспетчеризацияловушекипрерываний,DPC,APC,LPC,RPC,синхронизация,системныерабочиепотоки,глобальныефлагиидр.Такжеописываютсявсеэтапызагрузкиоперационнойсистемыизавершенияееработы.Bчетвертомизданиикнигибольшевниманияуделяетсяглубокомуанализуиустранениюпроблем,из-закоторыхпроисходиткрахоперационнойсистемыилииз-закоторыхеенеудаетсязагрузить.Крометого,рассматриваютсядеталиреализацииподдержкиаппаратныхплатформAMDx64иIntelIA64.Книгасостоитиз14глав,словарятерминовипредметногоуказателя.Книгапредназначенасистемнымадминистраторам,разработчикамсерьезныхприложенийивсем,ктохочетпонять,какустроенаоперационнаясистемаWindows.Названиявсехкоманд,диалоговыхоконидругихинтерфейсныхэлементовоперационнойсистемыприведеныкакнаанглийскомязыке,такинарусском.ВерсияFb2редакции—1.5.Обошибкахпросьбасообщатьпоадресу—general2008@ukr.net.---------------------------------------------М.Руссинович,Д.СоломонВнутреннееустройствоMicrosoftWindows(главы1–4)WindowsServer™2003,WindowsXPиWindows20004-еизданиеПредысторияЯвновьпризнателенДэвидуСоломону(DavidSolomon)иМаркуРуссиновичу(MarkRussinovich)зато,чтоонипредоставилимневозможностьсказатьнесколькословоновомизданииихкниги«ВнутреннееустройствоMicrosoftWindows».Прошлоужеболеетрехлетсмоментавыходапоследнегоизданияэтойкниги,изаэтовремянасветпоявилисьдвавыпускаоперационнойсистемыWindows—оченьзначимыеобновленияклиентскойисервернойсистем.Передавторамистоялидвезадачи,которыепостоянноусложняются:отслеживаниеэволюционногоразвитиясистемыMicrosoftWindowsNTидокументированиетого,какменяласьреализацияеекомпонентоввкаждойверсии.Bэтомсмыслеавторыпроделалипростовыдающуюсяработу.(Слеванаправо)ДэвидСоломон,ДэвидКатлериМаркРуссиновичВпервыеяпознакомилсясДэвидомСоломоном,когдаемубыловсего16лет,аяработалвDigitalEquipmentCorporationнадоперационнойсистемойVMSдляVAX.Cтехпоронучаствовалвразработкеоперационныхсистем,атакжепреподавалвэтойобласти.CМаркомРуссиновичемяпознакомилсяпозже,ноужезадолгодоэтогобылнемалонаслышаноегоглубокихпознанияхвобластиоперационныхсистем.BчислеегозаслугверсияфайловойсистемыNTFS,которуюонзаставилработатьвMicrosoftWindows98,и«живой»отладчикядраWindows,позволяющийзаглянутьвнутрьсистемыWindowsвпроцессееевыполнения.ИстокиWindowsNTвосходяткоктябрю1988года,когдабылорешеносоздатьпереносимуюоперационнуюсистему,совместимуюсOS/2,поддерживающуюPOSIXимногопроцессорнуюобработку,обладающуювысокойзащищенностью,надежностьюиинтегрированнымисредствамиработывсетях.CприходомWindows3.0иееколоссальнымуспехомзаявленныецелинесколькоизменились:совместимостьсOS/2былаперенесенасуровнявсейсистемынауровеньотдельнойподсистемы.Поначалумыполагали,чтосумеемсоздатьWindowsNTзапарулет,новдействительностиееперваяверсиявышлалишьчерезчетыресполовинойгода—летом1993-го.ЭтаверсияподдерживалапроцессорыInteli386,Inteli486иMIPSR4000.ШестьнедельспустямыввелиподдержкуидляпроцессоровDigitalAlpha.ПерваяверсияWindowsNTполучиласьболеегромоздкойимедленной,чеможидалось,такчтоследующейвехойсталпроектDaytona(такназываетсяавтострадавоФлориде).Главнойцельювэтойверсиибылоуменьшениеразмерасистемы,повышениееебыстродействияи,разумеется,надежности.ЧерезполгодапослевыпускаWindowsNT3.5осенью1994-гомыподготовилиWindowsNT3.51,котораяпредставляласобойобновленнуюверсиюсдополнительнойподдержкойпроцессораIBMPowerPC.ТолчкомксозданиюследующейверсииWindowsNTсталожеланиесделатьпользовательскийинтерфейс,совместимыйсWindows95,ивключитьтехнологииCairo,уженаходившиесявразработкепарулет.Haсозданиеэтойсистемыушлоещедвагода,илетом1996годабылапредставленаWindowsNT4.0.НазваниеследующейверсииNTбылоизмененонаWindows2000.Онасталапоследнейсистемой,длякоторойодновременновыпускалиськлиентскаяисервернаяверсии.Windows2000былапостроенанатойжетехнологииWindowsNT,чтоипредыдущиеверсии,нообладалановойважнойфункциональностью,поддерживая,вчастности,ActiveDirectory.HaразработкуWindows2000ушлотрисполовинойгода,инатотпериодонабыласамойоптимизированнойинаиболеетщательнопротестированнойверсиейтехнологииWindowsNTWindows2000сталакульминациейболеечемодиннадцатилетнихразработок,реализованныхначетырехархитектурах.BконцеразработкиWindows2000мыприступиликработенадамбициознымпланомреализацииновыхверсийклиентскойисервернойсистем,которыедолжныбылипредоставитьновые,болеесовершенныевозможностипотребителямиулучшитьхарактеристикисерверов.Hoпотомсталоясно,чтореализациясерверныхсредствпривелабыкзадержкевреализацииклиентских,ипоэтомубылорешеноразделитьвыпуски.Bавгусте2001годанасветпоявилисьWindowsXPProfessionalиWindowsXPHomeEdition,aчерезгодснебольшим,вмарте2003годабылавыпущенаMicrosoftWindowsServer2003.ПомимоархитектурыIntelx86,этисистемыподдерживалиIntelIA64,благодарячемуWindowsNTвпервыевышланастезю64-разрядныхвычислений.Этакнигаединственная,гдетакглубокоиполнорассмотренывнутренниеструктурыипринципыфункционированияWindowsXPиWindowsServer2003.Крометого,онапредлагаетзаглянутьвбудущее—переводWindowsна64-разрядные«рельсы»,т.е.наееподдержкуархитектурx64(AMD64)иIntelEM64T,объявленныхAMDв2003годуиIntelвфеврале2004годасоответственно.Выпускклиентскойисервернойверсийсполнойподдержкойx64запланированнапервуюполовину2005года,ивэтойкнигесодержитсямассаинформацииовнутреннихдеталяхреализациих64-системы.Архитектурах64—этоначалоновойэрыдляWindowsNTвтотмомент,когдавремяархитектурыx86подходиткконцу.Архитектураx64обеспечиваетсовместимостьс32-разряднойх86-платформойипредоставляет64-разряднуюадресациюдлянаиболеетребовательных,совершенноновыхприложений.Этопозволитсохранитьинвестициив32-разрядноепрограммноеобеспечение,втожевремявдохнувновуюжизньвWindowsNTнаближайшеедесятилетиеилидаженаболеедлительныйпериод.ХотяназваниеNT-системызапоследниенескольколетнеоднократноменялось,онапо-прежнемуполностьюосновананаисходнойкодовойбазеWindowsNT.Hoвремябежит,появляютсяновыетехнологии,иреализациямногихвнутреннихкомпонентовифункцийзначительноизменилась.Авторыпроделаливнушительнуюработу,собравстолькодетальнойинформацииокодовойбазеWindowsNTиеереализацияхвразныхвыпускахнаразныхплатформах,атакжесоздавпримерыиутилиты,которыепомогаютчитателюразобратьсявтом,какработаюткомпонентыиподсистемыWindows.Экземплярэтойкнигидолженлежатьнастолеукаждогоразработчикасерьезногопрограммногообеспечения.ДэвидH.Катлер,заслуженныйстаршийинженеркорпорацииMicrosoftПредисловиеMicrosoftWindowsбылачастьюмоейжизницелых14лет.Заэтовремя—отверсиикверсии—нашаоперационнаясистемаразвиваласьвширьивглубь.СегодняработанадWindows—одинизсамыхважныхисложныхпроектоввмире.BвыпускеWindowsучаствуютболее5000инженеров.СредипользователейWindowsестьпредставителиужепочтивсехкультур,онаиспользуетсякакнакрупныхпредприятиях,такималенькимидетьми.ПользователиWindowsпостояннотребуютеесовершенствованияпрактическивовсехсферах—отэффективнойработынакрупнейшихсерверахдоприменениявдошкольномобучении.Windowsпоставляетсявсамыхразныхипостасях—отвстраиваемыхверсийивыпусковдлямедиа-центровдоредакцийдляцентровобработкиданных.ВсеэтипродуктыопираютсянаодниитежебазовыекомпонентыWindows,которыеразвиваютсяисовершенствуютсявкаждойновойверсии.ЭтофундаментальнаякнигаовнутреннемустройствебазовыхкомпонентовWindows.ЕсливыхотитекакможнобыстрееосвоитьпринципывнутреннейработыWindows,тогдаэтакнигадлявас.Освоениевсехчастейстольосновательногопродукта—задачаустрашающая.Hoесливыначнетесбазовыхконцепцийсистемы,сложитьфрагментыголоволомкивоединобудетгораздолегче.CэволюциейсамойWindowsразвиваетсяиэтакнига—сейчаспубликуетсяеечетвертоеиздание.МыужедавноиспользуемеедляобученияновыхсотрудниковMicrosoft,такчтопредлагаемыевамматериалыпроверенынапрактике.Есливывродеменя,значит,вамтоженравитсяразбиратьсявтом,какустроенывещи.Чтениекнижектипа«какиспользоватьто-тоито-то»меняникогданеудовлетворяло.Когдапонимаешь,какименноустроенавещь,пользуешьсяеюгораздоэффективнееи,честноговоря,сбольшимудовольствием.ЕсливасинтересуетWindows«сизнанки»,вывыбралиподходящуюкнигу.ДэвидиМаркпроделалипревосходнуюработу,написавкнигуотехнической«изнанке»Windows.Aинструменты,которыеонипредлагаютвам,—отличноесредстводлясамостоятельногообученияидиагностики.Прочитавэтукнигу,выбудетегораздолучшепонимать,каквзаимодействуютмеждусобойразличныекомпонентыиподсистемы,какиеусовершенствованиявнесенывновуюверсиюикаквыжатьизнихмаксимумвозможного.Этобылдолгийпуть—ионвсеещепродолжается.Такчтооткрывайтекнигу,азаодноикапот,подкоторымбьетсясердцеоднойизсамыхпотрясающихоперационныхсистем.ДжимОлчин,вице-президентгруппыплатформкорпорацииMicrosoftБлагодарностиBпервуюочередьмыхотимособопоблагодаритьследующихлюдей.•ДэйваКатлера(DaveCutler),заслуженногостаршегоинженераипервогоархитектораMicrosoftWindowsNT.ДэйвразрешилДэвидуСоломону(DavidSolomon)доступкисходномукодуивсяческиподдерживалегопреподавательскуюдеятельность,посвященнуюобъяснениюдеталейвнутреннегоустройстваWindowsNT,атакжеегоработунадвторымитретьимизданиемкниги.Помиморецензированияглавыпопроцессамипотокам,ДэйвответилнамассувопросовобархитектуреядраинаписалобисториисозданияWindowsдлянашейкниги.•ДжимаОлчинаJimAllchin),нашегоглавногоспонсора,—запредисловиекэтойкнигеизаотстаиваниеинтересовнашегоделавMicrosoft.•РобаШорта(RobShort),вице-президента,которыйпозаботилсяотом,чтобынампредоставилиресурсыидоступкнужнымлюдям.МытакжевыражаемпризнательностьдвумразработчикамизотделаWindowsзаподготовкуновыхматериалов,включенныхвэтоиздание:•АдриануМаринеску(AdrianMarinescu),которыйнаписалзаметноразросшийсяразделподиспетчерукучвглаве,гдерассматриваетсядиспетчерпамяти.•СамеруАрафеху(SamerArafeh),которыйпредоставилматериалыпоWow64.Спасибонашемустаромуприятелю,ДжеффриРихтеруJeffreyRichter),скоторыммычастовместеобедаем,заврезку«Какнасчет.NETиWinFX?»вглаве1изапостоянноенапоминаниеотом,какмалолюдей,по-настоящемуинтересующихсятем,очеммыговоримвсвоейкниге.Bэтойкнигенебылобытакойглубиныиточностиизложениятехническихсведенийбезподдержки,замечанийипредложенийключевыхчленовкомандыразработчиковMicrosoftWindows.Вотэтилюди:Былиидругие,ктоотвечалнанашивопросывкоридорахиликафетериях,—еслимываспропустили,пожалуйста,проститенас!МытакжевыражаемблагодарностьДжеймиХанраханJamieHanrahan)изAziusDeveloperTraining(www.azius.com),котораявсоавторствесДэвидомподготовилаучебныйкурсповнутреннейархитектуреисходнойверсииWindows.Haосновеэтогокурсабылонаписановтороеизданиеэтойкниги.Джейми,укоторойнастоящийталантдоходчивообъяснятьсложнейшиевещи,предоставиланамотдельныематериалы,атакжерядсхемииллюстраций.СпасибоДэйвуПроберту(DaveProbert)зато,чторазместилвсетинашичерновыематериалыдляраспространениясредирецензентоввнутриMicrosoft.БлагодаримДжонатанаСлавза(JonathanSloves)изAMD,спомощьюкоторогонампредоставилитестовыесистемыAMD64;ониоченьпомоглинамвнаписанииматериаловпо64-разряднойархитектуреивпереносерядаутилитSysinternalsнаплатформуx64.Наконец,мыхотимвыразитьблагодарностьследующимсотрудникамMicrosoftPressзаихвкладвэтукнигу.•РобинуВан-Штеенбергу(RobinvanSteenburgh),рецензентуиздательства,затерпениевработеснаминадэтимпроектом.•СаллиСтикни(SallyStickney),котораянапервыхпорахпо-прежнемубыларедакторомнашегопроекта,нопотомеезакрутилводоворотадминистративныхдел.Мыоченьскучалибезвас!•ВалериВулли(ValerieWoolley),котораяпринялабраздыправленияотСаллиисталанашимновымредакторомпроекта.Вызамечательнаяинетакаярезкая,какСалли!•РоджеруЛебланку(RogerLeBlanc),которыйодолелвсеглавыисумелсократитьвнихтекст,найтинесогласованностиивообщедовестинашурукописьдовысокихстандартовMicrosoftPress.ДэвидСоломониМаркРуссиновичсентябрь2004г.ВведениеЧетвертоеизданиеэтойкнигиориентированонаквалифицированныхспециалистов(программистов,разработчиковисистемныхадминистраторов),желающихразобратьсявпринципахвнутреннейработыосновныхкомпонентовоперационныхсистемMicrosoftWindows2000,MicrosoftWindowsXPиMicrosoftWindowsServer2003.Знаяих,разработчикисмогутприниматьболееэффективныерешениянаэтапахпроектированияприложенийдляплатформыWindows.Такиезнанияпомогутпрограммистамивотладке—приустранениисложныхпроблем.Информация,изложеннаявкниге,будеттакжеполезнасистемнымадминистраторам:пониманиетого,какустроенаиработаетоперационнаясистема,упроститимоптимизациюсвоихсистемиустранениенеполадоквслучаекаких-либосбоев.Прочитавэтукнигу,вылучшепоймете,какфункционируетWindowsипочемуонаведетсебяименнотак,анекак-тоиначе.СтруктуракнигиПервыедвеглавызакладываютфундамент,вводятерминыиконцепции,используемыевовсейкниге.Следующиетриглавыописываютключевыемеханизмыоперационнойсистемы.BследующихвосьмиглавахдетальнорассматриваютсябазовыекомпонентыWindows—процессы,потокиизадания,управлениепамятью,защита,подсистемаввода-вывода,управлениевнешнейпамятью,диспетчеркэша,файловыесистемыиподдержкасетей.Наконец,впоследнейглавепоясняется,какпроводитьанализаварийныхдамповпамяти.ИсториянаписаниякнигиЭточетвертоеизданиекниги,котораяизначальноназывалась«InsideWindowsNT»(MicrosoftPress,1992)ибыланаписанаХеленКастер(HelenCuster)ещедовыпускаMicrosoftWindowsNT3.1.ОнасталапервойкнигойпоWindowsNTипредставляласобойглубокийобзорархитектурыэтойсистемы.Второеиздание,«InsideWindowsNT»(MicrosoftPress,1998),былонаписаноДэвидомСоломоном.BнеговошлановаяинформацияпоWindowsNT4.0,асамакнигасталагораздоболееглубокой.Третьеиздание,«InsideWindows2000»(MicrosoftPress,2000),былоподготовленоДэвидомСоломономиМаркомРуссиновичем.Bнемпоявилосьмногоновыхтематическихразделов,втомчислепоэтапамзагрузкиизавершенияработысистемы,внутреннемуустройствусервисовиреестра,подрайверамфайловыхсистем,поддержкесетей,атакжепоновойфункциональностиядраWindows2000,напримермоделиWDM,PlugandPlay,WMI,шифрованию,TerminalServicesидр.ОсобенностичетвертогоизданияНовоеизданиедополненоинформациейобизмененияхвядре,которыебыливнесенывWindowsXPиWindowsServer2003,втомчислекасающихсяподдержки64-разрядныхсистем.Материалыдляэкспериментовтакжебылиобновлены,чтобыотразитьизменениявусовершенствованныхутилитахинаучитьваспользоватьсяновымиинструментами,которыхнебылонамоментподготовкитретьегоиздания.ТаккакотличияновыхверсийWindowsотWindows2000относительноневелики(посравнениюсразличиямимеждуWindowsNT4.0иWindows2000),основнаячастькнигиравноприменимакWindows2000,WindowsXPиWindowsServer2003.Поэтому,еслинеоговореноиное,всесказанноеотноситсяковсемтремверсиям.ИнструментыдляпроведенияэкспериментовДажебездоступакисходномукодусуществующиеинструментывродеотладчикаядрапозволяютмногоепрояснитьвовнутреннемустройствеWindows.Bтомместе,гдедлядемонстрациикакого-либоаспектаповеденияWindowsиспользуетсятотилиинойинструмент,воврезке«Эксперимент»даютсяинструкциипоегоприменению.Такиеврезкичастовстречаютсявкниге,имырекомендуемвампроделыватьэтиэкспериментывпроцессечтения:наглядноувидев,какведетсебяWindowsвконкретнойситуации,выгораздолучшеусвоитепрочитанныйматериал.Тематика,нерассматриваемаявкнигеWindows—большаяисложнаяоперационнаясистема.Нельзяобъятьнеобъятное,ипоэтомуосновноевниманиевкнигеуделяетсятолькобазовымсистемнымкомпонентам.Например,мынерассматриваемCOM+,инфраструктуруобъектно-ориентированногопрограммированияраспределенныхприложенийдляWindows,или.NETFramework,платформудляследующегопоколенияприложенийсуправляемымкодом.ПосколькунашакнигаовнутреннемустройствеWindows,анеотом,какпользоватьсяэтойоперационнойсистемой,программироватьдлянееилиадминистрироватьсистемы,созданныенаееоснове,выненайдетездесьникакихсведенийобиспользовании,программированиииконфигурированииWindows.ПодводныекамниBкнигеописываютсянедокументированныевнутренниеструктурыифункцииядра,архитектураиразличныеаспектывнутреннейработыWindows,ичастьтакихструктурифункцийможетизменитьсявследующемвыпускеэтойоперационнойсистемы.(Впрочем,внешниеинтерфейсывродеWindowsAPIвсегдасохраняютсовместимостьсаналогичнымиинтерфейсамивочередныхвыпусках.)Говоря«можетизмениться»,мынеимеемввиду,чтодеталиустройствасистемыобязательноизменятсявследующемвыпуске,алишьобращаемвниманиенато,чтодостоверностьинформациигарантируетсяисключительнодляданныхверсий.Любоепрограммноеобеспечение,использующеенедокументированныеинтерфейсы,можетперестатьработатьвбудущихверсияхWindows.Болеетого,такоепрограммноеобеспечение,еслионоработаетврежимеядра(как,например,драйверыустройств),можетпривестиккрахуболееновыхверсийWindows.ТехническаяподдержкаМыприложилимаксимумусилий,чтобынедопуститьнеточностейиошибоквкниге.Еслиувасвозникнуткакие-либопроблемыиливопросы,пожалуйста,обращайтесьпоадресам,указаннымвследующихдвухразделах.ОтавторовЭтакнигаотнюдьнесовершенна.Несомненновнейестькакие-тонеточности;можетбыть,мыупустиличто-товажное.Есливынайдетето,чтосчитаетеошибочным,илиесливысочтете,чтовкнигуследуетвключитьдополнительныйматериал,пожалуйста,пошлитесвоесообщениепоадресуwindowsinternals@sysinternals.com.Обновленияиисправлениябудутвыкладыватьсянастраницуwwwsysinternals.com/windowsinternals*ОтMicrosoftPressMicrosoftпубликуетисправленияккнигампоадресуhttp://www.microsoftcom/learning/support.ДляпрямогоподключениякMicrosoftLearningKnowledgeBaseивводазапросапопроблеме,скоторойвыстолкнулись,заходитенастраницуhttp://www.microsoft.comflearning/support/search.asp.Bпереводеучтеныисправления,опубликованныенаэтойWeb-странице,посостояниюна1июля2005года.—Прим.перев.ГЛABA1КонцепциииинструментыBэтойглавемыпознакомимвассосновнымиконцепциямиитерминамиоперационнойсистемыMicrosoftWindows,которыебудутиспользоватьсявпоследующихглавах,втомчислесWindowsAPI,процессами,потоками,виртуальнойпамятью,режимомядраипользовательскимрежимом,объектами,описателями(handles),защитой,реестром.Мытакжерасскажемобинструментах,спомощьюкоторыхвысможетеисследоватьвнутреннееустройствоWindows.Kнимотносятся,например,отладчикядра,оснасткаPerformanceиважнейшиеутилитыссайтаwww.sysinternals.com.Крометого,мыпоясним,какпользоватьсяWindowsDeviceDriverKit(DDK)иPlatformSoftwareDevelopmentKit(SDK)вкачествеисточникадополнительнойинформацииовнутреннемустройствеWindows.Выдолжныхорошопониматьвсе,чтонаписановэтойглаве,—востальнойчастикнигимыпредполагаемименнотак.ВерсииоперационныхсистемWindowsЭтакнигаохватываеттрипоследниеверсииоперационнойсистемыMicrosoftWindows,основанныенакодовойбазеWindowsNT:Windows2000,WindowsXP(32-и64-разрядныеверсии)иWindowsServer2003(32-и64-разрядныеверсии).Текстотноситсяковсемтремверсиям,еслинеоговореноиное.Bтаблице1–1перечисленывыпускикодовойбазыWindowsNT,номераверсийиназванияпродуктов.WindowsNTиWindows95ПрипервомвыпускеWindowsNTкомпанияMicrosoftдалаяснопонять,чтоэтодолгосрочнаязаменаWindows95(иеепоследующихвыпусков—Windows98иWindowsMillenniumEdition).ВотсписокнекоторыхархитектурныхразличийипреимуществWindowsNT(иеепоследующихвыпусков)надWindows95(иеепоследующимивыпусками).•WindowsNTподдерживаетмногопроцессорныесистемы,aWindows95—нет.•ФайловаясистемаWindowsNTподдерживаетсредствазащиты,напримеруправлениеизбирательнымдоступом(discretionaryaccesscontrol).BфайловойсистемеWindows95этогонет.•WindowsNT—полностью32-разрядная(атеперьи64-разрядная)операционнаясистема,внейнет16-разрядногокода,крометого,которыйпредназначендлявыполнения16-разрядныхWindows-приложений.Windows95содержитбольшойобъемстарого16-разрядногокодаизпредшествующихоперационныхсистем—Windows3.1nMS-DOS.•WindowsNTполностьюреентерабельна,амногиечастиWindows95нереентерабельны(восновномэтокасается16-разрядногокода,взятогоизWindows3.1).Большинствофункций,связанныхсграфикойиуправлениемокнами(GDIиUSER),включаютименнонереентерабельныйкод.Когда32-разрядноеприложениевWindows95пытаетсявызватьсистемныйсервис,реализованныйкакнереентерабельный16-разрядныйкод,онодолжносначалаполучитьобщесистемнуюблокировку(илимьютекс),чтобыпредотвратитьвходдругихпотоковвнереентерабельнуюкодовуюбазу.Ещехуже,что16-разрядноеприложениеудерживаеттакуюблокировкувтечениевсеговременисвоеговыполнения.Bитоге,хотяядроWindows95содержит32-разрядныйпланировщиксподдержкоймно-гопоточностиивытесняющеймногозадачности,приложениячастоработаюткакоднопоточныеиз-затого,чтобольшаячастьсистемыреализованакакнереентерабельныйкод.•WindowsNTпозволяетвыполнять16-разрядныеWindows-приложенияввыделенномадресномпространстве,aWindows95всегдавыполняеттакиеприложениявобщемадресномпространстве,вкоторомонимогутнавредитьдругдругуипривестикзависаниюсистемы.•Разделяемая(общая)памятьпроцессавWindowsNTвиднатолькотемпроцессам,которыеимеютпроекциюнаодинитотжеблокразделяемойпамяти.BWindows95всяобщаяпамятьвиднаидоступнадлязаписивсемпроцессам.Такимобразом,любойпроцессможетчто-тозаписатьиповредитькакие-тоданныевобщейпамяти,используемыедругимипроцессами.•Некоторыекритическиважныестраницыпамяти,занимаемыеоперационнойсистемойWindows95,доступныдлязаписиизпользовательскогорежима,азначит,обычноеприложениеможетповредитьсодержимоеэтихстраниципривестиккрахусистемы.Единственное,чтоумеетWindows95ичегоникогданесмогутделатьоперационныесистемынаосновеWindowsNT,—выполнятьвсестарыепрограммыдляMS-DOSиWindows3.1(аименнопрограммы,требующиепрямогодоступакоборудованию),атакже16-разрядныедрайверыустройствMS-DOS.ЕслиоднойизосновныхцелейразработкиWindows95была100%-ясовместимостьсMS-DOSиWindows3.1,тоисходнойцельюразработкиWindowsNT—возможностьвыполнениябольшинствасуществующих16-разрядныхприложенийприусловиисохраненияцелостностиинадежностисистемы.БазовыеконцепцииитерминыBкнигебудутчастовстречатьсяссылкинаконцепциииструктуры,скоторыминекоторыечитатели,возможно,незнакомы.Здесьмыопределимсясиспользуемойвдальнейшемтерминологией.WindowsAPIЭтосистемныйинтерфейспрограммированиявсемействеоперационныхсистемMicrosoftWindows,включаяWindows2000,WindowsXP,WindowsServer2003,Windows95,Windows98,WindowsMillenniumEdition(Me)иWindowsCE.КаждаяоперационнаясистемареализуетразноеподмножествоWindowsAPI.Windows95,Windows98,WindowsMeиWindowsCEвэтойкнигенерассматриваются.ПРИМЕЧАНИЕWindowsAPIописываетсявдокументацииPlatformSoftwareDevelopmentKit(SDK).(См.раздел«PlatformSoftwareDevelopmentKit(SDK)»далеевэтойглаве.)Этудокументациюможнобесплатнопросмотретьнасайтеmsdn.microsoft.com.ОнатакжепоставляетсясMicrosoftDeveloperNetwork(MSDN)всехуровнейподписки.(MSDN—этопрограммаMicrosoftдляподдержкиразработчиков.Подробностисм.насайтеmsdn.microsqft.com.)Отличноеописаниетого,какпрограммироватьсиспользованиембазовогоWindowsAPI,см.вчетвертомизданиикнигиДжеффриРихтераJeffreyRichter)«MicrosoftWindowsдляпрофессионалов»(РусскаяРедакция,2000).Допоявления64-разрядныхверсийWindowsXPиWindowsServer2003интерфейспрограммирования32-разрядныхверсийоперационныхсистемWindowsназывалсяWin32API,чтобыотличатьегоотисходного1разрядногоWindowsAPI.Bэтойкнигетермин«WindowsAPI»относитсяк32-разрядномуинтерфейсупрограммированияWindows2000,атакжек32-и64разрядныминтерфейсампрограммированияWindowsXPиWindowsServer2003.WindowsAPIвключаеттысячивызываемыхфункций,которыесгруппированывследующиеосновныекатегории:•базовыесервисы(BaseServices);•сервисыкомпонентов(ComponentServices);•сервисыпользовательскогоинтерфейса(UserInterfaceServices);•сервисыграфикиимультимедиа(GraphicsandMultimediaServices);•коммуникационноевзаимодействиеисовместнаяработа(MessagingandCollaboration);•сети(Networking);•Webсервисы(WebServices).Основноевниманиевнашейкнигеуделяетсявнутреннемуустройствуключевыхбазовыхсервисов,вчастностиподдержкипроцессовипотоков(threads),управленияпамятью,вводаыводаизащиты.Какнасчет.NETиWinFXETFrameworkсостоитизбиблиотекиклассов,называемойFrameworkClassLibrary(FCL),иобщеязыковойисполняющейсреды(CommonLanguageRuntime,CLR),котораяпредоставляетсредудлявыполненияуправляемогокодастакимивозможностями,каккомпиляцияпотребованию(justimecompilation,JITcompilation),верификациятипов,сбормусораизащитапоправамдоступакода(codeaccesssecurity).БлагодаряэтомуCLRсоздаетсредуразработки,котораяповышаетпродуктивностьтрудапрограммистовиуменьшаетвероятностьпоявленияраспространенныхошибокпрограммирования.Отличноеописание.NETFrameworkиеебазовойархитектурысм.вкнигеДжеффриРихтера«ПрограммированиенаплатформеMicrosoft.NETFramework»(РусскаяРедакция,2003).CLRреализованакакклассическийСОМсервер,кодкоторойхранитсявстандартнойWindowsDLLпользовательскогорежима.Фактическивсекомпоненты.NETFrameworkреализованыкакстандартныеWindowsDLLпользовательскогорежима,занимающиеуровеньповерхнеуправляемыхфункцийWindowsAPL(Никакиекомпоненты.NETFrameworkнеработаютврежимеядра.)Haрис.1показанывзаимосвязиэтихкомпонентов«новыйWindowsAPI».Эторезультатэволюционногоразвития.NETFramework,котораябудетпоставлятьсясверсиейWindowsподкодовымназвание«Longhorn»,следующимвыпускомWindows.WinFXтакжеможноустановитьвWindowsXPиWindowsServer2003.WinFXобразуетфундаментдляприложенийследующегопоколения,создаваемыхдляоперационнойсистемыWindows.ИсториясозданияWin32APIИнтересно,чтопоначалуWin32нерассматривалсякакинтерфейспрограммированиядляMicrosoftWindowsNT.ПосколькупроектWindowsNTначиналсякакзаменаOS/2версии2,основныминтерфейсомпрограммированиябыл32азрядныйOS/2PresentationManagerAPI.ОднакогодспустянарынкепоявиласьMicrosoftWindows3.0,быстроставшаяоченьпопулярной.BрезультатеMicrosoftсменилакурсиперенацелилапроектWindowsNTнабудущуюзаменусемействапродуктовWindows,анеOS/2.ВотнаэтомтоперепутьеивсталвопрососозданииWindowsAPIоэтогоWindowsAPIсуществовалтолькокак16разрядныйинтерфейс.ХотявWindowsAPIдолжнобылопоявитьсямногоновыхфункций,отсутствующихвWindows3.1,MicrosoftрешиласделатьновыйPIповозможностисовместимымсименамифункций,семантикойитипамиданныхв16разрядномWindowsAPI,чтобымаксимальнооблегчитьбремяпереносасуществующих16разрядныхWindowsприложенийвWindowsNTПоэтомутот,кто,впервыеглядянаWindowsAPI,удивляется,почемумногиеименаиинтерфейсыфункцийкажутсяпротиворечивыми,долженучитывать,чтооднойизпричинтакойпротиворечивостибылостремлениесделатьWindowsAPIсовместимымсостарым16разряднымWindowsAPI.Сервисы,функцииипроцедурыНесколькотерминоввдокументацииWindowsдляпользователейипрограммистовимеетразныйсмыслвразныхконтекстах.Например,понятие«сервис»(service)можетотноситьсяквызываемойфункцииоперационнойсистемы,драйверуустройстваилисерверномупроцессу(впоследнемслучаесервисчастоназываютслужбой).Нижепоказано,чтоозначаютподобныетерминывэтойкниге.•ФункцииWindowsAPIДокументированные,вызываемыеподпрограммывWindowsAPI,напримерCreateProcess,CreateFileиGetMessage.•Неуправляемые(«родные»)системныесервисы(илиисполняемыесистемныесервисы)Недокументированныенизкоуровневыесервисыоперационнойсистемы,которыеможновызыватьвпользовательскомрежиме.Так,NtCreateProcessэтовнутрисистемныйсервис,вызываемыйWindowsфункциейCreateProcessприсозданииновогопроцесса(Определениенеуправляемыхфункцийсм.вразделе«Диспетчеризациясистемныхсервисов»главы3.)•Функции(илипроцедуры)ядраПодпрограммывнутриоперационнойсистемыWindows,которыеможновызыватьтольковрежимеядра(определениемыдадимчутьпозже).Например,ExAllocatePoolпроцедура,вызываемаядрайверамиустройствдлявыделенияпамятиизсистемныхкуч(динамическираспределяемыхобластейпамяти)Windows.•WindowsсервисыПроцессы,запускаемыедиспетчеромуправлениясервисамивWindows(ХотявдокументациинареестрдрайверыустройствWindowsопределяютсякаксервисы,мынепользуемсятакимтерминомвэтойкниге.)Например,сервисTaskSchedulerвыполняетсявпроцессепользовательскогорежима,которыйподдерживаеткомандуat(аналогичнуюUNIXкомандеatилиcron).•DLL(динамическиподключаемаябиблиотека)Наборвызываемыхподпрограмм,включенныхводиндвоичныйфайл,которыйприложения,использующиеэтиподпрограммы,могутдинамическизагружатьвовремясвоеговыполнения.BкачествепримераможнопривестимодулиMsvcrt.dll(библиотекаисполняющейподсистемыC)иKernel32.dll(однаизбиблиотекподсистемыWindowsAPI).DLLактивноиспользуютсякомпонентамииприложениямиWindowsпользовательскогорежима.ПреимуществоDLLнадстатическимибиблиотекамивтом,чтоприложениямогутразделятьDLLмодули,aWindowsгарантирует,чтовпамятибудетнаходитьсялишьпоодномуэкземпляруиспользуемыхDLL.Процессы,потокиизаданияХотянапервыйвзглядкажется,чтопрограммаипроцесспонятияпрактическиодинаковые,онифундаментальноотличаютсядруготдруга.Программапредставляетсобойстатическийнаборкоманд,апроцесэтоконтейнердлянабораресурсов,используемыхпривыполненииэкземплярапрограммы.HaсамомвысокомуровнеабстракциипроцессвWindowsвключаетследующее:•закрытоевиртуальноеадресноепространстводиапазонадресоввиртуальнойпамяти,которымможетпользоватьсяпроцесс;•исполняемуюпрограммуначальныйкодиданные,проецируемыенавиртуальноеадресноепространствопроцесса;•списокоткрытыхописателей(handles)различныхсистемныхресурсовсемафоров,коммуникационныхпортов,файловидругихобъектов,доступныхвсемпотокамвданномпроцессе;•контекстзащиты(securitycontext),называемыймаркеромдоступа(accesstoken)иидентифицирующийпользователя,группыбезопасностиипривилегии,сопоставленныеспроцессом;•уникальныйидентификаторпроцесса(вовнутрисистемнойтерминологииназываемыйидентификаторомклиента);•минимумодинпоток.Каждыйпроцесстакжеуказываетнасвойродительскийпроцесс(процесссоздатель).Однако,еслиродительсуществует,этаинформациянеобновляется.Поэтомуестьвероятность,чтонекийпроцессуказываетнауженесуществующегородителя.Этонесоздаетникакойпроблемы,посколькуниктонеполагаетсянаналичиетакойинформации.Следующийэкспериментиллюстрируетданныйслучай.ЭКСПЕРИМЕНТ:просмотрдеревапроцессовБольшинствоутилитнеотображаеттакойуникальныйатрибут,какидентификаторродительскогопроцесса.ЗначениеэтогоатрибутаможнополучитьпрограммноилиспомощьюоснасткиPerformance,запросивзначениесчетчикаCreatingProcessID[Код(ID)создавшегопроцесса].ДеревопроцессовпоказываетсяутилитойTlist.exe(изWindowsDebuggingTools),есливыуказываетеключ/t.Вотобразецвыводаэтойкоманды:Взаимоотношенияпроцессов(дочернийродительский)Tlistпоказываетотступами.Именапроцессов,родительскиепроцессыкоторыхнаданныймоментзавершились,выравниваютсяполевомукраю,потомучтоустановитьихродственныесвязиневозможнодажееслипроцессыпрапредкиещесуществуют.Windowsсохраняетидентификатортолькородительскогопроцесса,такчтопроследитьегосоздателянельзя.Чтобыубедитьсявэтом,выполнитеследующиеоперации.1.Откройтеокнокоманднойстроки.2.Наберитеstartcmdдлязапускавторогоокнакоманднойстроки.3.Откройтедиспетчерзадач.4.Переключитесьнавтороеокнокоманднойстроки.5.ВведитеmspaintдлязапускаMicrosoftPaint.6.Щелкнитевтороеокнокоманднойстроки.7.Введитеexit(Заметьте,чтоокноPaintостается.)8.Переключитесьвдиспетчерзадач.9.ОткройтееговкладкуApplications(Приложения).10.ЩелкнитеправойкнопкоймышизадачуCommandPrompt(Команднаястрока)ивыберитеGoToProcess(Перейтикпроцессам).11.ЩелкнитепроцессCmd.exe,выделенныйсерымцветом.12.Щелкнувправойкнопкоймыши,выберитекомандуEndProcessTree(Завершитьдеревопроцессов).13.BокнеTaskManagerWarning(Предупреждениедиспетчеразадач)щелкнитеYes(Да).Первоеокнокоманднойстрокиисчезнет,новыпопрежнемусможетенаблюдатьокноPaint,таккаконоявляетсявнукомпервогоиззавершенныхпроцессовCommandPrompt.Aпосколькувторой(родительскийпроцессPaint)тожезавершен,связьмеждуродителемивнукомпотеряна.Дляпросмотра(имодификации)процессовиинформации,связаннойсними,существуетцелыйнаборутилит.Следующиеэкспериментыдемонстрируют,какполучитьтуилиинуюинформациюопроцессеспомощьюнекоторыхизэтихутилит.ОнивключаютсянепосредственновсамуWindows,атакжевWindowsSupportTools,WindowsDebuggingTools,ресурсыWindowsиPlatformSDK.Многиеизэтихутилитвыводятперекрывающиесяподмножестваинформацииобазовыхпроцессахипотоках,иногдаидентифицируемыепоразнымименам.Вероятно,наиболееширокоприменяемаяутилитадляанализаактивностипроцессовTaskManager(Диспетчерзадач(Любопытно,чтовядреWindowsнеттакогопонятия,какзадача,такчтоTaskManagerнасамомделеявляетсяинструментомдляуправленияпроцессами.)Следующийэкспериментпоказываетразницумеждутем,чтоTaskManagerперечисляеткакприложенияипроцессы.ЭКСПЕРИМЕНТ:просмотринформацииопроцессахчерездиспетчерзадачДиспетчерзадачWindowsотображаетсписоквыполняемыхвсистемепроцессов.Егоможнозапуститьтремяспособами:1)нажавклавишиCtrl+Shift+Esc;2)щелкнувпанельзадачправойкнопкоймышиивыбравкомандуTaskManager(Диспетчерзадач);3)нажавклавишиCtrl+Alt+Del.ПослезапускадиспетчеразадачоткройтевкладкуProcesses(Процессы).Заметьте,чтопроцессыидентифицируютсяпоимениобраза,экземплярамикоторогоониявляются.BотличиеотнекоторыхобъектоввWindowsпроцессамнельзяприсваиватьглобальныеимена.ДляпросмотраболееподробныхсведенийвыберитеизменюView(Вид)командуSelectColumns(Выбратьстолбцы)иукажите,какаядополнительнаяинформациявасинтересует.ЕсливкладкаProcessesокнадиспетчеразадачсовсейочевидностьюпо 4 дня назад
3 AbrakaDaniel AbrakaDanielhttp://apero.ruГлавнаяИграйонлайн!Конкурсоткрыт!СообщенияУчастникиМагазин(2)Создайигру!ДокументацияЗаданияiFiction.ruМыВКонтактеПрофильПривет,AbrakaDanielСейчасвонлайнеAbrakaDaniel(Vetal123)и20гостей.ПартнерыАперо:"Коллекционер"-СтрашныйквествЧелнах!Вигреилинасайтеошибка?ВыделитекстижмисюдаилиCtrl+EnterРазработчикискажутспасибо:)Навигация:http://apero.ru/Участники/Vetal123Vetal123-страницаучастникааперо-сообществаПрофильнеактивирован.Еслиэтотвойпрофиль-проверьe-mail,указанныйприрегистрации,иперейдипоссылкедляактивации.Последниекомментарии:1AbrakaDanielhttp://apero.ruГлавнаяИграйонлайн!Конкурсоткрыт!СообщенияУчастникиМагазин(2)Создайигру!ДокументацияЗаданияiFiction.ruМыВКонтактеПрофильПривет,AbrakaDanielСейчасвонлайнеAbrakaDaniel(Vetal123)и20гостей.ПартнерыАперо:"Коллекционер"-СтрашныйквествЧелнах!Вигреилинасайтеошибка?ВыделитекстижмисюдаилиCtrl+EnterРазработчикискажутспасибо:)Навигация:http://apero.ru/Участники/Vetal123Vetal123-страницаучастникааперо-сообществаПрофильнеактивирован.Еслиэтотвойпрофиль-проверьe-mail,указанныйприрегистрации,иперейдипоссылкедляактивации.Последниекомментарии:1AbrakaDanielhttp://apero.ruГлавнаяИграйонлайн!Конкурсоткрыт!СообщенияУчастникиМагазин(2)Создайигру!ДокументацияЗаданияiFiction.ruМыВКонтактеПрофильПривет,AbrakaDanielСейчасвонлайнеAbrakaDaniel(Vetal123)и20гостей.ПартнерыАперо:"Коллекционер"-СтрашныйквествЧелнах!Вигреилинасайтеошибка?ВыделитекстижмисюдаилиCtrl+EnterРазработчикискажутспасибо:)Навигация:http://apero.ru/Участники/Vetal123Vetal123-страницаучастникааперо-сообществаПрофильнеактивирован.Еслиэтотвойпрофиль-проверьe-mail,указанныйприрегистрации,иперейдипоссылкедляактивации.Последниекомментарии:1AbrakaDanielАннотация:КнигапосвященавнутреннемуустройствуиалгоритмамработыосновныхкомпонентовоперационнойсистемыMicrosoftWindows—WindowsServer2003,WindowsXPиWindows2000—ифайловойсистемыNTFS.Детальнорассмотренысистемныемеханизмы:диспетчеризацияловушекипрерываний,DPC,APC,LPC,RPC,синхронизация,системныерабочиепотоки,глобальныефлагиидр.Такжеописываютсявсеэтапызагрузкиоперационнойсистемыизавершенияееработы.Bчетвертомизданиикнигибольшевниманияуделяетсяглубокомуанализуиустранениюпроблем,из-закоторыхпроисходиткрахоперационнойсистемыилииз-закоторыхеенеудаетсязагрузить.Крометого,рассматриваютсядеталиреализацииподдержкиаппаратныхплатформAMDx64иIntelIA64.Книгасостоитиз14глав,словарятерминовипредметногоуказателя.Книгапредназначенасистемнымадминистраторам,разработчикамсерьезныхприложенийивсем,ктохочетпонять,какустроенаоперационнаясистемаWindows.Названиявсехкоманд,диалоговыхоконидругихинтерфейсныхэлементовоперационнойсистемыприведеныкакнаанглийскомязыке,такинарусском.ВерсияFb2редакции—1.5.Обошибкахпросьбасообщатьпоадресу—general2008@ukr.net.---------------------------------------------М.Руссинович,Д.СоломонВнутреннееустройствоMicrosoftWindows(главы1–4)WindowsServer™2003,WindowsXPиWindows20004-еизданиеПредысторияЯвновьпризнателенДэвидуСоломону(DavidSolomon)иМаркуРуссиновичу(MarkRussinovich)зато,чтоонипредоставилимневозможностьсказатьнесколькословоновомизданииихкниги«ВнутреннееустройствоMicrosoftWindows».Прошлоужеболеетрехлетсмоментавыходапоследнегоизданияэтойкниги,изаэтовремянасветпоявилисьдвавыпускаоперационнойсистемыWindows—оченьзначимыеобновленияклиентскойисервернойсистем.Передавторамистоялидвезадачи,которыепостоянноусложняются:отслеживаниеэволюционногоразвитиясистемыMicrosoftWindowsNTидокументированиетого,какменяласьреализацияеекомпонентоввкаждойверсии.Bэтомсмыслеавторыпроделалипростовыдающуюсяработу.(Слеванаправо)ДэвидСоломон,ДэвидКатлериМаркРуссиновичВпервыеяпознакомилсясДэвидомСоломоном,когдаемубыловсего16лет,аяработалвDigitalEquipmentCorporationнадоперационнойсистемойVMSдляVAX.Cтехпоронучаствовалвразработкеоперационныхсистем,атакжепреподавалвэтойобласти.CМаркомРуссиновичемяпознакомилсяпозже,ноужезадолгодоэтогобылнемалонаслышаноегоглубокихпознанияхвобластиоперационныхсистем.BчислеегозаслугверсияфайловойсистемыNTFS,которуюонзаставилработатьвMicrosoftWindows98,и«живой»отладчикядраWindows,позволяющийзаглянутьвнутрьсистемыWindowsвпроцессееевыполнения.ИстокиWindowsNTвосходяткоктябрю1988года,когдабылорешеносоздатьпереносимуюоперационнуюсистему,совместимуюсOS/2,поддерживающуюPOSIXимногопроцессорнуюобработку,обладающуювысокойзащищенностью,надежностьюиинтегрированнымисредствамиработывсетях.CприходомWindows3.0иееколоссальнымуспехомзаявленныецелинесколькоизменились:совместимостьсOS/2былаперенесенасуровнявсейсистемынауровеньотдельнойподсистемы.Поначалумыполагали,чтосумеемсоздатьWindowsNTзапарулет,новдействительностиееперваяверсиявышлалишьчерезчетыресполовинойгода—летом1993-го.ЭтаверсияподдерживалапроцессорыInteli386,Inteli486иMIPSR4000.ШестьнедельспустямыввелиподдержкуидляпроцессоровDigitalAlpha.ПерваяверсияWindowsNTполучиласьболеегромоздкойимедленной,чеможидалось,такчтоследующейвехойсталпроектDaytona(такназываетсяавтострадавоФлориде).Главнойцельювэтойверсиибылоуменьшениеразмерасистемы,повышениееебыстродействияи,разумеется,надежности.ЧерезполгодапослевыпускаWindowsNT3.5осенью1994-гомыподготовилиWindowsNT3.51,котораяпредставляласобойобновленнуюверсиюсдополнительнойподдержкойпроцессораIBMPowerPC.ТолчкомксозданиюследующейверсииWindowsNTсталожеланиесделатьпользовательскийинтерфейс,совместимыйсWindows95,ивключитьтехнологииCairo,уженаходившиесявразработкепарулет.Haсозданиеэтойсистемыушлоещедвагода,илетом1996годабылапредставленаWindowsNT4.0.НазваниеследующейверсииNTбылоизмененонаWindows2000.Онасталапоследнейсистемой,длякоторойодновременновыпускалиськлиентскаяисервернаяверсии.Windows2000былапостроенанатойжетехнологииWindowsNT,чтоипредыдущиеверсии,нообладалановойважнойфункциональностью,поддерживая,вчастности,ActiveDirectory.HaразработкуWindows2000ушлотрисполовинойгода,инатотпериодонабыласамойоптимизированнойинаиболеетщательнопротестированнойверсиейтехнологииWindowsNTWindows2000сталакульминациейболеечемодиннадцатилетнихразработок,реализованныхначетырехархитектурах.BконцеразработкиWindows2000мыприступиликработенадамбициознымпланомреализацииновыхверсийклиентскойисервернойсистем,которыедолжныбылипредоставитьновые,болеесовершенныевозможностипотребителямиулучшитьхарактеристикисерверов.Hoпотомсталоясно,чтореализациясерверныхсредствпривелабыкзадержкевреализацииклиентских,ипоэтомубылорешеноразделитьвыпуски.Bавгусте2001годанасветпоявилисьWindowsXPProfessionalиWindowsXPHomeEdition,aчерезгодснебольшим,вмарте2003годабылавыпущенаMicrosoftWindowsServer2003.ПомимоархитектурыIntelx86,этисистемыподдерживалиIntelIA64,благодарячемуWindowsNTвпервыевышланастезю64-разрядныхвычислений.Этакнигаединственная,гдетакглубокоиполнорассмотренывнутренниеструктурыипринципыфункционированияWindowsXPиWindowsServer2003.Крометого,онапредлагаетзаглянутьвбудущее—переводWindowsна64-разрядные«рельсы»,т.е.наееподдержкуархитектурx64(AMD64)иIntelEM64T,объявленныхAMDв2003годуиIntelвфеврале2004годасоответственно.Выпускклиентскойисервернойверсийсполнойподдержкойx64запланированнапервуюполовину2005года,ивэтойкнигесодержитсямассаинформацииовнутреннихдеталяхреализациих64-системы.Архитектурах64—этоначалоновойэрыдляWindowsNTвтотмомент,когдавремяархитектурыx86подходиткконцу.Архитектураx64обеспечиваетсовместимостьс32-разряднойх86-платформойипредоставляет64-разряднуюадресациюдлянаиболеетребовательных,совершенноновыхприложений.Этопозволитсохранитьинвестициив32-разрядноепрограммноеобеспечение,втожевремявдохнувновуюжизньвWindowsNTнаближайшеедесятилетиеилидаженаболеедлительныйпериод.ХотяназваниеNT-системызапоследниенескольколетнеоднократноменялось,онапо-прежнемуполностьюосновананаисходнойкодовойбазеWindowsNT.Hoвремябежит,появляютсяновыетехнологии,иреализациямногихвнутреннихкомпонентовифункцийзначительноизменилась.Авторыпроделаливнушительнуюработу,собравстолькодетальнойинформацииокодовойбазеWindowsNTиеереализацияхвразныхвыпускахнаразныхплатформах,атакжесоздавпримерыиутилиты,которыепомогаютчитателюразобратьсявтом,какработаюткомпонентыиподсистемыWindows.Экземплярэтойкнигидолженлежатьнастолеукаждогоразработчикасерьезногопрограммногообеспечения.ДэвидH.Катлер,заслуженныйстаршийинженеркорпорацииMicrosoftПредисловиеMicrosoftWindowsбылачастьюмоейжизницелых14лет.Заэтовремя—отверсиикверсии—нашаоперационнаясистемаразвиваласьвширьивглубь.СегодняработанадWindows—одинизсамыхважныхисложныхпроектоввмире.BвыпускеWindowsучаствуютболее5000инженеров.СредипользователейWindowsестьпредставителиужепочтивсехкультур,онаиспользуетсякакнакрупныхпредприятиях,такималенькимидетьми.ПользователиWindowsпостояннотребуютеесовершенствованияпрактическивовсехсферах—отэффективнойработынакрупнейшихсерверахдоприменениявдошкольномобучении.Windowsпоставляетсявсамыхразныхипостасях—отвстраиваемыхверсийивыпусковдлямедиа-центровдоредакцийдляцентровобработкиданных.ВсеэтипродуктыопираютсянаодниитежебазовыекомпонентыWindows,которыеразвиваютсяисовершенствуютсявкаждойновойверсии.ЭтофундаментальнаякнигаовнутреннемустройствебазовыхкомпонентовWindows.ЕсливыхотитекакможнобыстрееосвоитьпринципывнутреннейработыWindows,тогдаэтакнигадлявас.Освоениевсехчастейстольосновательногопродукта—задачаустрашающая.Hoесливыначнетесбазовыхконцепцийсистемы,сложитьфрагментыголоволомкивоединобудетгораздолегче.CэволюциейсамойWindowsразвиваетсяиэтакнига—сейчаспубликуетсяеечетвертоеиздание.МыужедавноиспользуемеедляобученияновыхсотрудниковMicrosoft,такчтопредлагаемыевамматериалыпроверенынапрактике.Есливывродеменя,значит,вамтоженравитсяразбиратьсявтом,какустроенывещи.Чтениекнижектипа«какиспользоватьто-тоито-то»меняникогданеудовлетворяло.Когдапонимаешь,какименноустроенавещь,пользуешьсяеюгораздоэффективнееи,честноговоря,сбольшимудовольствием.ЕсливасинтересуетWindows«сизнанки»,вывыбралиподходящуюкнигу.ДэвидиМаркпроделалипревосходнуюработу,написавкнигуотехнической«изнанке»Windows.Aинструменты,которыеонипредлагаютвам,—отличноесредстводлясамостоятельногообученияидиагностики.Прочитавэтукнигу,выбудетегораздолучшепонимать,каквзаимодействуютмеждусобойразличныекомпонентыиподсистемы,какиеусовершенствованиявнесенывновуюверсиюикаквыжатьизнихмаксимумвозможного.Этобылдолгийпуть—ионвсеещепродолжается.Такчтооткрывайтекнигу,азаодноикапот,подкоторымбьетсясердцеоднойизсамыхпотрясающихоперационныхсистем.ДжимОлчин,вице-президентгруппыплатформкорпорацииMicrosoftБлагодарностиBпервуюочередьмыхотимособопоблагодаритьследующихлюдей.•ДэйваКатлера(DaveCutler),заслуженногостаршегоинженераипервогоархитектораMicrosoftWindowsNT.ДэйвразрешилДэвидуСоломону(DavidSolomon)доступкисходномукодуивсяческиподдерживалегопреподавательскуюдеятельность,посвященнуюобъяснениюдеталейвнутреннегоустройстваWindowsNT,атакжеегоработунадвторымитретьимизданиемкниги.Помиморецензированияглавыпопроцессамипотокам,ДэйвответилнамассувопросовобархитектуреядраинаписалобисториисозданияWindowsдлянашейкниги.•ДжимаОлчинаJimAllchin),нашегоглавногоспонсора,—запредисловиекэтойкнигеизаотстаиваниеинтересовнашегоделавMicrosoft.•РобаШорта(RobShort),вице-президента,которыйпозаботилсяотом,чтобынампредоставилиресурсыидоступкнужнымлюдям.МытакжевыражаемпризнательностьдвумразработчикамизотделаWindowsзаподготовкуновыхматериалов,включенныхвэтоиздание:•АдриануМаринеску(AdrianMarinescu),которыйнаписалзаметноразросшийсяразделподиспетчерукучвглаве,гдерассматриваетсядиспетчерпамяти.•СамеруАрафеху(SamerArafeh),которыйпредоставилматериалыпоWow64.Спасибонашемустаромуприятелю,ДжеффриРихтеруJeffreyRichter),скоторыммычастовместеобедаем,заврезку«Какнасчет.NETиWinFX?»вглаве1изапостоянноенапоминаниеотом,какмалолюдей,по-настоящемуинтересующихсятем,очеммыговоримвсвоейкниге.Bэтойкнигенебылобытакойглубиныиточностиизложениятехническихсведенийбезподдержки,замечанийипредложенийключевыхчленовкомандыразработчиковMicrosoftWindows.Вотэтилюди:Былиидругие,ктоотвечалнанашивопросывкоридорахиликафетериях,—еслимываспропустили,пожалуйста,проститенас!МытакжевыражаемблагодарностьДжеймиХанраханJamieHanrahan)изAziusDeveloperTraining(www.azius.com),котораявсоавторствесДэвидомподготовилаучебныйкурсповнутреннейархитектуреисходнойверсииWindows.Haосновеэтогокурсабылонаписановтороеизданиеэтойкниги.Джейми,укоторойнастоящийталантдоходчивообъяснятьсложнейшиевещи,предоставиланамотдельныематериалы,атакжерядсхемииллюстраций.СпасибоДэйвуПроберту(DaveProbert)зато,чторазместилвсетинашичерновыематериалыдляраспространениясредирецензентоввнутриMicrosoft.БлагодаримДжонатанаСлавза(JonathanSloves)изAMD,спомощьюкоторогонампредоставилитестовыесистемыAMD64;ониоченьпомоглинамвнаписанииматериаловпо64-разряднойархитектуреивпереносерядаутилитSysinternalsнаплатформуx64.Наконец,мыхотимвыразитьблагодарностьследующимсотрудникамMicrosoftPressзаихвкладвэтукнигу.•РобинуВан-Штеенбергу(RobinvanSteenburgh),рецензентуиздательства,затерпениевработеснаминадэтимпроектом.•СаллиСтикни(SallyStickney),котораянапервыхпорахпо-прежнемубыларедакторомнашегопроекта,нопотомеезакрутилводоворотадминистративныхдел.Мыоченьскучалибезвас!•ВалериВулли(ValerieWoolley),котораяпринялабраздыправленияотСаллиисталанашимновымредакторомпроекта.Вызамечательнаяинетакаярезкая,какСалли!•РоджеруЛебланку(RogerLeBlanc),которыйодолелвсеглавыисумелсократитьвнихтекст,найтинесогласованностиивообщедовестинашурукописьдовысокихстандартовMicrosoftPress.ДэвидСоломониМаркРуссиновичсентябрь2004г.ВведениеЧетвертоеизданиеэтойкнигиориентированонаквалифицированныхспециалистов(программистов,разработчиковисистемныхадминистраторов),желающихразобратьсявпринципахвнутреннейработыосновныхкомпонентовоперационныхсистемMicrosoftWindows2000,MicrosoftWindowsXPиMicrosoftWindowsServer2003.Знаяих,разработчикисмогутприниматьболееэффективныерешениянаэтапахпроектированияприложенийдляплатформыWindows.Такиезнанияпомогутпрограммистамивотладке—приустранениисложныхпроблем.Информация,изложеннаявкниге,будеттакжеполезнасистемнымадминистраторам:пониманиетого,какустроенаиработаетоперационнаясистема,упроститимоптимизациюсвоихсистемиустранениенеполадоквслучаекаких-либосбоев.Прочитавэтукнигу,вылучшепоймете,какфункционируетWindowsипочемуонаведетсебяименнотак,анекак-тоиначе.СтруктуракнигиПервыедвеглавызакладываютфундамент,вводятерминыиконцепции,используемыевовсейкниге.Следующиетриглавыописываютключевыемеханизмыоперационнойсистемы.BследующихвосьмиглавахдетальнорассматриваютсябазовыекомпонентыWindows—процессы,потокиизадания,управлениепамятью,защита,подсистемаввода-вывода,управлениевнешнейпамятью,диспетчеркэша,файловыесистемыиподдержкасетей.Наконец,впоследнейглавепоясняется,какпроводитьанализаварийныхдамповпамяти.ИсториянаписаниякнигиЭточетвертоеизданиекниги,котораяизначальноназывалась«InsideWindowsNT»(MicrosoftPress,1992)ибыланаписанаХеленКастер(HelenCuster)ещедовыпускаMicrosoftWindowsNT3.1.ОнасталапервойкнигойпоWindowsNTипредставляласобойглубокийобзорархитектурыэтойсистемы.Второеиздание,«InsideWindowsNT»(MicrosoftPress,1998),былонаписаноДэвидомСоломоном.BнеговошлановаяинформацияпоWindowsNT4.0,асамакнигасталагораздоболееглубокой.Третьеиздание,«InsideWindows2000»(MicrosoftPress,2000),былоподготовленоДэвидомСоломономиМаркомРуссиновичем.Bнемпоявилосьмногоновыхтематическихразделов,втомчислепоэтапамзагрузкиизавершенияработысистемы,внутреннемуустройствусервисовиреестра,подрайверамфайловыхсистем,поддержкесетей,атакжепоновойфункциональностиядраWindows2000,напримермоделиWDM,PlugandPlay,WMI,шифрованию,TerminalServicesидр.ОсобенностичетвертогоизданияНовоеизданиедополненоинформациейобизмененияхвядре,которыебыливнесенывWindowsXPиWindowsServer2003,втомчислекасающихсяподдержки64-разрядныхсистем.Материалыдляэкспериментовтакжебылиобновлены,чтобыотразитьизменениявусовершенствованныхутилитахинаучитьваспользоватьсяновымиинструментами,которыхнебылонамоментподготовкитретьегоиздания.ТаккакотличияновыхверсийWindowsотWindows2000относительноневелики(посравнениюсразличиямимеждуWindowsNT4.0иWindows2000),основнаячастькнигиравноприменимакWindows2000,WindowsXPиWindowsServer2003.Поэтому,еслинеоговореноиное,всесказанноеотноситсяковсемтремверсиям.ИнструментыдляпроведенияэкспериментовДажебездоступакисходномукодусуществующиеинструментывродеотладчикаядрапозволяютмногоепрояснитьвовнутреннемустройствеWindows.Bтомместе,гдедлядемонстрациикакого-либоаспектаповеденияWindowsиспользуетсятотилиинойинструмент,воврезке«Эксперимент»даютсяинструкциипоегоприменению.Такиеврезкичастовстречаютсявкниге,имырекомендуемвампроделыватьэтиэкспериментывпроцессечтения:наглядноувидев,какведетсебяWindowsвконкретнойситуации,выгораздолучшеусвоитепрочитанныйматериал.Тематика,нерассматриваемаявкнигеWindows—большаяисложнаяоперационнаясистема.Нельзяобъятьнеобъятное,ипоэтомуосновноевниманиевкнигеуделяетсятолькобазовымсистемнымкомпонентам.Например,мынерассматриваемCOM+,инфраструктуруобъектно-ориентированногопрограммированияраспределенныхприложенийдляWindows,или.NETFramework,платформудляследующегопоколенияприложенийсуправляемымкодом.ПосколькунашакнигаовнутреннемустройствеWindows,анеотом,какпользоватьсяэтойоперационнойсистемой,программироватьдлянееилиадминистрироватьсистемы,созданныенаееоснове,выненайдетездесьникакихсведенийобиспользовании,программированиииконфигурированииWindows.ПодводныекамниBкнигеописываютсянедокументированныевнутренниеструктурыифункцииядра,архитектураиразличныеаспектывнутреннейработыWindows,ичастьтакихструктурифункцийможетизменитьсявследующемвыпускеэтойоперационнойсистемы.(Впрочем,внешниеинтерфейсывродеWindowsAPIвсегдасохраняютсовместимостьсаналогичнымиинтерфейсамивочередныхвыпусках.)Говоря«можетизмениться»,мынеимеемввиду,чтодеталиустройствасистемыобязательноизменятсявследующемвыпуске,алишьобращаемвниманиенато,чтодостоверностьинформациигарантируетсяисключительнодляданныхверсий.Любоепрограммноеобеспечение,использующеенедокументированныеинтерфейсы,можетперестатьработатьвбудущихверсияхWindows.Болеетого,такоепрограммноеобеспечение,еслионоработаетврежимеядра(как,например,драйверыустройств),можетпривестиккрахуболееновыхверсийWindows.ТехническаяподдержкаМыприложилимаксимумусилий,чтобынедопуститьнеточностейиошибоквкниге.Еслиувасвозникнуткакие-либопроблемыиливопросы,пожалуйста,обращайтесьпоадресам,указаннымвследующихдвухразделах.ОтавторовЭтакнигаотнюдьнесовершенна.Несомненновнейестькакие-тонеточности;можетбыть,мыупустиличто-товажное.Есливынайдетето,чтосчитаетеошибочным,илиесливысочтете,чтовкнигуследуетвключитьдополнительныйматериал,пожалуйста,пошлитесвоесообщениепоадресуwindowsinternals@sysinternals.com.Обновленияиисправлениябудутвыкладыватьсянастраницуwwwsysinternals.com/windowsinternals*ОтMicrosoftPressMicrosoftпубликуетисправленияккнигампоадресуhttp://www.microsoftcom/learning/support.ДляпрямогоподключениякMicrosoftLearningKnowledgeBaseивводазапросапопроблеме,скоторойвыстолкнулись,заходитенастраницуhttp://www.microsoft.comflearning/support/search.asp.Bпереводеучтеныисправления,опубликованныенаэтойWeb-странице,посостояниюна1июля2005года.—Прим.перев.ГЛABA1КонцепциииинструментыBэтойглавемыпознакомимвассосновнымиконцепциямиитерминамиоперационнойсистемыMicrosoftWindows,которыебудутиспользоватьсявпоследующихглавах,втомчислесWindowsAPI,процессами,потоками,виртуальнойпамятью,режимомядраипользовательскимрежимом,объектами,описателями(handles),защитой,реестром.Мытакжерасскажемобинструментах,спомощьюкоторыхвысможетеисследоватьвнутреннееустройствоWindows.Kнимотносятся,например,отладчикядра,оснасткаPerformanceиважнейшиеутилитыссайтаwww.sysinternals.com.Крометого,мыпоясним,какпользоватьсяWindowsDeviceDriverKit(DDK)иPlatformSoftwareDevelopmentKit(SDK)вкачествеисточникадополнительнойинформацииовнутреннемустройствеWindows.Выдолжныхорошопониматьвсе,чтонаписановэтойглаве,—востальнойчастикнигимыпредполагаемименнотак.ВерсииоперационныхсистемWindowsЭтакнигаохватываеттрипоследниеверсииоперационнойсистемыMicrosoftWindows,основанныенакодовойбазеWindowsNT:Windows2000,WindowsXP(32-и64-разрядныеверсии)иWindowsServer2003(32-и64-разрядныеверсии).Текстотноситсяковсемтремверсиям,еслинеоговореноиное.Bтаблице1–1перечисленывыпускикодовойбазыWindowsNT,номераверсийиназванияпродуктов.WindowsNTиWindows95ПрипервомвыпускеWindowsNTкомпанияMicrosoftдалаяснопонять,чтоэтодолгосрочнаязаменаWindows95(иеепоследующихвыпусков—Windows98иWindowsMillenniumEdition).ВотсписокнекоторыхархитектурныхразличийипреимуществWindowsNT(иеепоследующихвыпусков)надWindows95(иеепоследующимивыпусками).•WindowsNTподдерживаетмногопроцессорныесистемы,aWindows95—нет.•ФайловаясистемаWindowsNTподдерживаетсредствазащиты,напримеруправлениеизбирательнымдоступом(discretionaryaccesscontrol).BфайловойсистемеWindows95этогонет.•WindowsNT—полностью32-разрядная(атеперьи64-разрядная)операционнаясистема,внейнет16-разрядногокода,крометого,которыйпредназначендлявыполнения16-разрядныхWindows-приложений.Windows95содержитбольшойобъемстарого16-разрядногокодаизпредшествующихоперационныхсистем—Windows3.1nMS-DOS.•WindowsNTполностьюреентерабельна,амногиечастиWindows95нереентерабельны(восновномэтокасается16-разрядногокода,взятогоизWindows3.1).Большинствофункций,связанныхсграфикойиуправлениемокнами(GDIиUSER),включаютименнонереентерабельныйкод.Когда32-разрядноеприложениевWindows95пытаетсявызватьсистемныйсервис,реализованныйкакнереентерабельный16-разрядныйкод,онодолжносначалаполучитьобщесистемнуюблокировку(илимьютекс),чтобыпредотвратитьвходдругихпотоковвнереентерабельнуюкодовуюбазу.Ещехуже,что16-разрядноеприложениеудерживаеттакуюблокировкувтечениевсеговременисвоеговыполнения.Bитоге,хотяядроWindows95содержит32-разрядныйпланировщиксподдержкоймно-гопоточностиивытесняющеймногозадачности,приложениячастоработаюткакоднопоточныеиз-затого,чтобольшаячастьсистемыреализованакакнереентерабельныйкод.•WindowsNTпозволяетвыполнять16-разрядныеWindows-приложенияввыделенномадресномпространстве,aWindows95всегдавыполняеттакиеприложениявобщемадресномпространстве,вкоторомонимогутнавредитьдругдругуипривестикзависаниюсистемы.•Разделяемая(общая)памятьпроцессавWindowsNTвиднатолькотемпроцессам,которыеимеютпроекциюнаодинитотжеблокразделяемойпамяти.BWindows95всяобщаяпамятьвиднаидоступнадлязаписивсемпроцессам.Такимобразом,любойпроцессможетчто-тозаписатьиповредитькакие-тоданныевобщейпамяти,используемыедругимипроцессами.•Некоторыекритическиважныестраницыпамяти,занимаемыеоперационнойсистемойWindows95,доступныдлязаписиизпользовательскогорежима,азначит,обычноеприложениеможетповредитьсодержимоеэтихстраниципривестиккрахусистемы.Единственное,чтоумеетWindows95ичегоникогданесмогутделатьоперационныесистемынаосновеWindowsNT,—выполнятьвсестарыепрограммыдляMS-DOSиWindows3.1(аименнопрограммы,требующиепрямогодоступакоборудованию),атакже16-разрядныедрайверыустройствMS-DOS.ЕслиоднойизосновныхцелейразработкиWindows95была100%-ясовместимостьсMS-DOSиWindows3.1,тоисходнойцельюразработкиWindowsNT—возможностьвыполнениябольшинствасуществующих16-разрядныхприложенийприусловиисохраненияцелостностиинадежностисистемы.БазовыеконцепцииитерминыBкнигебудутчастовстречатьсяссылкинаконцепциииструктуры,скоторыминекоторыечитатели,возможно,незнакомы.Здесьмыопределимсясиспользуемойвдальнейшемтерминологией.WindowsAPIЭтосистемныйинтерфейспрограммированиявсемействеоперационныхсистемMicrosoftWindows,включаяWindows2000,WindowsXP,WindowsServer2003,Windows95,Windows98,WindowsMillenniumEdition(Me)иWindowsCE.КаждаяоперационнаясистемареализуетразноеподмножествоWindowsAPI.Windows95,Windows98,WindowsMeиWindowsCEвэтойкнигенерассматриваются.ПРИМЕЧАНИЕWindowsAPIописываетсявдокументацииPlatformSoftwareDevelopmentKit(SDK).(См.раздел«PlatformSoftwareDevelopmentKit(SDK)»далеевэтойглаве.)Этудокументациюможнобесплатнопросмотретьнасайтеmsdn.microsoft.com.ОнатакжепоставляетсясMicrosoftDeveloperNetwork(MSDN)всехуровнейподписки.(MSDN—этопрограммаMicrosoftдляподдержкиразработчиков.Подробностисм.насайтеmsdn.microsqft.com.)Отличноеописаниетого,какпрограммироватьсиспользованиембазовогоWindowsAPI,см.вчетвертомизданиикнигиДжеффриРихтераJeffreyRichter)«MicrosoftWindowsдляпрофессионалов»(РусскаяРедакция,2000).Допоявления64-разрядныхверсийWindowsXPиWindowsServer2003интерфейспрограммирования32-разрядныхверсийоперационныхсистемWindowsназывалсяWin32API,чтобыотличатьегоотисходного16-разрядногоWindowsAPI.Bэтойкнигетермин«WindowsAPI»относитсяк32-разрядномуинтерфейсупрограммированияWindows2000,атакжек32-и64-разрядныминтерфейсампрограммированияWindowsXPиWindowsServer2003.WindowsAPIвключаеттысячивызываемыхфункций,которыесгруппированывследующиеосновныекатегории:•базовыесервисы(BaseServices);•сервисыкомпонентов(ComponentServices);•сервисыпользовательскогоинтерфейса(UserInterfaceServices);•сервисыграфикиимультимедиа(GraphicsandMultimediaServices);•коммуникационноевзаимодействиеисовместнаяработа(MessagingandCollaboration);•сети(Networking);•Web-сервисы(WebServices).Основноевниманиевнашейкнигеуделяетсявнутреннемуустройствуключевыхбазовыхсервисов,вчастностиподдержкипроцессовипотоков(threads),управленияпамятью,ввода-выводаизащиты.Какнасчет.NETиWinFX?NETFrameworkсостоитизбиблиотекиклассов,называемойFrameworkClassLibrary(FCL),иобщеязыковойисполняющейсреды(CommonLanguageRuntime,CLR),котораяпредоставляетсредудлявыполненияуправляемогокодастакимивозможностями,каккомпиляцияпотребованию(just-in-timecompilation,JITcompilation),верификациятипов,сбормусораизащитапоправамдоступакода(codeaccesssecurity).БлагодаряэтомуCLRсоздаетсредуразработки,котораяповышаетпродуктивностьтрудапрограммистовиуменьшаетвероятностьпоявленияраспространенныхошибокпрограммирования.Отличноеописание.NETFrameworkиеебазовойархитектурысм.вкнигеДжеффриРихтера«ПрограммированиенаплатформеMicrosoft.NETFrame-work»(РусскаяРедакция,2003).CLRреализованакакклассическийСОМ-сервер,кодкоторойхранитсявстандартнойWindowsDLLпользовательскогорежима.Фактическивсекомпоненты.NETFrameworkреализованыкакстандартныеWindowsDLLпользовательскогорежима,занимающиеуровеньповерхнеуправляемыхфункцийWindowsAPL(Никакиекомпоненты.NETFrameworkнеработаютврежимеядра.)Haрис.1–1показанывзаимосвязиэтихкомпонентов.WinFX—«новыйWindowsAPI».Эторезультатэволюционногоразвития.NETFramework,котораябудетпоставлятьсясверсиейWindowsподкодовымназванием«Longhorn»,следующимвыпускомWindows.WinFXтакжеможноустановитьвWindowsXPиWindowsServer2003.WinFXобразуетфундаментдляприложенийследующегопоколения,создаваемыхдляоперационнойсистемыWindows.ИсториясозданияWin32APIИнтересно,чтопоначалуWin32нерассматривалсякакинтерфейспрограммированиядляMicrosoftWindowsNT.ПосколькупроектWindowsNTначиналсякакзаменаOS/2версии2,основныминтерфейсомпрограммированиябыл32-разрядныйOS/2PresentationManagerAPI.ОднакогодспустянарынкепоявиласьMicrosoftWindows3.0,быстроставшаяоченьпопулярной.BрезультатеMicrosoftсменилакурсиперенацелилапроектWindowsNTнабудущуюзаменусемействапродуктовWindows,анеOS/2.Вотнаэтом-топерепутьеивсталвопрососозданииWindowsAPI—доэтогоWindowsAPIсуществовалтолькокак16-разрядныйинтерфейс.ХотявWindowsAPIдолжнобылопоявитьсямногоновыхфункций,отсутствующихвWindows3.1,MicrosoftрешиласделатьновыйAPIповозможностисовместимымсименамифункций,семантикойитипамиданныхв16-разрядномWindowsAPI,чтобымаксимальнооблегчитьбремяпереносасуществующих16-разрядныхWindows-приложенийвWindowsNTПоэтомутот,кто,впервыеглядянаWindowsAPI,удивляется,почемумногиеименаиинтерфейсыфункцийкажутсяпротиворечивыми,долженучитывать,чтооднойизпричинтакойпротиворечивостибылостремлениесделатьWindowsAPIсовместимымсостарым16-разряднымWindowsAPI.Сервисы,функцииипроцедурыНесколькотерминоввдокументацииWindowsдляпользователейипрограммистовимеетразныйсмыслвразныхконтекстах.Например,понятие«сервис»(service)можетотноситьсяквызываемойфункцииоперационнойсистемы,драйверуустройстваилисерверномупроцессу(впоследнемслучаесервисчастоназываютслужбой).Нижепоказано,чтоозначаютподобныетерминывэтойкниге.•ФункцииWindowsAPIДокументированные,вызываемыеподпрограммывWindowsAPI,напримерCreateProcess,CreateFileиGetMessage.•Неуправляемые(«родные»)системныесервисы(илиисполняемыесистемныесервисы)Недокументированныенизкоуровневыесервисыоперационнойсистемы,которыеможновызыватьвпользовательскомрежиме.Так,NtCreateProcess—этовнутрисистемныйсервис,вызываемыйWindows-функциейCreateProcessприсозданииновогопроцесса.(Определениенеуправляемыхфункцийсм.вразделе«Диспетчеризациясистемныхсервисов»главы3.)•Функции(илипроцедуры)ядраПодпрограммывнутриоперационнойсистемыWindows,которыеможновызыватьтольковрежимеядра(определениемыдадимчутьпозже).Например,ExAllocatePool—процедура,вызываемаядрайверамиустройствдлявыделенияпамятиизсистемныхкуч(динамическираспределяемыхобластейпамяти)Windows.•Windows-сервисыПроцессы,запускаемыедиспетчеромуправлениясервисамивWindows.(ХотявдокументациинареестрдрайверыустройствWindowsопределяютсякаксервисы,мынепользуемсятакимтерминомвэтойкниге.)Например,сервисTaskSchedulerвыполняетсявпроцессепользовательскогорежима,которыйподдерживаеткомандуat(аналогичнуюUNIX-командеatилиcron).•DLL(динамическиподключаемаябиблиотека)Наборвызываемыхподпрограмм,включенныхводиндвоичныйфайл,которыйприложения,использующиеэтиподпрограммы,могутдинамическизагружатьвовремясвоеговыполнения.BкачествепримераможнопривестимодулиMsvcrt.dll(библиотекаисполняющейподсистемыC)иKernel32.dll(однаизбиблиотекподсистемыWindowsAPI).DLLактивноиспользуютсякомпонентамииприложениямиWindowsпользовательскогорежима.ПреимуществоDLLнадстатическимибиблиотекамивтом,чтоприложениямогутразделятьDLL-модули,aWindowsгарантирует,чтовпамятибудетнаходитьсялишьпоодномуэкземпляруиспользуемыхDLL.Процессы,потокиизаданияХотянапервыйвзглядкажется,чтопрограммаипроцесс—понятияпрактическиодинаковые,онифундаментальноотличаютсядруготдруга.Программапредставляетсобойстатическийнаборкоманд,апроцесс—этоконтейнердлянабораресурсов,используемыхпривыполненииэкземплярапрограммы.HaсамомвысокомуровнеабстракциипроцессвWindowsвключаетследующее:•закрытоевиртуальноеадресноепространство—диапазонадресоввиртуальнойпамяти,которымможетпользоватьсяпроцесс;•исполняемуюпрограмму—начальныйкодиданные,проецируемыенавиртуальноеадресноепространствопроцесса;•списокоткрытыхописателей(handles)различныхсистемныхресурсов—семафоров,коммуникационныхпортов,файловидругихобъектов,доступныхвсемпотокамвданномпроцессе;•контекстзащиты(securitycontext),называемыймаркеромдоступа(accesstoken)иидентифицирующийпользователя,группыбезопасностиипривилегии,сопоставленныеспроцессом;•уникальныйидентификаторпроцесса(вовнутрисистемнойтерминологииназываемыйидентификаторомклиента);•минимумодинпоток.Каждыйпроцесстакжеуказываетнасвойродительскийпроцесс(процесс-создатель).Однако,еслиродительсуществует,этаинформациянеобновляется.Поэтомуестьвероятность,чтонекийпроцессуказываетнауженесуществующегородителя.Этонесоздаетникакойпроблемы,посколькуниктонеполагаетсянаналичиетакойинформации.Следующийэкспериментиллюстрируетданныйслучай.ЭКСПЕРИМЕНТ:просмотрдеревапроцессовБольшинствоутилитнеотображаеттакойуникальныйатрибут,какидентификаторродительскогопроцесса.ЗначениеэтогоатрибутаможнополучитьпрограммноилиспомощьюоснасткиPerformance,запросивзначениесчетчикаCreatingProcessID[Код(ID)создавшегопроцесса].ДеревопроцессовпоказываетсяутилитойTlist.exe(изWindowsDebuggingTools),есливыуказываетеключ/t.Вотобразецвыводаэтойкоманды:Взаимоотношенияпроцессов(дочерний-родительский)Tlistпоказываетотступами.Именапроцессов,родительскиепроцессыкоторыхнаданныймоментзавершились,выравниваютсяполевомукраю,потомучтоустановитьихродственныесвязиневозможно—дажееслипроцессы-прапредкиещесуществуют.Windowsсохраняетидентификатортолькородительскогопроцесса,такчтопроследитьегосоздателянельзя.Чтобыубедитьсявэтом,выполнитеследующиеоперации.1.Откройтеокнокоманднойстроки.2.Наберитеstartcmdдлязапускавторогоокнакоманднойстроки.3.Откройтедиспетчерзадач.4.Переключитесьнавтороеокнокоманднойстроки.5.ВведитеmspaintдлязапускаMicrosoftPaint.6.Щелкнитевтороеокнокоманднойстроки.7.Введитеexit.(Заметьте,чтоокноPaintостается.)8.Переключитесьвдиспетчерзадач.9.ОткройтееговкладкуApplications(Приложения).10.ЩелкнитеправойкнопкоймышизадачуCommandPrompt(Команднаястрока)ивыберитеGoToProcess(Перейтикпроцессам).11.ЩелкнитепроцессCmd.exe,выделенныйсерымцветом.12.Щелкнувправойкнопкоймыши,выберитекомандуEndProcessTree(Завершитьдеревопроцессов).13.BокнеTaskManagerWarning(Предупреждениедиспетчеразадач)щелкнитеYes(Да).Первоеокнокоманднойстрокиисчезнет,новыпо-прежнемусможетенаблюдатьокноPaint,таккаконоявляетсявнукомпервогоиззавершенныхпроцессовCommandPrompt.Aпосколькувторой(родительскийпроцессPaint)тожезавершен,связьмеждуродителемивнукомпотеряна.Дляпросмотра(имодификации)процессовиинформации,связаннойсними,существуетцелыйнаборутилит.Следующиеэкспериментыдемонстрируют,какполучитьтуилиинуюинформациюопроцессеспомощьюнекоторыхизэтихутилит.ОнивключаютсянепосредственновсамуWindows,атакжевWindowsSupportTools,WindowsDebuggingTools,ресурсыWindowsиPlatformSDK.Многиеизэтихутилитвыводятперекрывающиесяподмножестваинформацииобазовыхпроцессахипотоках,иногдаидентифицируемыепоразнымименам.Вероятно,наиболееширокоприменяемаяутилитадляанализаактивностипроцессов—TaskManager(Диспетчерзадач).(Любопытно,чтовядреWindowsнеттакогопонятия,какзадача,такчтоTaskManagerнасамомделеявляетсяинструментомдляуправленияпроцессами.)Следующийэкспериментпоказываетразницумеждутем,чтоTaskManagerперечисляеткакприложенияипроцессы.ЭКСПЕРИМЕНТ:просмотринформацииопроцессахчерездиспетчерзадачДиспетчерзадачWindowsотображаетсписоквыполняемыхвсистемепроцессов.Егоможнозапуститьтремяспособами:1)нажавклавишиCtrl+Shift+Esc;2)щелкнувпанельзадачправойкнопкоймышиивыбравкомандуTaskManager(Диспетчерзадач);3)нажавклавишиCtrl+Alt+Del.ПослезапускадиспетчеразадачоткройтевкладкуProcesses(Процессы).Заметьте,чтопроцессыидентифицируютсяпоимениобраза,экземплярамикоторогоониявляются.BотличиеотнекоторыхобъектоввWindowsпроцессамнельзяприсваиватьглобальныеимена.ДляпросмотраболееподробныхсведенийвыберитеизменюView(Вид)командуSelectColumns(Выбратьстолбцы)иукажите,какаядополнительнаяинформациявасинтересует.ЕсливкладкаProcessesокнадиспетчеразадачсовсейочевидностьюпо 4 дня назад
4 AbrakaDaniel AbrakaDanielhttp://apero.ruГлавнаяИграйонлайн!Конкурсоткрыт!СообщенияУчастникиМагазин(2)Создайигру!ДокументацияЗаданияiFiction.ruМыВКонтактеПрофильПривет,AbrakaDanielСейчасвонлайнеAbrakaDaniel(Vetal123)и20гостей.ПартнерыАперо:"Коллекционер"-СтрашныйквествЧелнах!Вигреилинасайтеошибка?ВыделитекстижмисюдаилиCtrl+EnterРазработчикискажутспасибо:)Навигация:http://apero.ru/Участники/Vetal123Vetal123-страницаучастникааперо-сообществаПрофильнеактивирован.Еслиэтотвойпрофиль-проверьe-mail,указанныйприрегистрации,иперейдипоссылкедляактивации.Последниекомментарии:1AbrakaDanielhttp://apero.ruГлавнаяИграйонлайн!Конкурсоткрыт!СообщенияУчастникиМагазин(2)Создайигру!ДокументацияЗаданияiFiction.ruМыВКонтактеПрофильПривет,AbrakaDanielСейчасвонлайнеAbrakaDaniel(Vetal123)и20гостей.ПартнерыАперо:"Коллекционер"-СтрашныйквествЧелнах!Вигреилинасайтеошибка?ВыделитекстижмисюдаилиCtrl+EnterРазработчикискажутспасибо:)Навигация:http://apero.ru/Участники/Vetal123Vetal123-страницаучастникааперо-сообществаПрофильнеактивирован.Еслиэтотвойпрофиль-проверьe-mail,указанныйприрегистрации,иперейдипоссылкедляактивации.Последниекомментарии:1AbrakaDanielhttp://apero.ruГлавнаяИграйонлайн!Конкурсоткрыт!СообщенияУчастникиМагазин(2)Создайигру!ДокументацияЗаданияiFiction.ruМыВКонтактеПрофильПривет,AbrakaDanielСейчасвонлайнеAbrakaDaniel(Vetal123)и20гостей.ПартнерыАперо:"Коллекционер"-СтрашныйквествЧелнах!Вигреилинасайтеошибка?ВыделитекстижмисюдаилиCtrl+EnterРазработчикискажутспасибо:)Навигация:http://apero.ru/Участники/Vetal123Vetal123-страницаучастникааперо-сообществаПрофильнеактивирован.Еслиэтотвойпрофиль-проверьe-mail,указанныйприрегистрации,иперейдипоссылкедляактивации.Последниекомментарии:1AbrakaDanielАннотация:КнигапосвященавнутреннемуустройствуиалгоритмамработыосновныхкомпонентовоперационнойсистемыMicrosoftWindows—WindowsServer2003,WindowsXPиWindows2000—ифайловойсистемыNTFS.Детальнорассмотренысистемныемеханизмы:диспетчеризацияловушекипрерываний,DPC,APC,LPC,RPC,синхронизация,системныерабочиепотоки,глобальныефлагиидр.Такжеописываютсявсеэтапызагрузкиоперационнойсистемыизавершенияееработы.Bчетвертомизданиикнигибольшевниманияуделяетсяглубокомуанализуиустранениюпроблем,из-закоторыхпроисходиткрахоперационнойсистемыилииз-закоторыхеенеудаетсязагрузить.Крометого,рассматриваютсядеталиреализацииподдержкиаппаратныхплатформAMDx64иIntelIA64.Книгасостоитиз14глав,словарятерминовипредметногоуказателя.Книгапредназначенасистемнымадминистраторам,разработчикамсерьезныхприложенийивсем,ктохочетпонять,какустроенаоперационнаясистемаWindows.Названиявсехкоманд,диалоговыхоконидругихинтерфейсныхэлементовоперационнойсистемыприведеныкакнаанглийскомязыке,такинарусском.ВерсияFb2редакции—1.5.Обошибкахпросьбасообщатьпоадресу—general2008@ukr.net.---------------------------------------------М.Руссинович,Д.СоломонВнутреннееустройствоMicrosoftWindows(главы1–4)WindowsServer™2003,WindowsXPиWindows20004-еизданиеПредысторияЯвновьпризнателенДэвидуСоломону(DavidSolomon)иМаркуРуссиновичу(MarkRussinovich)зато,чтоонипредоставилимневозможностьсказатьнесколькословоновомизданииихкниги«ВнутреннееустройствоMicrosoftWindows».Прошлоужеболеетрехлетсмоментавыходапоследнегоизданияэтойкниги,изаэтовремянасветпоявилисьдвавыпускаоперационнойсистемыWindows—оченьзначимыеобновленияклиентскойисервернойсистем.Передавторамистоялидвезадачи,которыепостоянноусложняются:отслеживаниеэволюционногоразвитиясистемыMicrosoftWindowsNTидокументированиетого,какменяласьреализацияеекомпонентоввкаждойверсии.Bэтомсмыслеавторыпроделалипростовыдающуюсяработу.(Слеванаправо)ДэвидСоломон,ДэвидКатлериМаркРуссиновичВпервыеяпознакомилсясДэвидомСоломоном,когдаемубыловсего16лет,аяработалвDigitalEquipmentCorporationнадоперационнойсистемойVMSдляVAX.Cтехпоронучаствовалвразработкеоперационныхсистем,атакжепреподавалвэтойобласти.CМаркомРуссиновичемяпознакомилсяпозже,ноужезадолгодоэтогобылнемалонаслышаноегоглубокихпознанияхвобластиоперационныхсистем.BчислеегозаслугверсияфайловойсистемыNTFS,которуюонзаставилработатьвMicrosoftWindows98,и«живой»отладчикядраWindows,позволяющийзаглянутьвнутрьсистемыWindowsвпроцессееевыполнения.ИстокиWindowsNTвосходяткоктябрю1988года,когдабылорешеносоздатьпереносимуюоперационнуюсистему,совместимуюсOS/2,поддерживающуюPOSIXимногопроцессорнуюобработку,обладающуювысокойзащищенностью,надежностьюиинтегрированнымисредствамиработывсетях.CприходомWindows3.0иееколоссальнымуспехомзаявленныецелинесколькоизменились:совместимостьсOS/2былаперенесенасуровнявсейсистемынауровеньотдельнойподсистемы.Поначалумыполагали,чтосумеемсоздатьWindowsNTзапарулет,новдействительностиееперваяверсиявышлалишьчерезчетыресполовинойгода—летом1993-го.ЭтаверсияподдерживалапроцессорыInteli386,Inteli486иMIPSR4000.ШестьнедельспустямыввелиподдержкуидляпроцессоровDigitalAlpha.ПерваяверсияWindowsNTполучиласьболеегромоздкойимедленной,чеможидалось,такчтоследующейвехойсталпроектDaytona(такназываетсяавтострадавоФлориде).Главнойцельювэтойверсиибылоуменьшениеразмерасистемы,повышениееебыстродействияи,разумеется,надежности.ЧерезполгодапослевыпускаWindowsNT3.5осенью1994-гомыподготовилиWindowsNT3.51,котораяпредставляласобойобновленнуюверсиюсдополнительнойподдержкойпроцессораIBMPowerPC.ТолчкомксозданиюследующейверсииWindowsNTсталожеланиесделатьпользовательскийинтерфейс,совместимыйсWindows95,ивключитьтехнологииCairo,уженаходившиесявразработкепарулет.Haсозданиеэтойсистемыушлоещедвагода,илетом1996годабылапредставленаWindowsNT4.0.НазваниеследующейверсииNTбылоизмененонаWindows2000.Онасталапоследнейсистемой,длякоторойодновременновыпускалиськлиентскаяисервернаяверсии.Windows2000былапостроенанатойжетехнологииWindowsNT,чтоипредыдущиеверсии,нообладалановойважнойфункциональностью,поддерживая,вчастности,ActiveDirectory.HaразработкуWindows2000ушлотрисполовинойгода,инатотпериодонабыласамойоптимизированнойинаиболеетщательнопротестированнойверсиейтехнологииWindowsNTWindows2000сталакульминациейболеечемодиннадцатилетнихразработок,реализованныхначетырехархитектурах.BконцеразработкиWindows2000мыприступиликработенадамбициознымпланомреализацииновыхверсийклиентскойисервернойсистем,которыедолжныбылипредоставитьновые,болеесовершенныевозможностипотребителямиулучшитьхарактеристикисерверов.Hoпотомсталоясно,чтореализациясерверныхсредствпривелабыкзадержкевреализацииклиентских,ипоэтомубылорешеноразделитьвыпуски.Bавгусте2001годанасветпоявилисьWindowsXPProfessionalиWindowsXPHomeEdition,aчерезгодснебольшим,вмарте2003годабылавыпущенаMicrosoftWindowsServer2003.ПомимоархитектурыIntelx86,этисистемыподдерживалиIntelIA64,благодарячемуWindowsNTвпервыевышланастезю64-разрядныхвычислений.Этакнигаединственная,гдетакглубокоиполнорассмотренывнутренниеструктурыипринципыфункционированияWindowsXPиWindowsServer2003.Крометого,онапредлагаетзаглянутьвбудущее—переводWindowsна64-разрядные«рельсы»,т.е.наееподдержкуархитектурx64(AMD64)иIntelEM64T,объявленныхAMDв2003годуиIntelвфеврале2004годасоответственно.Выпускклиентскойисервернойверсийсполнойподдержкойx64запланированнапервуюполовину2005года,ивэтойкнигесодержитсямассаинформацииовнутреннихдеталяхреализациих64-системы.Архитектурах64—этоначалоновойэрыдляWindowsNTвтотмомент,когдавремяархитектурыx86подходиткконцу.Архитектураx64обеспечиваетсовместимостьс32-разряднойх86-платформойипредоставляет64-разряднуюадресациюдлянаиболеетребовательных,совершенноновыхприложений.Этопозволитсохранитьинвестициив32-разрядноепрограммноеобеспечение,втожевремявдохнувновуюжизньвWindowsNTнаближайшеедесятилетиеилидаженаболеедлительныйпериод.ХотяназваниеNT-системызапоследниенескольколетнеоднократноменялось,онапо-прежнемуполностьюосновананаисходнойкодовойбазеWindowsNT.Hoвремябежит,появляютсяновыетехнологии,иреализациямногихвнутреннихкомпонентовифункцийзначительноизменилась.Авторыпроделаливнушительнуюработу,собравстолькодетальнойинформацииокодовойбазеWindowsNTиеереализацияхвразныхвыпускахнаразныхплатформах,атакжесоздавпримерыиутилиты,которыепомогаютчитателюразобратьсявтом,какработаюткомпонентыиподсистемыWindows.Экземплярэтойкнигидолженлежатьнастолеукаждогоразработчикасерьезногопрограммногообеспечения.ДэвидH.Катлер,заслуженныйстаршийинженеркорпорацииMicrosoftПредисловиеMicrosoftWindowsбылачастьюмоейжизницелых14лет.Заэтовремя—отверсиикверсии—нашаоперационнаясистемаразвиваласьвширьивглубь.СегодняработанадWindows—одинизсамыхважныхисложныхпроектоввмире.BвыпускеWindowsучаствуютболее5000инженеров.СредипользователейWindowsестьпредставителиужепочтивсехкультур,онаиспользуетсякакнакрупныхпредприятиях,такималенькимидетьми.ПользователиWindowsпостояннотребуютеесовершенствованияпрактическивовсехсферах—отэффективнойработынакрупнейшихсерверахдоприменениявдошкольномобучении.Windowsпоставляетсявсамыхразныхипостасях—отвстраиваемыхверсийивыпусковдлямедиа-центровдоредакцийдляцентровобработкиданных.ВсеэтипродуктыопираютсянаодниитежебазовыекомпонентыWindows,которыеразвиваютсяисовершенствуютсявкаждойновойверсии.ЭтофундаментальнаякнигаовнутреннемустройствебазовыхкомпонентовWindows.ЕсливыхотитекакможнобыстрееосвоитьпринципывнутреннейработыWindows,тогдаэтакнигадлявас.Освоениевсехчастейстольосновательногопродукта—задачаустрашающая.Hoесливыначнетесбазовыхконцепцийсистемы,сложитьфрагментыголоволомкивоединобудетгораздолегче.CэволюциейсамойWindowsразвиваетсяиэтакнига—сейчаспубликуетсяеечетвертоеиздание.МыужедавноиспользуемеедляобученияновыхсотрудниковMicrosoft,такчтопредлагаемыевамматериалыпроверенынапрактике.Есливывродеменя,значит,вамтоженравитсяразбиратьсявтом,какустроенывещи.Чтениекнижектипа«какиспользоватьто-тоито-то»меняникогданеудовлетворяло.Когдапонимаешь,какименноустроенавещь,пользуешьсяеюгораздоэффективнееи,честноговоря,сбольшимудовольствием.ЕсливасинтересуетWindows«сизнанки»,вывыбралиподходящуюкнигу.ДэвидиМаркпроделалипревосходнуюработу,написавкнигуотехнической«изнанке»Windows.Aинструменты,которыеонипредлагаютвам,—отличноесредстводлясамостоятельногообученияидиагностики.Прочитавэтукнигу,выбудетегораздолучшепонимать,каквзаимодействуютмеждусобойразличныекомпонентыиподсистемы,какиеусовершенствованиявнесенывновуюверсиюикаквыжатьизнихмаксимумвозможного.Этобылдолгийпуть—ионвсеещепродолжается.Такчтооткрывайтекнигу,азаодноикапот,подкоторымбьетсясердцеоднойизсамыхпотрясающихоперационныхсистем.ДжимОлчин,вице-президентгруппыплатформкорпорацииMicrosoftБлагодарностиBпервуюочередьмыхотимособопоблагодаритьследующихлюдей.•ДэйваКатлера(DaveCutler),заслуженногостаршегоинженераипервогоархитектораMicrosoftWindowsNT.ДэйвразрешилДэвидуСоломону(DavidSolomon)доступкисходномукодуивсяческиподдерживалегопреподавательскуюдеятельность,посвященнуюобъяснениюдеталейвнутреннегоустройстваWindowsNT,атакжеегоработунадвторымитретьимизданиемкниги.Помиморецензированияглавыпопроцессамипотокам,ДэйвответилнамассувопросовобархитектуреядраинаписалобисториисозданияWindowsдлянашейкниги.•ДжимаОлчинаJimAllchin),нашегоглавногоспонсора,—запредисловиекэтойкнигеизаотстаиваниеинтересовнашегоделавMicrosoft.•РобаШорта(RobShort),вице-президента,которыйпозаботилсяотом,чтобынампредоставилиресурсыидоступкнужнымлюдям.МытакжевыражаемпризнательностьдвумразработчикамизотделаWindowsзаподготовкуновыхматериалов,включенныхвэтоиздание:•АдриануМаринеску(AdrianMarinescu),которыйнаписалзаметноразросшийсяразделподиспетчерукучвглаве,гдерассматриваетсядиспетчерпамяти.•СамеруАрафеху(SamerArafeh),которыйпредоставилматериалыпоWow64.Спасибонашемустаромуприятелю,ДжеффриРихтеруJeffreyRichter),скоторыммычастовместеобедаем,заврезку«Какнасчет.NETиWinFX?»вглаве1изапостоянноенапоминаниеотом,какмалолюдей,по-настоящемуинтересующихсятем,очеммыговоримвсвоейкниге.Bэтойкнигенебылобытакойглубиныиточностиизложениятехническихсведенийбезподдержки,замечанийипредложенийключевыхчленовкомандыразработчиковMicrosoftWindows.Вотэтилюди:Былиидругие,ктоотвечалнанашивопросывкоридорахиликафетериях,—еслимываспропустили,пожалуйста,проститенас!МытакжевыражаемблагодарностьДжеймиХанраханJamieHanrahan)изAziusDeveloperTraining(www.azius.com),котораявсоавторствесДэвидомподготовилаучебныйкурсповнутреннейархитектуреисходнойверсииWindows.Haосновеэтогокурсабылонаписановтороеизданиеэтойкниги.Джейми,укоторойнастоящийталантдоходчивообъяснятьсложнейшиевещи,предоставиланамотдельныематериалы,атакжерядсхемииллюстраций.СпасибоДэйвуПроберту(DaveProbert)зато,чторазместилвсетинашичерновыематериалыдляраспространениясредирецензентоввнутриMicrosoft.БлагодаримДжонатанаСлавза(JonathanSloves)изAMD,спомощьюкоторогонампредоставилитестовыесистемыAMD64;ониоченьпомоглинамвнаписанииматериаловпо64-разряднойархитектуреивпереносерядаутилитSysinternalsнаплатформуx64.Наконец,мыхотимвыразитьблагодарностьследующимсотрудникамMicrosoftPressзаихвкладвэтукнигу.•РобинуВан-Штеенбергу(RobinvanSteenburgh),рецензентуиздательства,затерпениевработеснаминадэтимпроектом.•СаллиСтикни(SallyStickney),котораянапервыхпорахпо-прежнемубыларедакторомнашегопроекта,нопотомеезакрутилводоворотадминистративныхдел.Мыоченьскучалибезвас!•ВалериВулли(ValerieWoolley),котораяпринялабраздыправленияотСаллиисталанашимновымредакторомпроекта.Вызамечательнаяинетакаярезкая,какСалли!•РоджеруЛебланку(RogerLeBlanc),которыйодолелвсеглавыисумелсократитьвнихтекст,найтинесогласованностиивообщедовестинашурукописьдовысокихстандартовMicrosoftPress.ДэвидСоломониМаркРуссиновичсентябрь2004г.ВведениеЧетвертоеизданиеэтойкнигиориентированонаквалифицированныхспециалистов(программистов,разработчиковисистемныхадминистраторов),желающихразобратьсявпринципахвнутреннейработыосновныхкомпонентовоперационныхсистемMicrosoftWindows2000,MicrosoftWindowsXPиMicrosoftWindowsServer2003.Знаяих,разработчикисмогутприниматьболееэффективныерешениянаэтапахпроектированияприложенийдляплатформыWindows.Такиезнанияпомогутпрограммистамивотладке—приустранениисложныхпроблем.Информация,изложеннаявкниге,будеттакжеполезнасистемнымадминистраторам:пониманиетого,какустроенаиработаетоперационнаясистема,упроститимоптимизациюсвоихсистемиустранениенеполадоквслучаекаких-либосбоев.Прочитавэтукнигу,вылучшепоймете,какфункционируетWindowsипочемуонаведетсебяименнотак,анекак-тоиначе.СтруктуракнигиПервыедвеглавызакладываютфундамент,вводятерминыиконцепции,используемыевовсейкниге.Следующиетриглавыописываютключевыемеханизмыоперационнойсистемы.BследующихвосьмиглавахдетальнорассматриваютсябазовыекомпонентыWindows—процессы,потокиизадания,управлениепамятью,защита,подсистемаввода-вывода,управлениевнешнейпамятью,диспетчеркэша,файловыесистемыиподдержкасетей.Наконец,впоследнейглавепоясняется,какпроводитьанализаварийныхдамповпамяти.ИсториянаписаниякнигиЭточетвертоеизданиекниги,котораяизначальноназывалась«InsideWindowsNT»(MicrosoftPress,1992)ибыланаписанаХеленКастер(HelenCuster)ещедовыпускаMicrosoftWindowsNT3.1.ОнасталапервойкнигойпоWindowsNTипредставляласобойглубокийобзорархитектурыэтойсистемы.Второеиздание,«InsideWindowsNT»(MicrosoftPress,1998),былонаписаноДэвидомСоломоном.BнеговошлановаяинформацияпоWindowsNT4.0,асамакнигасталагораздоболееглубокой.Третьеиздание,«InsideWindows2000»(MicrosoftPress,2000),былоподготовленоДэвидомСоломономиМаркомРуссиновичем.Bнемпоявилосьмногоновыхтематическихразделов,втомчислепоэтапамзагрузкиизавершенияработысистемы,внутреннемуустройствусервисовиреестра,подрайверамфайловыхсистем,поддержкесетей,атакжепоновойфункциональностиядраWindows2000,напримермоделиWDM,PlugandPlay,WMI,шифрованию,TerminalServicesидр.ОсобенностичетвертогоизданияНовоеизданиедополненоинформациейобизмененияхвядре,которыебыливнесенывWindowsXPиWindowsServer2003,втомчислекасающихсяподдержки64-разрядныхсистем.Материалыдляэкспериментовтакжебылиобновлены,чтобыотразитьизменениявусовершенствованныхутилитахинаучитьваспользоватьсяновымиинструментами,которыхнебылонамоментподготовкитретьегоиздания.ТаккакотличияновыхверсийWindowsотWindows2000относительноневелики(посравнениюсразличиямимеждуWindowsNT4.0иWindows2000),основнаячастькнигиравноприменимакWindows2000,WindowsXPиWindowsServer2003.Поэтому,еслинеоговореноиное,всесказанноеотноситсяковсемтремверсиям.ИнструментыдляпроведенияэкспериментовДажебездоступакисходномукодусуществующиеинструментывродеотладчикаядрапозволяютмногоепрояснитьвовнутреннемустройствеWindows.Bтомместе,гдедлядемонстрациикакого-либоаспектаповеденияWindowsиспользуетсятотилиинойинструмент,воврезке«Эксперимент»даютсяинструкциипоегоприменению.Такиеврезкичастовстречаютсявкниге,имырекомендуемвампроделыватьэтиэкспериментывпроцессечтения:наглядноувидев,какведетсебяWindowsвконкретнойситуации,выгораздолучшеусвоитепрочитанныйматериал.Тематика,нерассматриваемаявкнигеWindows—большаяисложнаяоперационнаясистема.Нельзяобъятьнеобъятное,ипоэтомуосновноевниманиевкнигеуделяетсятолькобазовымсистемнымкомпонентам.Например,мынерассматриваемCOM+,инфраструктуруобъектно-ориентированногопрограммированияраспределенныхприложенийдляWindows,или.NETFramework,платформудляследующегопоколенияприложенийсуправляемымкодом.ПосколькунашакнигаовнутреннемустройствеWindows,анеотом,какпользоватьсяэтойоперационнойсистемой,программироватьдлянееилиадминистрироватьсистемы,созданныенаееоснове,выненайдетездесьникакихсведенийобиспользовании,программированиииконфигурированииWindows.ПодводныекамниBкнигеописываютсянедокументированныевнутренниеструктурыифункцииядра,архитектураиразличныеаспектывнутреннейработыWindows,ичастьтакихструктурифункцийможетизменитьсявследующемвыпускеэтойоперационнойсистемы.(Впрочем,внешниеинтерфейсывродеWindowsAPIвсегдасохраняютсовместимостьсаналогичнымиинтерфейсамивочередныхвыпусках.)Говоря«можетизмениться»,мынеимеемввиду,чтодеталиустройствасистемыобязательноизменятсявследующемвыпуске,алишьобращаемвниманиенато,чтодостоверностьинформациигарантируетсяисключительнодляданныхверсий.Любоепрограммноеобеспечение,использующеенедокументированныеинтерфейсы,можетперестатьработатьвбудущихверсияхWindows.Болеетого,такоепрограммноеобеспечение,еслионоработаетврежимеядра(как,например,драйверыустройств),можетпривестиккрахуболееновыхверсийWindows.ТехническаяподдержкаМыприложилимаксимумусилий,чтобынедопуститьнеточностейиошибоквкниге.Еслиувасвозникнуткакие-либопроблемыиливопросы,пожалуйста,обращайтесьпоадресам,указаннымвследующихдвухразделах.ОтавторовЭтакнигаотнюдьнесовершенна.Несомненновнейестькакие-тонеточности;можетбыть,мыупустиличто-товажное.Есливынайдетето,чтосчитаетеошибочным,илиесливысочтете,чтовкнигуследуетвключитьдополнительныйматериал,пожалуйста,пошлитесвоесообщениепоадресуwindowsinternals@sysinternals.com.Обновленияиисправлениябудутвыкладыватьсянастраницуwwwsysinternals.com/windowsinternals*ОтMicrosoftPressMicrosoftпубликуетисправленияккнигампоадресуhttp://www.microsoftcom/learning/support.ДляпрямогоподключениякMicrosoftLearningKnowledgeBaseивводазапросапопроблеме,скоторойвыстолкнулись,заходитенастраницуhttp://www.microsoft.comflearning/support/search.asp.Bпереводеучтеныисправления,опубликованныенаэтойWeb-странице,посостояниюна1июля2005года.—Прим.перев.ГЛABA1КонцепциииинструментыBэтойглавемыпознакомимвассосновнымиконцепциямиитерминамиоперационнойсистемыMicrosoftWindows,которыебудутиспользоватьсявпоследующихглавах,втомчислесWindowsAPI,процессами,потоками,виртуальнойпамятью,режимомядраипользовательскимрежимом,объектами,описателями(handles),защитой,реестром.Мытакжерасскажемобинструментах,спомощьюкоторыхвысможетеисследоватьвнутреннееустройствоWindows.Kнимотносятся,например,отладчикядра,оснасткаPerformanceиважнейшиеутилитыссайтаwww.sysinternals.com.Крометого,мыпоясним,какпользоватьсяWindowsDeviceDriverKit(DDK)иPlatformSoftwareDevelopmentKit(SDK)вкачествеисточникадополнительнойинформацииовнутреннемустройствеWindows.Выдолжныхорошопониматьвсе,чтонаписановэтойглаве,—востальнойчастикнигимыпредполагаемименнотак.ВерсииоперационныхсистемWindowsЭтакнигаохватываеттрипоследниеверсииоперационнойсистемыMicrosoftWindows,основанныенакодовойбазеWindowsNT:Windows2000,WindowsXP(32-и64-разрядныеверсии)иWindowsServer2003(32-и64-разрядныеверсии).Текстотноситсяковсемтремверсиям,еслинеоговореноиное.Bтаблице1–1перечисленывыпускикодовойбазыWindowsNT,номераверсийиназванияпродуктов.WindowsNTиWindows95ПрипервомвыпускеWindowsNTкомпанияMicrosoftдалаяснопонять,чтоэтодолгосрочнаязаменаWindows95(иеепоследующихвыпусков—Windows98иWindowsMillenniumEdition).ВотсписокнекоторыхархитектурныхразличийипреимуществWindowsNT(иеепоследующихвыпусков)надWindows95(иеепоследующимивыпусками).•WindowsNTподдерживаетмногопроцессорныесистемы,aWindows95—нет.•ФайловаясистемаWindowsNTподдерживаетсредствазащиты,напримеруправлениеизбирательнымдоступом(discretionaryaccesscontrol).BфайловойсистемеWindows95этогонет.•WindowsNT—полностью32-разрядная(атеперьи64-разрядная)операционнаясистема,внейнет16-разрядногокода,крометого,которыйпредназначендлявыполнения16-разрядныхWindows-приложений.Windows95содержитбольшойобъемстарого16-разрядногокодаизпредшествующихоперационныхсистем—Windows3.1nMS-DOS.•WindowsNTполностьюреентерабельна,амногиечастиWindows95нереентерабельны(восновномэтокасается16-разрядногокода,взятогоизWindows3.1).Большинствофункций,связанныхсграфикойиуправлениемокнами(GDIиUSER),включаютименнонереентерабельныйкод.Когда32-разрядноеприложениевWindows95пытаетсявызватьсистемныйсервис,реализованныйкакнереентерабельный16-разрядныйкод,онодолжносначалаполучитьобщесистемнуюблокировку(илимьютекс),чтобыпредотвратитьвходдругихпотоковвнереентерабельнуюкодовуюбазу.Ещехуже,что16-разрядноеприложениеудерживаеттакуюблокировкувтечениевсеговременисвоеговыполнения.Bитоге,хотяядроWindows95содержит32-разрядныйпланировщиксподдержкоймно-гопоточностиивытесняющеймногозадачности,приложениячастоработаюткакоднопоточныеиз-затого,чтобольшаячастьсистемыреализованакакнереентерабельныйкод.•WindowsNTпозволяетвыполнять16-разрядныеWindows-приложенияввыделенномадресномпространстве,aWindows95всегдавыполняеттакиеприложениявобщемадресномпространстве,вкоторомонимогутнавредитьдругдругуипривестикзависаниюсистемы.•Разделяемая(общая)памятьпроцессавWindowsNTвиднатолькотемпроцессам,которыеимеютпроекциюнаодинитотжеблокразделяемойпамяти.BWindows95всяобщаяпамятьвиднаидоступнадлязаписивсемпроцессам.Такимобразом,любойпроцессможетчто-тозаписатьиповредитькакие-тоданныевобщейпамяти,используемыедругимипроцессами.•Некоторыекритическиважныестраницыпамяти,занимаемыеоперационнойсистемойWindows95,доступныдлязаписиизпользовательскогорежима,азначит,обычноеприложениеможетповредитьсодержимоеэтихстраниципривестиккрахусистемы.Единственное,чтоумеетWindows95ичегоникогданесмогутделатьоперационныесистемынаосновеWindowsNT,—выполнятьвсестарыепрограммыдляMS-DOSиWindows3.1(аименнопрограммы,требующиепрямогодоступакоборудованию),атакже16-разрядныедрайверыустройствMS-DOS.ЕслиоднойизосновныхцелейразработкиWindows95была100%-ясовместимостьсMS-DOSиWindows3.1,тоисходнойцельюразработкиWindowsNT—возможностьвыполнениябольшинствасуществующих16-разрядныхприложенийприусловиисохраненияцелостностиинадежностисистемы.БазовыеконцепцииитерминыBкнигебудутчастовстречатьсяссылкинаконцепциииструктуры,скоторыминекоторыечитатели,возможно,незнакомы.Здесьмыопределимсясиспользуемойвдальнейшемтерминологией.WindowsAPIЭтосистемныйинтерфейспрограммированиявсемействеоперационныхсистемMicrosoftWindows,включаяWindows2000,WindowsXP,WindowsServer2003,Windows95,Windows98,WindowsMillenniumEdition(Me)иWindowsCE.КаждаяоперационнаясистемареализуетразноеподмножествоWindowsAPI.Windows95,Windows98,WindowsMeиWindowsCEвэтойкнигенерассматриваются.ПРИМЕЧАНИЕWindowsAPIописываетсявдокументацииPlatformSoftwareDevelopmentKit(SDK).(См.раздел«PlatformSoftwareDevelopmentKit(SDK)»далеевэтойглаве.)Этудокументациюможнобесплатнопросмотретьнасайтеmsdn.microsoft.com.ОнатакжепоставляетсясMicrosoftDeveloperNetwork(MSDN)всехуровнейподписки.(MSDN—этопрограммаMicrosoftдляподдержкиразработчиков.Подробностисм.насайтеmsdn.microsqft.com.)Отличноеописаниетого,какпрограммироватьсиспользованиембазовогоWindowsAPI,см.вчетвертомизданиикнигиДжеффриРихтераJeffreyRichter)«MicrosoftWindowsдляпрофессионалов»(РусскаяРедакция,2000).Допоявления64-разрядныхверсийWindowsXPиWindowsServer2003интерфейспрограммирования32-разрядныхверсийоперационныхсистемWindowsназывалсяWin32API,чтобыотличатьегоотисходного16-разрядногоWindowsAPI.Bэтойкнигетермин«WindowsAPI»относитсяк32-разрядномуинтерфейсупрограммированияWindows2000,атакжек32-и64-разрядныминтерфейсампрограммированияWindowsXPиWindowsServer2003.WindowsAPIвключаеттысячивызываемыхфункций,которыесгруппированывследующиеосновныекатегории:•базовыесервисы(BaseServices);•сервисыкомпонентов(ComponentServices);•сервисыпользовательскогоинтерфейса(UserInterfaceServices);•сервисыграфикиимультимедиа(GraphicsandMultimediaServices);•коммуникационноевзаимодействиеисовместнаяработа(MessagingandCollaboration);•сети(Networking);•Web-сервисы(WebServices).Основноевниманиевнашейкнигеуделяетсявнутреннемуустройствуключевыхбазовыхсервисов,вчастностиподдержкипроцессовипотоков(threads),управленияпамятью,ввода-выводаизащиты.Какнасчет.NETиWinFX?NETFrameworkсостоитизбиблиотекиклассов,называемойFrameworkClassLibrary(FCL),иобщеязыковойисполняющейсреды(CommonLanguageRuntime,CLR),котораяпредоставляетсредудлявыполненияуправляемогокодастакимивозможностями,каккомпиляцияпотребованию(just-in-timecompilation,JITcompilation),верификациятипов,сбормусораизащитапоправамдоступакода(codeaccesssecurity).БлагодаряэтомуCLRсоздаетсредуразработки,котораяповышаетпродуктивностьтрудапрограммистовиуменьшаетвероятностьпоявленияраспространенныхошибокпрограммирования.Отличноеописание.NETFrameworkиеебазовойархитектурысм.вкнигеДжеффриРихтера«ПрограммированиенаплатформеMicrosoft.NETFrame-work»(РусскаяРедакция,2003).CLRреализованакакклассическийСОМ-сервер,кодкоторойхранитсявстандартнойWindowsDLLпользовательскогорежима.Фактическивсекомпоненты.NETFrameworkреализованыкакстандартныеWindowsDLLпользовательскогорежима,занимающиеуровеньповерхнеуправляемыхфункцийWindowsAPL(Никакиекомпоненты.NETFrameworkнеработаютврежимеядра.)Haрис.1–1показанывзаимосвязиэтихкомпонентов.WinFX—«новыйWindowsAPI».Эторезультатэволюционногоразвития.NETFramework,котораябудетпоставлятьсясверсиейWindowsподкодовымназванием«Longhorn»,следующимвыпускомWindows.WinFXтакжеможноустановитьвWindowsXPиWindowsServer2003.WinFXобразуетфундаментдляприложенийследующегопоколения,создаваемыхдляоперационнойсистемыWindows.ИсториясозданияWin32APIИнтересно,чтопоначалуWin32нерассматривалсякакинтерфейспрограммированиядляMicrosoftWindowsNT.ПосколькупроектWindowsNTначиналсякакзаменаOS/2версии2,основныминтерфейсомпрограммированиябыл32-разрядныйOS/2PresentationManagerAPI.ОднакогодспустянарынкепоявиласьMicrosoftWindows3.0,быстроставшаяоченьпопулярной.BрезультатеMicrosoftсменилакурсиперенацелилапроектWindowsNTнабудущуюзаменусемействапродуктовWindows,анеOS/2.Вотнаэтом-топерепутьеивсталвопрососозданииWindowsAPI—доэтогоWindowsAPIсуществовалтолькокак16-разрядныйинтерфейс.ХотявWindowsAPIдолжнобылопоявитьсямногоновыхфункций,отсутствующихвWindows3.1,MicrosoftрешиласделатьновыйAPIповозможностисовместимымсименамифункций,семантикойитипамиданныхв16-разрядномWindowsAPI,чтобымаксимальнооблегчитьбремяпереносасуществующих16-разрядныхWindows-приложенийвWindowsNTПоэтомутот,кто,впервыеглядянаWindowsAPI,удивляется,почемумногиеименаиинтерфейсыфункцийкажутсяпротиворечивыми,долженучитывать,чтооднойизпричинтакойпротиворечивостибылостремлениесделатьWindowsAPIсовместимымсостарым16-разряднымWindowsAPI.Сервисы,функцииипроцедурыНесколькотерминоввдокументацииWindowsдляпользователейипрограммистовимеетразныйсмыслвразныхконтекстах.Например,понятие«сервис»(service)можетотноситьсяквызываемойфункцииоперационнойсистемы,драйверуустройстваилисерверномупроцессу(впоследнемслучаесервисчастоназываютслужбой).Нижепоказано,чтоозначаютподобныетерминывэтойкниге.•ФункцииWindowsAPIДокументированные,вызываемыеподпрограммывWindowsAPI,напримерCreateProcess,CreateFileиGetMessage.•Неуправляемые(«родные»)системныесервисы(илиисполняемыесистемныесервисы)Недокументированныенизкоуровневыесервисыоперационнойсистемы,которыеможновызыватьвпользовательскомрежиме.Так,NtCreateProcess—этовнутрисистемныйсервис,вызываемыйWindows-функциейCreateProcessприсозданииновогопроцесса.(Определениенеуправляемыхфункцийсм.вразделе«Диспетчеризациясистемныхсервисов»главы3.)•Функции(илипроцедуры)ядраПодпрограммывнутриоперационнойсистемыWindows,которыеможновызыватьтольковрежимеядра(определениемыдадимчутьпозже).Например,ExAllocatePool—процедура,вызываемаядрайверамиустройствдлявыделенияпамятиизсистемныхкуч(динамическираспределяемыхобластейпамяти)Windows.•Windows-сервисыПроцессы,запускаемыедиспетчеромуправлениясервисамивWindows.(ХотявдокументациинареестрдрайверыустройствWindowsопределяютсякаксервисы,мынепользуемсятакимтерминомвэтойкниге.)Например,сервисTaskSchedulerвыполняетсявпроцессепользовательскогорежима,которыйподдерживаеткомандуat(аналогичнуюUNIX-командеatилиcron).•DLL(динамическиподключаемаябиблиотека)Наборвызываемыхподпрограмм,включенныхводиндвоичныйфайл,которыйприложения,использующиеэтиподпрограммы,могутдинамическизагружатьвовремясвоеговыполнения.BкачествепримераможнопривестимодулиMsvcrt.dll(библиотекаисполняющейподсистемыC)иKernel32.dll(однаизбиблиотекподсистемыWindowsAPI).DLLактивноиспользуютсякомпонентамииприложениямиWindowsпользовательскогорежима.ПреимуществоDLLнадстатическимибиблиотекамивтом,чтоприложениямогутразделятьDLL-модули,aWindowsгарантирует,чтовпамятибудетнаходитьсялишьпоодномуэкземпляруиспользуемыхDLL.Процессы,потокиизаданияХотянапервыйвзглядкажется,чтопрограммаипроцесс—понятияпрактическиодинаковые,онифундаментальноотличаютсядруготдруга.Программапредставляетсобойстатическийнаборкоманд,апроцесс—этоконтейнердлянабораресурсов,используемыхпривыполненииэкземплярапрограммы.HaсамомвысокомуровнеабстракциипроцессвWindowsвключаетследующее:•закрытоевиртуальноеадресноепространство—диапазонадресоввиртуальнойпамяти,которымможетпользоватьсяпроцесс;•исполняемуюпрограмму—начальныйкодиданные,проецируемыенавиртуальноеадресноепространствопроцесса;•списокоткрытыхописателей(handles)различныхсистемныхресурсов—семафоров,коммуникационныхпортов,файловидругихобъектов,доступныхвсемпотокамвданномпроцессе;•контекстзащиты(securitycontext),называемыймаркеромдоступа(accesstoken)иидентифицирующийпользователя,группыбезопасностиипривилегии,сопоставленныеспроцессом;•уникальныйидентификаторпроцесса(вовнутрисистемнойтерминологииназываемыйидентификаторомклиента);•минимумодинпоток.Каждыйпроцесстакжеуказываетнасвойродительскийпроцесс(процесс-создатель).Однако,еслиродительсуществует,этаинформациянеобновляется.Поэтомуестьвероятность,чтонекийпроцессуказываетнауженесуществующегородителя.Этонесоздаетникакойпроблемы,посколькуниктонеполагаетсянаналичиетакойинформации.Следующийэкспериментиллюстрируетданныйслучай.ЭКСПЕРИМЕНТ:просмотрдеревапроцессовБольшинствоутилитнеотображаеттакойуникальныйатрибут,какидентификаторродительскогопроцесса.ЗначениеэтогоатрибутаможнополучитьпрограммноилиспомощьюоснасткиPerformance,запросивзначениесчетчикаCreatingProcessID[Код(ID)создавшегопроцесса].ДеревопроцессовпоказываетсяутилитойTlist.exe(изWindowsDebuggingTools),есливыуказываетеключ/t.Вотобразецвыводаэтойкоманды:Взаимоотношенияпроцессов(дочерний-родительский)Tlistпоказываетотступами.Именапроцессов,родительскиепроцессыкоторыхнаданныймоментзавершились,выравниваютсяполевомукраю,потомучтоустановитьихродственныесвязиневозможно—дажееслипроцессы-прапредкиещесуществуют.Windowsсохраняетидентификатортолькородительскогопроцесса,такчтопроследитьегосоздателянельзя.Чтобыубедитьсявэтом,выполнитеследующиеоперации.1.Откройтеокнокоманднойстроки.2.Наберитеstartcmdдлязапускавторогоокнакоманднойстроки.3.Откройтедиспетчерзадач.4.Переключитесьнавтороеокнокоманднойстроки.5.ВведитеmspaintдлязапускаMicrosoftPaint.6.Щелкнитевтороеокнокоманднойстроки.7.Введитеexit.(Заметьте,чтоокноPaintостается.)8.Переключитесьвдиспетчерзадач.9.ОткройтееговкладкуApplications(Приложения).10.ЩелкнитеправойкнопкоймышизадачуCommandPrompt(Команднаястрока)ивыберитеGoToProcess(Перейтикпроцессам).11.ЩелкнитепроцессCmd.exe,выделенныйсерымцветом.12.Щелкнувправойкнопкоймыши,выберитекомандуEndProcessTree(Завершитьдеревопроцессов).13.BокнеTaskManagerWarning(Предупреждениедиспетчеразадач)щелкнитеYes(Да).Первоеокнокоманднойстрокиисчезнет,новыпо-прежнемусможетенаблюдатьокноPaint,таккаконоявляетсявнукомпервогоиззавершенныхпроцессовCommandPrompt.Aпосколькувторой(родительскийпроцессPaint)тожезавершен,связьмеждуродителемивнукомпотеряна.Дляпросмотра(имодификации)процессовиинформации,связаннойсними,существуетцелыйнаборутилит.Следующиеэкспериментыдемонстрируют,какполучитьтуилиинуюинформациюопроцессеспомощьюнекоторыхизэтихутилит.ОнивключаютсянепосредственновсамуWindows,атакжевWindowsSupportTools,WindowsDebuggingTools,ресурсыWindowsиPlatformSDK.Многиеизэтихутилитвыводятперекрывающиесяподмножестваинформацииобазовыхпроцессахипотоках,иногдаидентифицируемыепоразнымименам.Вероятно,наиболееширокоприменяемаяутилитадляанализаактивностипроцессов—TaskManager(Диспетчерзадач).(Любопытно,чтовядреWindowsнеттакогопонятия,какзадача,такчтоTaskManagerнасамомделеявляетсяинструментомдляуправленияпроцессами.)Следующийэкспериментпоказываетразницумеждутем,чтоTaskManagerперечисляеткакприложенияипроцессы.ЭКСПЕРИМЕНТ:просмотринформацииопроцессахчерездиспетчерзадачДиспетчерзадачWindowsотображаетсписоквыполняемыхвсистемепроцессов.Егоможнозапуститьтремяспособами:1)нажавклавишиCtrl+Shift+Esc;2)щелкнувпанельзадачправойкнопкоймышиивыбравкомандуTaskManager(Диспетчерзадач);3)нажавклавишиCtrl+Alt+Del.ПослезапускадиспетчеразадачоткройтевкладкуProcesses(Процессы).Заметьте,чтопроцессыидентифицируютсяпоимениобраза,экземплярамикоторогоониявляются.BотличиеотнекоторыхобъектоввWindowsпроцессамнельзяприсваиватьглобальныеимена.ДляпросмотраболееподробныхсведенийвыберитеизменюView(Вид)командуSelectColumns(Выбратьстолбцы)иукажите,какаядополнительнаяинформациявасинтересует.ЕсливкладкаProcessesокнадиспетчеразадачсовсейочевидностьюпо 4 дня назад
5 AbrakaDaniel
http://apero.ru
Главная
Играй онлайн!
Конкурс открыт!
Сообщения
Участники
Магазин (2)
Создай игру!
Документация
Задания
iFiction.ru
Мы ВКонтакте

Профиль
Привет, AbrakaDaniel
Сейчас в онлайне AbrakaDaniel (Vetal123) и 20 гостей.
Партнеры Аперо:
"Коллекционер" - Страшный квест в Челнах!

В игре или на сайте ошибка?
Выдели текст и жми сюда или Ctrl+Enter
Разработчики скажут спасибо :)
Навигация:http://apero.ru / Участники / Vetal123
Vetal123 - страница участника аперо-сообщества

Профиль не активирован. Если это твой профиль - проверь e-mail, указанный при регистрации, и перейди по ссылке для активации.
Последние комментарии:

1 AbrakaDaniel 26 был отпр только что
2 AbrakaDaniel
http://apero.ru
Главная
Играй онлайн!
Конкурс открыт!
Сообщения
Участники
Магазин (2)
Создай игру!
Документация
Задания
iFiction.ru
Мы ВКонтакте
Профиль
Привет, AbrakaDaniel
Сейчас в онлайне AbrakaDaniel (Vetal123) и 20 гостей.
Партнеры Аперо:
"Коллекционер" - Страшный квест в Челнах!
В игре или на сайте ошибка?
Выдели текст и жми сюда или Ctrl+Enter
Разработчики скажут спасибо :)
Навигация:http://apero.ru / Участники / Vetal123
Vetal123 - страница участника аперо-сообщества
Профиль не активирован. Если это твой профиль - проверь e-mail, указанный при регистрации, и перейди по ссылке для активации.
Последние комментарии:
1 AbrakaDaniel
http://apero.ru
Главная
Играй онлайн!
Конкурс открыт!
Сообщения
Участники
Магазин (2)
Создай игру!
Документация
Задания
iFiction.ru
Мы ВКонтакте
Профиль
Привет, AbrakaDaniel
Сейчас в онлайне AbrakaDaniel (Vetal123) и 20 гостей.
Партнеры Аперо:
"Коллекционер" - Страшный квест в Челнах!
В игре или на сайте ошибка?
Выдели текст и жми сюда или Ctrl+Enter
Разработчики скажут спасибо :)
Навигация:http://apero.ru / Участники / Vetal123
Vetal123 - страница участника аперо-сообщества
Профиль не активирован. Если это твой профиль - проверь e-mail, указанный при регистрации, и перейди по ссылке для активации.
Последние комментарии:
1 AbrakaDaniel
http://apero.ru
Главная
Играй онлайн!
Конкурс открыт!
Сообщения
Участники
Магазин (2)
Создай игру!
Документация
Задания
iFiction.ru
Мы ВКонтакте
Профиль
Привет, AbrakaDaniel
Сейчас в онлайне AbrakaDaniel (Vetal123) и 20 гостей.
Партнеры Аперо:
"Коллекционер" - Страшный квест в Челнах!
В игре или на сайте ошибка?
Выдели текст и жми сюда или Ctrl+Enter
Разработчики скажут спасибо :)
Навигация:http://apero.ru / Участники / Vetal123
Vetal123 - страница участника аперо-сообщества
Профиль не активирован. Если это твой профиль - проверь e-mail, указанный при регистрации, и перейди по ссылке для активации.
Последние комментарии:
1 AbrakaDaniel
http://apero.ru
Главная
Играй онлайн!
Конкурс открыт!
Сообщения
Участники
Магазин (2)
Создай игру!
Документация
Задания
iFiction.ru
Мы ВКонтакте
Профиль
Привет, AbrakaDaniel
Сейчас в онлайне AbrakaDaniel (Vetal123) и 20 гостей.
Партнеры Аперо:
"Коллекционер" - Страшный квест в Челнах!
В игре или на сайте ошибка?
Выдели текст и жми сюда или Ctrl+Enter
Разработчики скажут спасибо :)
Навигация:http://apero.ru / Участники / Vetal123
Vetal123 - страница участника аперо-сообщества
Профиль не активирован. Если это твой профиль - проверь e-mail, указанный при регистрации, и перейди по ссылке для активации.
Последние комментарии:
1 AbrakaDaniel
http://apero.ru
Главная
Играй онлайн!
Конкурс открыт!
Сообщения
Участники
Магазин (2)
Создай игру!
Документация
Задания
iFiction.ru
Мы ВКонтакте
Профиль
Привет, AbrakaDaniel
Сейчас в онлайне AbrakaDaniel (Vetal123) и 20 гостей.
Партнеры Аперо:
"Коллекционер" - Страшный квест в Челнах!
В игре или на сайте ошибка?
Выдели текст и жми сюда или Ctrl+Enter
Разработчики скажут спасибо :)
Навигация:http://apero.ru / Участники / Vetal123
Vetal123 - страница участника аперо-сообщества
Профиль не активирован. Если это твой профиль - проверь e-mail, указанный при регистрации, и перейди по ссылке для активации.
Последние комментарии:
1 AbrakaDaniel Аннотация: Книга посвящена внутреннему устройству и алгоритмам работы основных компонентов операционной системы Microsoft Windows — Windows Server 2003, Windows XP и Windows 2000 — и файловой системы NTFS. Детально рассмотрены системные механизмы: диспетчеризация ловушек и прерываний, DPC, APC, LPC, RPC, синхронизация, системные рабочие потоки, глобальные флаги и др. Также описываются все этапы загрузки операционной системы и завершения ее работы. B четвертом издании книги больше внимания уделяется глубокому анализу и устранению проблем, из-за которых происходит крах операционной системы или из-за которых ее не удается загрузить. Кроме того, рассматриваются детали реализации поддержки аппаратных платформ AMD x64 и Intel IA64. Книга состоит из 14 глав, словаря терминов и предметного указателя. Книга предназначена системным администраторам, разработчикам серьезных приложений и всем, кто хочет понять, как устроена операционная система Windows.
Названия всех команд, диалоговых окон и других интерфейсных элементов операционной системы приведены как на английском языке, так и на русском.
Версия Fb2 редакции — 1.5 . Об ошибках просьба сообщать по адресу — general2008@ukr.net.
---------------------------------------------
М.Руссинович, Д.Соломон
Внутреннее устройство Microsoft Windows (главы 1–4)
Windows Server™ 2003, Windows XP и Windows 2000
4-е издание
Предыстория
Я вновь признателен Дэвиду Соломону (David Solomon) и Марку Руссиновичу (Mark Russinovich) за то, что они предоставили мне возможность сказать несколько слов о новом издании их книги «Внутреннее устройство Microsoft Windows». Прошло уже более трех лет с момента выхода последнего издания этой книги, и за это время на свет появились два выпуска операционной системы Windows — очень значимые обновления клиентской и серверной систем.
Перед авторами стояли две задачи, которые постоянно усложняются: отслеживание эволюционного развития системы Microsoft Windows NT и документирование того, как менялась реализация ее компонентов в каждой версии. B этом смысле авторы проделали просто выдающуюся работу.
(Слева направо) Дэвид Соломон, Дэвид Катлер и Марк Руссинович
Впервые я познакомился с Дэвидом Соломоном, когда ему было всего 16 лет, а я работал в Digital Equipment Corporation над операционной системой VMS для VAX. C тех пор он участвовал в разработке операционных систем, а также преподавал в этой области. C Марком Руссиновичем я познакомился позже, но уже задолго до этого был немало наслышан о его глубоких познаниях в области операционных систем. B числе его заслуг версия файловой системы NTFS, которую он заставил работать в Microsoft Windows 98, и «живой» отладчик ядра Windows, позволяющий заглянуть внутрь системы Windows в процессе ее выполнения.
Истоки Windows NT восходят к октябрю 1988 года, когда было решено создать переносимую операционную систему, совместимую с OS/2, поддерживающую POSIX и многопроцессорную обработку, обладающую высокой защищенностью, надежностью и интегрированными средствами работы в сетях. C приходом Windows 3.0 и ее колоссальным успехом заявленные цели несколько изменились: совместимость с OS/2 была перенесена с уровня всей системы на уровень отдельной подсистемы.
Поначалу мы полагали, что сумеем создать Windows NT за пару лет, но в действительности ее первая версия вышла лишь через четыре с половиной года — летом 1993-го. Эта версия поддерживала процессоры Intel i386, Intel i486 и MIPS R4000. Шесть недель спустя мы ввели поддержку и для процессоров Digital Alpha.
Первая версия Windows NT получилась более громоздкой и медленной, чем ожидалось, так что следующей вехой стал проект Daytona (так называется автострада во Флориде). Главной целью в этой версии было уменьшение размера системы, повышение ее быстродействия и, разумеется, надежности. Через полгода после выпуска Windows NT 3.5 осенью 1994-го мы подготовили Windows NT 3.51, которая представляла собой обновленную версию с дополнительной поддержкой процессора IBM PowerPC.
Толчком к созданию следующей версии Windows NT стало желание сделать пользовательский интерфейс, совместимый с Windows 95, и включить технологии Cairo, уже находившиеся в разработке пару лет. Ha создание этой системы ушло еще два года, и летом 1996 года была представлена Windows NT 4.0.
Название следующей версии NT было изменено на Windows 2000. Она стала последней системой, для которой одновременно выпускались клиентская и серверная версии. Windows 2000 была построена на той же технологии Windows NT, что и предыдущие версии, но обладала новой важной функциональностью, поддерживая, в частности, Active Directory. Ha разработку Windows 2000 ушло три с половиной года, и на тот период она была самой оптимизированной и наиболее тщательно протестированной версией технологии Windows NT Windows 2000 стала кульминацией более чем одиннадцатилетних разработок, реализованных на четырех архитектурах.
B конце разработки Windows 2000 мы приступили к работе над амбициозным планом реализации новых версий клиентской и серверной систем, которые должны были предоставить новые, более совершенные возможности потребителям и улучшить характеристики серверов. Ho потом стало ясно, что реализация серверных средств привела бы к задержке в реализации клиентских, и поэтому было решено разделить выпуски. B августе 2001 года на свет появились Windows XP Professional и Windows XP Home Edition, a через год с небольшим, в марте 2003 года была выпущена Microsoft Windows Server 2003. Помимо архитектуры Intel x86, эти системы поддерживали Intel IA64, благодаря чему Windows NT впервые вышла на стезю 64-разрядных вычислений.
Эта книга единственная, где так глубоко и полно рассмотрены внутренние структуры и принципы функционирования Windows XP и Windows Server
2003. Кроме того, она предлагает заглянуть в будущее — перевод Windows на 64-разрядные «рельсы», т. е. на ее поддержку архитектур x64 (AMD64) и Intel EM64T, объявленных AMD в 2003 году и Intel в феврале 2004 года соответственно. Выпуск клиентской и серверной версий с полной поддержкой x64 запланирован на первую половину 2005 года, и в этой книге содержится масса информации о внутренних деталях реализации х64-системы.
Архитектура х64 — это начало новой эры для Windows NT в тот момент, когда время архитектуры x86 подходит к концу. Архитектура x64 обеспечивает совместимость с 32-разрядной х86-платформой и предоставляет 64-разрядную адресацию для наиболее требовательных, совершенно новых приложений. Это позволит сохранить инвестиции в 32-разрядное программное обеспечение, в то же время вдохнув новую жизнь в Windows NT на ближайшее десятилетие или даже на более длительный период.
Хотя название NT-системы за последние несколько лет неоднократно менялось, она по-прежнему полностью основана на исходной кодовой базе Windows NT. Ho время бежит, появляются новые технологии, и реализация многих внутренних компонентов и функций значительно изменилась. Авторы проделали внушительную работу, собрав столько детальной информации о кодовой базе Windows NT и ее реализациях в разных выпусках на разных платформах, а также создав примеры и утилиты, которые помогают читателю разобраться в том, как работают компоненты и подсистемы Windows. Экземпляр этой книги должен лежать на столе у каждого разработчика серьезного программного обеспечения.
Дэвид H. Катлер, заслуженный старший инженер корпорации Microsoft
Предисловие
Microsoft Windows была частью моей жизни целых 14 лет. За это время — от версии к версии — наша операционная система развивалась вширь и вглубь. Сегодня работа над Windows — один из самых важных и сложных проектов в мире. B выпуске Windows участвуют более 5000 инженеров. Среди пользователей Windows есть представители уже почти всех культур, она используется как на крупных предприятиях, так и маленькими детьми. Пользователи Windows постоянно требуют ее совершенствования практически во всех сферах — от эффективной работы на крупнейших серверах до применения в дошкольном обучении. Windows поставляется в самых разных ипостасях — от встраиваемых версий и выпусков для медиа-центров до редакций для центров обработки данных. Все эти продукты опираются на одни и те же базовые компоненты Windows, которые развиваются и совершенствуются в каждой новой версии.
Это фундаментальная книга о внутреннем устройстве базовых компонентов Windows. Если вы хотите как можно быстрее освоить принципы внутренней работы Windows, тогда эта книга для вас. Освоение всех частей столь основательного продукта — задача устрашающая. Ho если вы начнете с базовых концепций системы, сложить фрагменты головоломки воедино будет гораздо легче. C эволюцией самой Windows развивается и эта книга — сейчас публикуется ее четвертое издание. Мы уже давно используем ее для обучения новых сотрудников Microsoft, так что предлагаемые вам материалы проверены на практике.
Если вы вроде меня, значит, вам тоже нравится разбираться в том, как устроены вещи. Чтение книжек типа «как использовать то-то и то-то» меня никогда не удовлетворяло. Когда понимаешь, как именно устроена вещь, пользуешься ею гораздо эффективнее и, честно говоря, с большим удовольствием. Если вас интересует Windows «с изнанки», вы выбрали подходящую книгу.
Дэвид и Марк проделали превосходную работу, написав книгу о технической «изнанке» Windows. A инструменты, которые они предлагают вам, — отличное средство для самостоятельного обучения и диагностики. Прочитав эту книгу, вы будете гораздо лучше понимать, как взаимодействуют между собой различные компоненты и подсистемы, какие усовершенствования внесены в новую версию и как выжать из них максимум возможного.
Это был долгий путь — и он все еще продолжается. Так что открывайте книгу, а заодно и капот, под которым бьется сердце одной из самых потрясающих операционных систем.
Джим Олчин, вице-президент группы платформ корпорации Microsoft
Благодарности
B первую очередь мы хотим особо поблагодарить следующих людей.
• Дэйва Катлера (Dave Cutler), заслуженного старшего инженера и первого архитектора Microsoft Windows NT. Дэйв разрешил Дэвиду Соломону (David Solomon) доступ к исходному коду и всячески поддерживал его преподавательскую деятельность, посвященную объяснению деталей внутреннего устройства Windows NT, а также его работу над вторым и третьим изданием книги. Помимо рецензирования главы по процессам и потокам, Дэйв ответил на массу вопросов об архитектуре ядра и написал об истории создания Windows для нашей книги.
• Джима Олчина Jim Allchin), нашего главного спонсора, — за предисловие к этой книге и за отстаивание интересов нашего дела в Microsoft.
• Роба Шорта (Rob Short), вице-президента, который позаботился о том, чтобы нам предоставили ресурсы и доступ к нужным людям.
Мы также выражаем признательность двум разработчикам из отдела Windows за подготовку новых материалов, включенных в это издание:
• Адриану Маринеску (Adrian Marinescu), который написал заметно разросшийся раздел по диспетчеру куч в главе, где рассматривается диспетчер памяти.
• Самеру Арафеху (Samer Arafeh), который предоставил материалы по Wow64.
Спасибо нашему старому приятелю, Джеффри Рихтеру Jeffrey Richter), с которым мы часто вместе обедаем, за врезку «Как насчет. NET и WinFX?» в главе 1 и за постоянное напоминание о том, как мало людей, по-настоящему интересующихся тем, о чем мы говорим в своей книге.
B этой книге не было бы такой глубины и точности изложения технических сведений без поддержки, замечаний и предложений ключевых членов команды разработчиков Microsoft Windows. Вот эти люди:
Были и другие, кто отвечал на наши вопросы в коридорах или кафетериях, — если мы вас пропустили, пожалуйста, простите нас!
Мы также выражаем благодарность Джейми Ханрахан Jamie Hanrahan) из Azius Developer Training (www.azius.com), которая в соавторстве с Дэвидом подготовила учебный курс по внутренней архитектуре исходной версии Windows. Ha основе этого курса было написано второе издание этой книги. Джейми, у которой настоящий талант доходчиво объяснять сложнейшие вещи, предоставила нам отдельные материалы, а также ряд схем и иллюстраций.
Спасибо Дэйву Проберту (Dave Probert) за то, что разместил в сети наши черновые материалы для распространения среди рецензентов внутри Microsoft.
Благодарим Джонатана Славза (Jonathan Sloves) из AMD, с помощью которого нам предоставили тестовые системы AMD64; они очень помогли нам в написании материалов по 64-разрядной архитектуре и в переносе ряда утилит Sysinternals на платформу x64.
Наконец, мы хотим выразить благодарность следующим сотрудникам Microsoft Press за их вклад в эту книгу.
• Робину Ван-Штеенбергу (Robin van Steenburgh), рецензенту издательства, за терпение в работе с нами над этим проектом.
• Салли Стикни (Sally Stickney), которая на первых порах по-прежнему была редактором нашего проекта, но потом ее закрутил водоворот административных дел. Мы очень скучали без вас!
• Валери Вулли (Valerie Woolley), которая приняла бразды правления от Салли и стала нашим новым редактором проекта. Вы замечательная и не такая резкая, как Салли!
• Роджеру Лебланку (Roger LeBlanc), который одолел все главы и сумел сократить в них текст, найти несогласованности и вообще довести нашу рукопись до высоких стандартов Microsoft Press.
Дэвид Соломон и Марк Руссинович сентябрь 2004 г.
Введение
Четвертое издание этой книги ориентировано на квалифицированных специалистов (программистов, разработчиков и системных администраторов), желающих разобраться в принципах внутренней работы основных компонентов операционных систем Microsoft Windows 2000, Microsoft Windows XP и Microsoft Windows Server 2003. Зная их, разработчики смогут принимать более эффективные решения на этапах проектирования приложений для платформы Windows. Такие знания помогут программистам и в отладке — при устранении сложных проблем. Информация, изложенная в книге, будет также полезна системным администраторам: понимание того, как устроена и работает операционная система, упростит им оптимизацию своих систем и устранение неполадок в случае каких-либо сбоев. Прочитав эту книгу, вы лучше поймете, как функционирует Windows и почему она ведет себя именно так, а не как-то иначе.
Структура книги
Первые две главы закладывают фундамент, вводя термины и концепции, используемые во всей книге. Следующие три главы описывают ключевые механизмы операционной системы. B следующих восьми главах детально рассматриваются базовые компоненты Windows — процессы, потоки и задания, управление памятью, защита, подсистема ввода-вывода, управление внешней памятью, диспетчер кэша, файловые системы и поддержка сетей. Наконец, в последней главе поясняется, как проводить анализ аварийных дампов памяти.
История написания книги
Это четвертое издание книги, которая изначально называлась «Inside Windows NT» (Microsoft Press, 1992) и была написана Хелен Кастер (Helen Custer) еще до выпуска Microsoft Windows NT 3.1. Она стала первой книгой по Windows NT и представляла собой глубокий обзор архитектуры этой системы. Второе издание, «Inside Windows NT» (Microsoft Press, 1998), было написано Дэвидом Соломоном. B него вошла новая информация по Windows NT 4.0, а сама книга стала гораздо более глубокой. Третье издание, «Inside Windows 2000» (Microsoft Press, 2000), было подготовлено Дэвидом Соломоном и Марком Руссиновичем. B нем появилось много новых тематических разделов, в том числе по этапам загрузки и завершения работы системы, внутреннему устройству сервисов и реестра, по драйверам файловых систем, поддержке сетей, а также по новой функциональности ядра Windows 2000, например модели WDM, Plug and Play, WMI, шифрованию, Terminal Services и др.
Особенности четвертого издания
Новое издание дополнено информацией об изменениях в ядре, которые были внесены в Windows XP и Windows Server 2003, в том числе касающихся поддержки 64-разрядных систем. Материалы для экспериментов также были обновлены, чтобы отразить изменения в усовершенствованных утилитах и научить вас пользоваться новыми инструментами, которых не было на момент подготовки третьего издания.
Так как отличия новых версий Windows от Windows 2000 относительно невелики (по сравнению с различиями между Windows NT 4.0 и Windows 2000), основная часть книги равно применима к Windows 2000, Windows XP и Windows Server 2003. Поэтому, если не оговорено иное, все сказанное относится ко всем трем версиям.
Инструменты для проведения экспериментов
Даже без доступа к исходному коду существующие инструменты вроде отладчика ядра позволяют многое прояснить во внутреннем устройстве Windows. B том месте, где для демонстрации какого-либо аспекта поведения Windows используется тот или иной инструмент, во врезке «Эксперимент» даются инструкции по его применению. Такие врезки часто встречаются в книге, и мы рекомендуем вам проделывать эти эксперименты в процессе чтения: наглядно увидев, как ведет себя Windows в конкретной ситуации, вы гораздо лучше усвоите прочитанный материал.
Тематика, не рассматриваемая в книге
Windows — большая и сложная операционная система. Нельзя объять необъятное, и поэтому основное внимание в книге уделяется только базовым системным компонентам. Например, мы не рассматриваем COM+, инфраструктуру объектно-ориентированного программирования распределенных приложений для Windows, или. NET Framework, платформу для следующего поколения приложений с управляемым кодом.
Поскольку наша книга о внутреннем устройстве Windows, а не о том, как пользоваться этой операционной системой, программировать для нее или администрировать системы, созданные на ее основе, вы не найдете здесь никаких сведений об использовании, программировании и конфигурировании Windows.
Подводные камни
B книге описываются недокументированные внутренние структуры и функции ядра, архитектура и различные аспекты внутренней работы Windows, и часть таких структур и функций может измениться в следующем выпуске этой операционной системы. (Впрочем, внешние интерфейсы вроде Windows API всегда сохраняют совместимость с аналогичными интерфейсами в очередных выпусках.)
Говоря «может измениться», мы не имеем в виду, что детали устройства системы обязательно изменятся в следующем выпуске, а лишь обращаем внимание на то, что достоверность информации гарантируется исключительно для данных версий. Любое программное обеспечение, использующее недокументированные интерфейсы, может перестать работать в будущих версиях Windows. Более того, такое программное обеспечение, если оно работает в режиме ядра (как, например, драйверы устройств), может привести к краху более новых версий Windows.
Техническая поддержка
Мы приложили максимум усилий, чтобы не допустить неточностей и ошибок в книге. Если у вас возникнут какие-либо проблемы или вопросы, пожалуйста, обращайтесь по адресам, указанным в следующих двух разделах.
От авторов
Эта книга отнюдь не совершенна. Несомненно в ней есть какие-то неточности; может быть, мы упустили что-то важное. Если вы найдете то, что считаете ошибочным, или если вы сочтете, что в книгу следует включить дополнительный материал, пожалуйста, пошлите свое сообщение по адресу windowsinternals@sysinternals.com . Обновления и исправления будут выкладываться на страницу wwwsysinternals.com/windowsinternals*
От Microsoft Press
Microsoft публикует исправления к книгам по адресу http://www.microsoftcom/learning/support. Для прямого подключения к Microsoft Learning Knowledge Base и ввода запроса по проблеме, с которой вы столкнулись, заходите на страницу http://www.microsoft.comflearning/support/search.asp .
B переводе учтены исправления, опубликованные на этой Web-странице, по состоянию на 1 июля 2005 года. — Прим. перев.
ГЛABA 1 Концепции и инструменты
B этой главе мы познакомим вас с основными концепциями и терминами операционной системы Microsoft Windows, которые будут использоваться в последующих главах, в том числе с Windows API, процессами, потоками, виртуальной памятью, режимом ядра и пользовательским режимом, объектами, описателями (handles), защитой, реестром. Мы также расскажем об инструментах, с помощью которых вы сможете исследовать внутреннее устройство Windows. K ним относятся, например, отладчик ядра, оснастка Performance и важнейшие утилиты с сайта www.sysinternals.com . Кроме того, мы поясним, как пользоваться Windows Device Driver Kit (DDK) и Platform Software Development Kit (SDK) в качестве источника дополнительной информации о внутреннем устройстве Windows.
Вы должны хорошо понимать все, что написано в этой главе, — в остальной части книги мы предполагаем именно так.
Версии операционных систем Windows
Эта книга охватывает три последние версии операционной системы Microsoft Windows, основанные на кодовой базе Windows NT: Windows 2000, Windows XP (32- и 64-разрядные версии) и Windows Server 2003 (32- и 64-разрядные версии). Текст относится ко всем трем версиям, если не оговорено иное. B таблице 1–1 перечислены выпуски кодовой базы Windows NT, номера версий и названия продуктов.
Windows NT и Windows 95
При первом выпуске Windows NT компания Microsoft дала ясно понять, что это долгосрочная замена Windows 95 (и ее последующих выпусков — Windows 98 и Windows Millennium Edition). Вот список некоторых архитектурных различий и преимуществ Windows NT (и ее последующих выпусков) над Windows 95 (и ее последующими выпусками).
• Windows NT поддерживает многопроцессорные системы, a Windows 95 — нет.
• Файловая система Windows NT поддерживает средства защиты, например управление избирательным доступом (discretionary access control). B файловой системе Windows 95 этого нет.
• Windows NT — полностью 32-разрядная (а теперь и 64-разрядная) операционная система, в ней нет 16-разрядного кода, кроме того, который предназначен для выполнения 16-разрядных Windows-приложений. Windows 95 содержит большой объем старого 16-разрядного кода из предшествующих операционных систем — Windows 3.1 nMS-DOS.
• Windows NT полностью реентерабельна, а многие части Windows 95 нереентерабельны (в основном это касается 16-разрядного кода, взятого из Windows 3.1 ). Большинство функций, связанных с графикой и управлением окнами (GDI и USER), включают именно нереентерабельный код. Когда 32-разрядное приложение в Windows 95 пытается вызвать системный сервис, реализованный как нереентерабельный 16-разрядный код, оно должно сначала получить общесистемную блокировку (или мьютекс), чтобы предотвратить вход других потоков в нереентерабельную кодовую базу. Еще хуже, что 16-разрядное приложение удерживает такую блокировку в течение всего времени своего выполнения. B итоге, хотя ядро Windows 95 содержит 32-разрядный планировщик с поддержкой мно-гопоточности и вытесняющей многозадачности, приложения часто работают как однопоточные из-за того, что большая часть системы реализована как нереентерабельный код.
• Windows NT позволяет выполнять 16-разрядные Windows-приложения в выделенном адресном пространстве, a Windows 95 всегда выполняет такие приложения в общем адресном пространстве, в котором они могут навредить друг другу и привести к зависанию системы.
• Разделяемая (общая) память процесса в Windows NT видна только тем процессам, которые имеют проекцию на один и тот же блок разделяемой памяти. B Windows 95 вся общая память видна и доступна для записи всем процессам. Таким образом, любой процесс может что-то записать и повредить какие-то данные в общей памяти, используемые другими процессами.
• Некоторые критически важные страницы памяти, занимаемые операционной системой Windows 95, доступны для записи из пользовательского режима, а значит, обычное приложение может повредить содержимое этих страниц и привести к краху системы. Единственное, что умеет Windows 95 и чего никогда не смогут делать операционные системы на основе Windows NT, — выполнять все старые программы для MS-DOS и Windows 3.1 (а именно программы, требующие прямого доступа к оборудованию), а также 16-разрядные драйверы устройств MS-DOS. Если одной из основных целей разработки Windows 95 была 100 %-я совместимость с MS-DOS и Windows 3.1, то исходной целью разработки Windows NT — возможность выполнения большинства существующих 16-разрядных приложений при условии сохранения целостности и надежности системы.
Базовые концепции и термины
B книге будут часто встречаться ссылки на концепции и структуры, с которыми некоторые читатели, возможно, не знакомы. Здесь мы определимся с используемой в дальнейшем терминологией.
Windows API
Это системный интерфейс программирования в семействе операционных систем Microsoft Windows, включая Windows 2000, Windows XP, Windows Server 2003, Windows 95, Windows 98, Windows Millennium Edition (Me) и Windows CE. Каждая операционная система реализует разное подмножество Windows API. Windows 95, Windows 98, Windows Me и Windows CE в этой книге не рассматриваются.
ПРИМЕЧАНИЕ Windows API описывается в документации Platform Software Development Kit (SDK). (См. раздел «Platform Software Development Kit (SDK)» далее в этой главе.) Этудокументацию можно бесплатно просмотреть на сайте msdn.microsoft.com. Она также поставляется с Microsoft Developer Network (MSDN) всех уровней подписки. (MSDN — это программа Microsoft для поддержки разработчиков. Подробности см. на сайте msdn.microsqft.com.) Отличное описание того, как программировать с использованием базового Windows API, см. в четвертом издании книги Джеффри Рихтера Jeffrey Richter) «Microsoft Windows для профессионалов» (Русская Редакция, 2000).
До появления 64-разрядных версий Windows XP и Windows Server 2003 интерфейс программирования 32-разрядных версий операционных систем Windows назывался Win32 API, чтобы отличать его от исходного 16-разрядного Windows API. B этой книге термин «Windows API» относится к 32-разрядному интерфейсу программирования Windows 2000, а также к 32- и 64-разрядным интерфейсам программирования Windows XP и Windows Server 2003.
Windows API включает тысячи вызываемых функций, которые сгруппированы в следующие основные категории:
• базовые сервисы (Base Services);
• сервисы компонентов (Component Services);
• сервисы пользовательского интерфейса (User Interface Services);
• сервисы графики и мультимедиа (Graphics and Multimedia Services);
• коммуникационное взаимодействие и совместная работа (Messaging and Collaboration);
• сети (Networking);
• Web-сервисы (Web Services).
Основное внимание в нашей книге уделяется внутреннему устройству ключевых базовых сервисов, в частности поддержки процессов и потоков (threads), управления памятью, ввода-вывода и защиты.
Как насчет. NET и WinFX?
NET Framework состоит из библиотеки классов, называемой Framework Class Library (FCL), и общеязыковой исполняющей среды (Common Language Runtime, CLR), которая предоставляет среду для выполнения управляемого кода с такими возможностями, как компиляция по требованию (just-in-time compilation, JIT compilation), верификация типов, сбор мусора и защита по правам доступа кода (code access security). Благодаря этому CLR создает среду разработки, которая повышает продуктивность труда программистов и уменьшает вероятность появления распространенных ошибок программирования. Отличное описание. NET Framework и ее базовой архитектуры см. в книге Джеффри Рихтера «Программирование на платформе Microsoft.NET Frame-work» (Русская Редакция, 2003).
CLR реализована как классический СОМ-сервер, код которой хранится в стандартной Windows DLL пользовательского режима. Фактически все компоненты. NET Framework реализованы как стандартные Windows DLL пользовательского режима, занимающие уровень поверх неуправляемых функций Windows APL (Никакие компоненты. NET Framework не работают в режиме ядра.) Ha рис. 1–1 показаны взаимосвязи этих компонентов.
WinFX — «новый Windows API». Это результат эволюционного развития. NET Framework, которая будет поставляться с версией Windows под кодовым названием «Longhorn», следующим выпуском Windows. WinFX также можно установить в Windows XP и Windows Server 2003. WinFX образует фундамент для приложений следующего поколения, создаваемых для операционной системы Windows.
История создания Win32 API
Интересно, что поначалу Win32 не рассматривался как интерфейс программирования для Microsoft Windows NT. Поскольку проект Windows NT начинался как замена OS/2 версии 2, основным интерфейсом программирования был 32-разрядный OS/2 Presentation ManagerAPI. Однако год спустя на рынке появилась Microsoft Windows 3.0, быстро ставшая очень популярной. B результате Microsoft сменила курс и перенацелила проект Windows NT на будущую замену семейства продуктов Windows, а не OS/2. Вот на этом-то перепутье и встал вопрос о создании Windows API — до этого Windows API существовал только как 16-разрядный интерфейс.
Хотя в Windows API должно было появиться много новых функций, отсутствующих в Windows 3.1, Microsoft решила сделать новый API по возможности совместимым с именами функций, семантикой и типами данных в 16-разрядном Windows API, чтобы максимально облегчить бремя переноса существующих 16-разрядных Windows-приложений в Windows NT Поэтому тот, кто, впервые глядя на Windows API, удивляется, почему многие имена и интерфейсы функций кажутся противоречивыми, должен учитывать, что одной из причин такой противоречивости было стремление сделать Windows API совместимым со старым 16-разрядным Windows API.
Сервисы, функции и процедуры
Несколько терминов в документации Windows для пользователей и программистов имеет разный смысл в разных контекстах. Например, понятие «сервис» (service) может относиться к вызываемой функции операционной системы, драйверу устройства или серверному процессу (в последнем случае сервис часто называют службой). Ниже показано, что означают подобные термины в этой книге.
• Функции Windows API Документированные, вызываемые подпрограммы в Windows API, например CreateProcess, CreateFile и GetMessage.
• Неуправляемые («родные») системные сервисы (или исполняемые системные сервисы) Недокументированные низкоуровневые сервисы операционной системы, которые можно вызывать в пользовательском режиме. Так, NtCreateProcess — это внутрисистемный сервис, вызываемый Windows-функцией CreateProcess при создании нового процесса. (Определение неуправляемых функций см. в разделе «Диспетчеризация системных сервисов» главы 3.)
• Функции (или процедуры) ядра Подпрограммы внутри операционной системы Windows, которые можно вызывать только в режиме ядра (определение мы дадим чуть позже). Например, ExAllocatePool — процедура, вызываемая драйверами устройств для выделения памяти из системных куч (динамически распределяемых областей памяти) Windows.
• Windows-сервисы Процессы, запускаемые диспетчером управления сервисами в Windows. (Хотя в документации на реестр драйверы устройств Windows определяются как сервисы, мы не пользуемся таким термином в этой книге.) Например, сервис Task Scheduler выполняется в процессе пользовательского режима, который поддерживает команду at (аналогичную UNIX-команде at или cron).
• DLL (динамически подключаемая библиотека) Набор вызываемых подпрограмм, включенных в один двоичный файл, который приложения, использующие эти подпрограммы, могут динамически загружать во время своего выполнения. B качестве примера можно привести модули Msvcrt.dll (библиотека исполняющей подсистемы C) и Kernel32.dll (одна из библиотек подсистемы Windows API). DLL активно используются компонентами и приложениями Windows пользовательского режима. Преимущество DLL над статическими библиотеками в том, что приложения могут разделять DLL-модули, a Windows гарантирует, что в памяти будет находиться лишь по одному экземпляру используемых DLL.
Процессы, потоки и задания
Хотя на первый взгляд кажется, что программа и процесс — понятия практически одинаковые, они фундаментально отличаются друг от друга. Программа представляет собой статический набор команд, а процесс — это контейнер для набора ресурсов, используемых при выполнении экземпляра программы. Ha самом высоком уровне абстракции процесс в Windows включает следующее:
• закрытое виртуальное адресное пространство — диапазон адресов виртуальной памяти, которым может пользоваться процесс;
• исполняемую программу — начальный код и данные, проецируемые на виртуальное адресное пространство процесса;
• список открытых описателей (handles) различных системных ресурсов — семафоров, коммуникационных портов, файлов и других объектов, доступных всем потокам в данном процессе;
• контекст защиты (security context), называемый маркером доступа (access token) и идентифицирующий пользователя, группы безопасности и привилегии, сопоставленные с процессом;
• уникальный идентификатор процесса (во внутрисистемной терминологии называемый идентификатором клиента);
• минимум один поток.
Каждый процесс также указывает на свой родительский процесс (процесс-создатель). Однако, если родитель существует, эта информация не обновляется. Поэтому есть вероятность, что некий процесс указывает на уже несуществующего родителя. Это не создает никакой проблемы, поскольку никто не полагается на наличие такой информации. Следующий эксперимент иллюстрирует данный случай.
ЭКСПЕРИМЕНТ: просмотр дерева процессов
Большинство утилит не отображает такой уникальный атрибут, как идентификатор родительского процесса. Значение этого атрибута можно получить программно или с помощью оснастки Performance, запросив значение счетчика Creating Process ID [Код (ID) создавшего процесса]. Дерево процессов показывается утилитой Tlist.exe (из Windows Debugging Tools), если вы указываете ключ /t. Вот образец вывода этой команды:
Взаимоотношения процессов (дочерний-родительский) Tlist показывает отступами. Имена процессов, родительские процессы которых на данный момент завершились, выравниваются по левому краю, потому что установить их родственные связи невозможно — даже если процессы-прапредки еще существуют. Windows сохраняет идентификатор только родительского процесса, так что проследить его создателя нельзя. Чтобы убедиться в этом, выполните следующие операции.
1. Откройте окно командной строки.
2. Наберите start cmd для запуска второго окна командной строки.
3. Откройте диспетчер задач.
4. Переключитесь на второе окно командной строки.
5. Введите mspaint для запуска Microsoft Paint.
6. Щелкните второе окно командной строки.
7. Введите exit. (Заметьте, что окно Paint остается.)
8. Переключитесь в диспетчер задач.
9. Откройте его вкладку Applications (Приложения).
10.Щелкните правой кнопкой мыши задачу Command Prompt (Командная строка) и выберите Go To Process (Перейти к процессам).
11. Щелкните процесс Cmd.exe, выделенный серым цветом.
12. Щелкнув правой кнопкой мыши, выберите команду End Process Tree
(Завершить дерево процессов).
13. B окне Task Manager Warning (Предупреждение диспетчера задач) щелкните Yes (Да).
Первое окно командной строки исчезнет, но вы по-прежнему сможете наблюдать окн
4 дня назад
6 AbrakaDaniel
http://apero.ru
Главная
Играй онлайн!
Конкурс открыт!
Сообщения
Участники
Магазин (2)
Создай игру!
Документация
Задания
iFiction.ru
Мы ВКонтакте

Профиль
Привет, AbrakaDaniel
Сейчас в онлайне AbrakaDaniel (Vetal123) и 20 гостей.
Партнеры Аперо:
"Коллекционер" - Страшный квест в Челнах!

В игре или на сайте ошибка?
Выдели текст и жми сюда или Ctrl+Enter
Разработчики скажут спасибо :)
Навигация:http://apero.ru / Участники / Vetal123
Vetal123 - страница участника аперо-сообщества

Профиль не активирован. Если это твой профиль - проверь e-mail, указанный при регистрации, и перейди по ссылке для активации.
Последние комментарии:

1 AbrakaDaniel 26 был отпр только что
2 AbrakaDaniel
http://apero.ru
Главная
Играй онлайн!
Конкурс открыт!
Сообщения
Участники
Магазин (2)
Создай игру!
Документация
Задания
iFiction.ru
Мы ВКонтакте
Профиль
Привет, AbrakaDaniel
Сейчас в онлайне AbrakaDaniel (Vetal123) и 20 гостей.
Партнеры Аперо:
"Коллекционер" - Страшный квест в Челнах!
В игре или на сайте ошибка?
Выдели текст и жми сюда или Ctrl+Enter
Разработчики скажут спасибо :)
Навигация:http://apero.ru / Участники / Vetal123
Vetal123 - страница участника аперо-сообщества
Профиль не активирован. Если это твой профиль - проверь e-mail, указанный при регистрации, и перейди по ссылке для активации.
Последние комментарии:
1 AbrakaDaniel
http://apero.ru
Главная
Играй онлайн!
Конкурс открыт!
Сообщения
Участники
Магазин (2)
Создай игру!
Документация
Задания
iFiction.ru
Мы ВКонтакте
Профиль
Привет, AbrakaDaniel
Сейчас в онлайне AbrakaDaniel (Vetal123) и 20 гостей.
Партнеры Аперо:
"Коллекционер" - Страшный квест в Челнах!
В игре или на сайте ошибка?
Выдели текст и жми сюда или Ctrl+Enter
Разработчики скажут спасибо :)
Навигация:http://apero.ru / Участники / Vetal123
Vetal123 - страница участника аперо-сообщества
Профиль не активирован. Если это твой профиль - проверь e-mail, указанный при регистрации, и перейди по ссылке для активации.
Последние комментарии:
1 AbrakaDaniel
http://apero.ru
Главная
Играй онлайн!
Конкурс открыт!
Сообщения
Участники
Магазин (2)
Создай игру!
Документация
Задания
iFiction.ru
Мы ВКонтакте
Профиль
Привет, AbrakaDaniel
Сейчас в онлайне AbrakaDaniel (Vetal123) и 20 гостей.
Партнеры Аперо:
"Коллекционер" - Страшный квест в Челнах!
В игре или на сайте ошибка?
Выдели текст и жми сюда или Ctrl+Enter
Разработчики скажут спасибо :)
Навигация:http://apero.ru / Участники / Vetal123
Vetal123 - страница участника аперо-сообщества
Профиль не активирован. Если это твой профиль - проверь e-mail, указанный при регистрации, и перейди по ссылке для активации.
Последние комментарии:
1 AbrakaDaniel
http://apero.ru
Главная
Играй онлайн!
Конкурс открыт!
Сообщения
Участники
Магазин (2)
Создай игру!
Документация
Задания
iFiction.ru
Мы ВКонтакте
Профиль
Привет, AbrakaDaniel
Сейчас в онлайне AbrakaDaniel (Vetal123) и 20 гостей.
Партнеры Аперо:
"Коллекционер" - Страшный квест в Челнах!
В игре или на сайте ошибка?
Выдели текст и жми сюда или Ctrl+Enter
Разработчики скажут спасибо :)
Навигация:http://apero.ru / Участники / Vetal123
Vetal123 - страница участника аперо-сообщества
Профиль не активирован. Если это твой профиль - проверь e-mail, указанный при регистрации, и перейди по ссылке для активации.
Последние комментарии:
1 AbrakaDaniel
http://apero.ru
Главная
Играй онлайн!
Конкурс открыт!
Сообщения
Участники
Магазин (2)
Создай игру!
Документация
Задания
iFiction.ru
Мы ВКонтакте
Профиль
Привет, AbrakaDaniel
Сейчас в онлайне AbrakaDaniel (Vetal123) и 20 гостей.
Партнеры Аперо:
"Коллекционер" - Страшный квест в Челнах!
В игре или на сайте ошибка?
Выдели текст и жми сюда или Ctrl+Enter
Разработчики скажут спасибо :)
Навигация:http://apero.ru / Участники / Vetal123
Vetal123 - страница участника аперо-сообщества
Профиль не активирован. Если это твой профиль - проверь e-mail, указанный при регистрации, и перейди по ссылке для активации.
Последние комментарии:
1 AbrakaDaniel Аннотация: Книга посвящена внутреннему устройству и алгоритмам работы основных компонентов операционной системы Microsoft Windows — Windows Server 2003, Windows XP и Windows 2000 — и файловой системы NTFS. Детально рассмотрены системные механизмы: диспетчеризация ловушек и прерываний, DPC, APC, LPC, RPC, синхронизация, системные рабочие потоки, глобальные флаги и др. Также описываются все этапы загрузки операционной системы и завершения ее работы. B четвертом издании книги больше внимания уделяется глубокому анализу и устранению проблем, из-за которых происходит крах операционной системы или из-за которых ее не удается загрузить. Кроме того, рассматриваются детали реализации поддержки аппаратных платформ AMD x64 и Intel IA64. Книга состоит из 14 глав, словаря терминов и предметного указателя. Книга предназначена системным администраторам, разработчикам серьезных приложений и всем, кто хочет понять, как устроена операционная система Windows.
Названия всех команд, диалоговых окон и других интерфейсных элементов операционной системы приведены как на английском языке, так и на русском.
Версия Fb2 редакции — 1.5 . Об ошибках просьба сообщать по адресу — general2008@ukr.net.
---------------------------------------------
М.Руссинович, Д.Соломон
Внутреннее устройство Microsoft Windows (главы 1–4)
Windows Server™ 2003, Windows XP и Windows 2000
4-е издание
Предыстория
Я вновь признателен Дэвиду Соломону (David Solomon) и Марку Руссиновичу (Mark Russinovich) за то, что они предоставили мне возможность сказать несколько слов о новом издании их книги «Внутреннее устройство Microsoft Windows». Прошло уже более трех лет с момента выхода последнего издания этой книги, и за это время на свет появились два выпуска операционной системы Windows — очень значимые обновления клиентской и серверной систем.
Перед авторами стояли две задачи, которые постоянно усложняются: отслеживание эволюционного развития системы Microsoft Windows NT и документирование того, как менялась реализация ее компонентов в каждой версии. B этом смысле авторы проделали просто выдающуюся работу.
(Слева направо) Дэвид Соломон, Дэвид Катлер и Марк Руссинович
Впервые я познакомился с Дэвидом Соломоном, когда ему было всего 16 лет, а я работал в Digital Equipment Corporation над операционной системой VMS для VAX. C тех пор он участвовал в разработке операционных систем, а также преподавал в этой области. C Марком Руссиновичем я познакомился позже, но уже задолго до этого был немало наслышан о его глубоких познаниях в области операционных систем. B числе его заслуг версия файловой системы NTFS, которую он заставил работать в Microsoft Windows 98, и «живой» отладчик ядра Windows, позволяющий заглянуть внутрь системы Windows в процессе ее выполнения.
Истоки Windows NT восходят к октябрю 1988 года, когда было решено создать переносимую операционную систему, совместимую с OS/2, поддерживающую POSIX и многопроцессорную обработку, обладающую высокой защищенностью, надежностью и интегрированными средствами работы в сетях. C приходом Windows 3.0 и ее колоссальным успехом заявленные цели несколько изменились: совместимость с OS/2 была перенесена с уровня всей системы на уровень отдельной подсистемы.
Поначалу мы полагали, что сумеем создать Windows NT за пару лет, но в действительности ее первая версия вышла лишь через четыре с половиной года — летом 1993-го. Эта версия поддерживала процессоры Intel i386, Intel i486 и MIPS R4000. Шесть недель спустя мы ввели поддержку и для процессоров Digital Alpha.
Первая версия Windows NT получилась более громоздкой и медленной, чем ожидалось, так что следующей вехой стал проект Daytona (так называется автострада во Флориде). Главной целью в этой версии было уменьшение размера системы, повышение ее быстродействия и, разумеется, надежности. Через полгода после выпуска Windows NT 3.5 осенью 1994-го мы подготовили Windows NT 3.51, которая представляла собой обновленную версию с дополнительной поддержкой процессора IBM PowerPC.
Толчком к созданию следующей версии Windows NT стало желание сделать пользовательский интерфейс, совместимый с Windows 95, и включить технологии Cairo, уже находившиеся в разработке пару лет. Ha создание этой системы ушло еще два года, и летом 1996 года была представлена Windows NT 4.0.
Название следующей версии NT было изменено на Windows 2000. Она стала последней системой, для которой одновременно выпускались клиентская и серверная версии. Windows 2000 была построена на той же технологии Windows NT, что и предыдущие версии, но обладала новой важной функциональностью, поддерживая, в частности, Active Directory. Ha разработку Windows 2000 ушло три с половиной года, и на тот период она была самой оптимизированной и наиболее тщательно протестированной версией технологии Windows NT Windows 2000 стала кульминацией более чем одиннадцатилетних разработок, реализованных на четырех архитектурах.
B конце разработки Windows 2000 мы приступили к работе над амбициозным планом реализации новых версий клиентской и серверной систем, которые должны были предоставить новые, более совершенные возможности потребителям и улучшить характеристики серверов. Ho потом стало ясно, что реализация серверных средств привела бы к задержке в реализации клиентских, и поэтому было решено разделить выпуски. B августе 2001 года на свет появились Windows XP Professional и Windows XP Home Edition, a через год с небольшим, в марте 2003 года была выпущена Microsoft Windows Server 2003. Помимо архитектуры Intel x86, эти системы поддерживали Intel IA64, благодаря чему Windows NT впервые вышла на стезю 64-разрядных вычислений.
Эта книга единственная, где так глубоко и полно рассмотрены внутренние структуры и принципы функционирования Windows XP и Windows Server
2003. Кроме того, она предлагает заглянуть в будущее — перевод Windows на 64-разрядные «рельсы», т. е. на ее поддержку архитектур x64 (AMD64) и Intel EM64T, объявленных AMD в 2003 году и Intel в феврале 2004 года соответственно. Выпуск клиентской и серверной версий с полной поддержкой x64 запланирован на первую половину 2005 года, и в этой книге содержится масса информации о внутренних деталях реализации х64-системы.
Архитектура х64 — это начало новой эры для Windows NT в тот момент, когда время архитектуры x86 подходит к концу. Архитектура x64 обеспечивает совместимость с 32-разрядной х86-платформой и предоставляет 64-разрядную адресацию для наиболее требовательных, совершенно новых приложений. Это позволит сохранить инвестиции в 32-разрядное программное обеспечение, в то же время вдохнув новую жизнь в Windows NT на ближайшее десятилетие или даже на более длительный период.
Хотя название NT-системы за последние несколько лет неоднократно менялось, она по-прежнему полностью основана на исходной кодовой базе Windows NT. Ho время бежит, появляются новые технологии, и реализация многих внутренних компонентов и функций значительно изменилась. Авторы проделали внушительную работу, собрав столько детальной информации о кодовой базе Windows NT и ее реализациях в разных выпусках на разных платформах, а также создав примеры и утилиты, которые помогают читателю разобраться в том, как работают компоненты и подсистемы Windows. Экземпляр этой книги должен лежать на столе у каждого разработчика серьезного программного обеспечения.
Дэвид H. Катлер, заслуженный старший инженер корпорации Microsoft
Предисловие
Microsoft Windows была частью моей жизни целых 14 лет. За это время — от версии к версии — наша операционная система развивалась вширь и вглубь. Сегодня работа над Windows — один из самых важных и сложных проектов в мире. B выпуске Windows участвуют более 5000 инженеров. Среди пользователей Windows есть представители уже почти всех культур, она используется как на крупных предприятиях, так и маленькими детьми. Пользователи Windows постоянно требуют ее совершенствования практически во всех сферах — от эффективной работы на крупнейших серверах до применения в дошкольном обучении. Windows поставляется в самых разных ипостасях — от встраиваемых версий и выпусков для медиа-центров до редакций для центров обработки данных. Все эти продукты опираются на одни и те же базовые компоненты Windows, которые развиваются и совершенствуются в каждой новой версии.
Это фундаментальная книга о внутреннем устройстве базовых компонентов Windows. Если вы хотите как можно быстрее освоить принципы внутренней работы Windows, тогда эта книга для вас. Освоение всех частей столь основательного продукта — задача устрашающая. Ho если вы начнете с базовых концепций системы, сложить фрагменты головоломки воедино будет гораздо легче. C эволюцией самой Windows развивается и эта книга — сейчас публикуется ее четвертое издание. Мы уже давно используем ее для обучения новых сотрудников Microsoft, так что предлагаемые вам материалы проверены на практике.
Если вы вроде меня, значит, вам тоже нравится разбираться в том, как устроены вещи. Чтение книжек типа «как использовать то-то и то-то» меня никогда не удовлетворяло. Когда понимаешь, как именно устроена вещь, пользуешься ею гораздо эффективнее и, честно говоря, с большим удовольствием. Если вас интересует Windows «с изнанки», вы выбрали подходящую книгу.
Дэвид и Марк проделали превосходную работу, написав книгу о технической «изнанке» Windows. A инструменты, которые они предлагают вам, — отличное средство для самостоятельного обучения и диагностики. Прочитав эту книгу, вы будете гораздо лучше понимать, как взаимодействуют между собой различные компоненты и подсистемы, какие усовершенствования внесены в новую версию и как выжать из них максимум возможного.
Это был долгий путь — и он все еще продолжается. Так что открывайте книгу, а заодно и капот, под которым бьется сердце одной из самых потрясающих операционных систем.
Джим Олчин, вице-президент группы платформ корпорации Microsoft
Благодарности
B первую очередь мы хотим особо поблагодарить следующих людей.
• Дэйва Катлера (Dave Cutler), заслуженного старшего инженера и первого архитектора Microsoft Windows NT. Дэйв разрешил Дэвиду Соломону (David Solomon) доступ к исходному коду и всячески поддерживал его преподавательскую деятельность, посвященную объяснению деталей внутреннего устройства Windows NT, а также его работу над вторым и третьим изданием книги. Помимо рецензирования главы по процессам и потокам, Дэйв ответил на массу вопросов об архитектуре ядра и написал об истории создания Windows для нашей книги.
• Джима Олчина Jim Allchin), нашего главного спонсора, — за предисловие к этой книге и за отстаивание интересов нашего дела в Microsoft.
• Роба Шорта (Rob Short), вице-президента, который позаботился о том, чтобы нам предоставили ресурсы и доступ к нужным людям.
Мы также выражаем признательность двум разработчикам из отдела Windows за подготовку новых материалов, включенных в это издание:
• Адриану Маринеску (Adrian Marinescu), который написал заметно разросшийся раздел по диспетчеру куч в главе, где рассматривается диспетчер памяти.
• Самеру Арафеху (Samer Arafeh), который предоставил материалы по Wow64.
Спасибо нашему старому приятелю, Джеффри Рихтеру Jeffrey Richter), с которым мы часто вместе обедаем, за врезку «Как насчет. NET и WinFX?» в главе 1 и за постоянное напоминание о том, как мало людей, по-настоящему интересующихся тем, о чем мы говорим в своей книге.
B этой книге не было бы такой глубины и точности изложения технических сведений без поддержки, замечаний и предложений ключевых членов команды разработчиков Microsoft Windows. Вот эти люди:
Были и другие, кто отвечал на наши вопросы в коридорах или кафетериях, — если мы вас пропустили, пожалуйста, простите нас!
Мы также выражаем благодарность Джейми Ханрахан Jamie Hanrahan) из Azius Developer Training (www.azius.com), которая в соавторстве с Дэвидом подготовила учебный курс по внутренней архитектуре исходной версии Windows. Ha основе этого курса было написано второе издание этой книги. Джейми, у которой настоящий талант доходчиво объяснять сложнейшие вещи, предоставила нам отдельные материалы, а также ряд схем и иллюстраций.
Спасибо Дэйву Проберту (Dave Probert) за то, что разместил в сети наши черновые материалы для распространения среди рецензентов внутри Microsoft.
Благодарим Джонатана Славза (Jonathan Sloves) из AMD, с помощью которого нам предоставили тестовые системы AMD64; они очень помогли нам в написании материалов по 64-разрядной архитектуре и в переносе ряда утилит Sysinternals на платформу x64.
Наконец, мы хотим выразить благодарность следующим сотрудникам Microsoft Press за их вклад в эту книгу.
• Робину Ван-Штеенбергу (Robin van Steenburgh), рецензенту издательства, за терпение в работе с нами над этим проектом.
• Салли Стикни (Sally Stickney), которая на первых порах по-прежнему была редактором нашего проекта, но потом ее закрутил водоворот административных дел. Мы очень скучали без вас!
• Валери Вулли (Valerie Woolley), которая приняла бразды правления от Салли и стала нашим новым редактором проекта. Вы замечательная и не такая резкая, как Салли!
• Роджеру Лебланку (Roger LeBlanc), который одолел все главы и сумел сократить в них текст, найти несогласованности и вообще довести нашу рукопись до высоких стандартов Microsoft Press.
Дэвид Соломон и Марк Руссинович сентябрь 2004 г.
Введение
Четвертое издание этой книги ориентировано на квалифицированных специалистов (программистов, разработчиков и системных администраторов), желающих разобраться в принципах внутренней работы основных компонентов операционных систем Microsoft Windows 2000, Microsoft Windows XP и Microsoft Windows Server 2003. Зная их, разработчики смогут принимать более эффективные решения на этапах проектирования приложений для платформы Windows. Такие знания помогут программистам и в отладке — при устранении сложных проблем. Информация, изложенная в книге, будет также полезна системным администраторам: понимание того, как устроена и работает операционная система, упростит им оптимизацию своих систем и устранение неполадок в случае каких-либо сбоев. Прочитав эту книгу, вы лучше поймете, как функционирует Windows и почему она ведет себя именно так, а не как-то иначе.
Структура книги
Первые две главы закладывают фундамент, вводя термины и концепции, используемые во всей книге. Следующие три главы описывают ключевые механизмы операционной системы. B следующих восьми главах детально рассматриваются базовые компоненты Windows — процессы, потоки и задания, управление памятью, защита, подсистема ввода-вывода, управление внешней памятью, диспетчер кэша, файловые системы и поддержка сетей. Наконец, в последней главе поясняется, как проводить анализ аварийных дампов памяти.
История написания книги
Это четвертое издание книги, которая изначально называлась «Inside Windows NT» (Microsoft Press, 1992) и была написана Хелен Кастер (Helen Custer) еще до выпуска Microsoft Windows NT 3.1. Она стала первой книгой по Windows NT и представляла собой глубокий обзор архитектуры этой системы. Второе издание, «Inside Windows NT» (Microsoft Press, 1998), было написано Дэвидом Соломоном. B него вошла новая информация по Windows NT 4.0, а сама книга стала гораздо более глубокой. Третье издание, «Inside Windows 2000» (Microsoft Press, 2000), было подготовлено Дэвидом Соломоном и Марком Руссиновичем. B нем появилось много новых тематических разделов, в том числе по этапам загрузки и завершения работы системы, внутреннему устройству сервисов и реестра, по драйверам файловых систем, поддержке сетей, а также по новой функциональности ядра Windows 2000, например модели WDM, Plug and Play, WMI, шифрованию, Terminal Services и др.
Особенности четвертого издания
Новое издание дополнено информацией об изменениях в ядре, которые были внесены в Windows XP и Windows Server 2003, в том числе касающихся поддержки 64-разрядных систем. Материалы для экспериментов также были обновлены, чтобы отразить изменения в усовершенствованных утилитах и научить вас пользоваться новыми инструментами, которых не было на момент подготовки третьего издания.
Так как отличия новых версий Windows от Windows 2000 относительно невелики (по сравнению с различиями между Windows NT 4.0 и Windows 2000), основная часть книги равно применима к Windows 2000, Windows XP и Windows Server 2003. Поэтому, если не оговорено иное, все сказанное относится ко всем трем версиям.
Инструменты для проведения экспериментов
Даже без доступа к исходному коду существующие инструменты вроде отладчика ядра позволяют многое прояснить во внутреннем устройстве Windows. B том месте, где для демонстрации какого-либо аспекта поведения Windows используется тот или иной инструмент, во врезке «Эксперимент» даются инструкции по его применению. Такие врезки часто встречаются в книге, и мы рекомендуем вам проделывать эти эксперименты в процессе чтения: наглядно увидев, как ведет себя Windows в конкретной ситуации, вы гораздо лучше усвоите прочитанный материал.
Тематика, не рассматриваемая в книге
Windows — большая и сложная операционная система. Нельзя объять необъятное, и поэтому основное внимание в книге уделяется только базовым системным компонентам. Например, мы не рассматриваем COM+, инфраструктуру объектно-ориентированного программирования распределенных приложений для Windows, или. NET Framework, платформу для следующего поколения приложений с управляемым кодом.
Поскольку наша книга о внутреннем устройстве Windows, а не о том, как пользоваться этой операционной системой, программировать для нее или администрировать системы, созданные на ее основе, вы не найдете здесь никаких сведений об использовании, программировании и конфигурировании Windows.
Подводные камни
B книге описываются недокументированные внутренние структуры и функции ядра, архитектура и различные аспекты внутренней работы Windows, и часть таких структур и функций может измениться в следующем выпуске этой операционной системы. (Впрочем, внешние интерфейсы вроде Windows API всегда сохраняют совместимость с аналогичными интерфейсами в очередных выпусках.)
Говоря «может измениться», мы не имеем в виду, что детали устройства системы обязательно изменятся в следующем выпуске, а лишь обращаем внимание на то, что достоверность информации гарантируется исключительно для данных версий. Любое программное обеспечение, использующее недокументированные интерфейсы, может перестать работать в будущих версиях Windows. Более того, такое программное обеспечение, если оно работает в режиме ядра (как, например, драйверы устройств), может привести к краху более новых версий Windows.
Техническая поддержка
Мы приложили максимум усилий, чтобы не допустить неточностей и ошибок в книге. Если у вас возникнут какие-либо проблемы или вопросы, пожалуйста, обращайтесь по адресам, указанным в следующих двух разделах.
От авторов
Эта книга отнюдь не совершенна. Несомненно в ней есть какие-то неточности; может быть, мы упустили что-то важное. Если вы найдете то, что считаете ошибочным, или если вы сочтете, что в книгу следует включить дополнительный материал, пожалуйста, пошлите свое сообщение по адресу windowsinternals@sysinternals.com . Обновления и исправления будут выкладываться на страницу wwwsysinternals.com/windowsinternals*
От Microsoft Press
Microsoft публикует исправления к книгам по адресу http://www.microsoftcom/learning/support. Для прямого подключения к Microsoft Learning Knowledge Base и ввода запроса по проблеме, с которой вы столкнулись, заходите на страницу http://www.microsoft.comflearning/support/search.asp .
B переводе учтены исправления, опубликованные на этой Web-странице, по состоянию на 1 июля 2005 года. — Прим. перев.
ГЛABA 1 Концепции и инструменты
B этой главе мы познакомим вас с основными концепциями и терминами операционной системы Microsoft Windows, которые будут использоваться в последующих главах, в том числе с Windows API, процессами, потоками, виртуальной памятью, режимом ядра и пользовательским режимом, объектами, описателями (handles), защитой, реестром. Мы также расскажем об инструментах, с помощью которых вы сможете исследовать внутреннее устройство Windows. K ним относятся, например, отладчик ядра, оснастка Performance и важнейшие утилиты с сайта www.sysinternals.com . Кроме того, мы поясним, как пользоваться Windows Device Driver Kit (DDK) и Platform Software Development Kit (SDK) в качестве источника дополнительной информации о внутреннем устройстве Windows.
Вы должны хорошо понимать все, что написано в этой главе, — в остальной части книги мы предполагаем именно так.
Версии операционных систем Windows
Эта книга охватывает три последние версии операционной системы Microsoft Windows, основанные на кодовой базе Windows NT: Windows 2000, Windows XP (32- и 64-разрядные версии) и Windows Server 2003 (32- и 64-разрядные версии). Текст относится ко всем трем версиям, если не оговорено иное. B таблице 1–1 перечислены выпуски кодовой базы Windows NT, номера версий и названия продуктов.
Windows NT и Windows 95
При первом выпуске Windows NT компания Microsoft дала ясно понять, что это долгосрочная замена Windows 95 (и ее последующих выпусков — Windows 98 и Windows Millennium Edition). Вот список некоторых архитектурных различий и преимуществ Windows NT (и ее последующих выпусков) над Windows 95 (и ее последующими выпусками).
• Windows NT поддерживает многопроцессорные системы, a Windows 95 — нет.
• Файловая система Windows NT поддерживает средства защиты, например управление избирательным доступом (discretionary access control). B файловой системе Windows 95 этого нет.
• Windows NT — полностью 32-разрядная (а теперь и 64-разрядная) операционная система, в ней нет 16-разрядного кода, кроме того, который предназначен для выполнения 16-разрядных Windows-приложений. Windows 95 содержит большой объем старого 16-разрядного кода из предшествующих операционных систем — Windows 3.1 nMS-DOS.
• Windows NT полностью реентерабельна, а многие части Windows 95 нереентерабельны (в основном это касается 16-разрядного кода, взятого из Windows 3.1 ). Большинство функций, связанных с графикой и управлением окнами (GDI и USER), включают именно нереентерабельный код. Когда 32-разрядное приложение в Windows 95 пытается вызвать системный сервис, реализованный как нереентерабельный 16-разрядный код, оно должно сначала получить общесистемную блокировку (или мьютекс), чтобы предотвратить вход других потоков в нереентерабельную кодовую базу. Еще хуже, что 16-разрядное приложение удерживает такую блокировку в течение всего времени своего выполнения. B итоге, хотя ядро Windows 95 содержит 32-разрядный планировщик с поддержкой мно-гопоточности и вытесняющей многозадачности, приложения часто работают как однопоточные из-за того, что большая часть системы реализована как нереентерабельный код.
• Windows NT позволяет выполнять 16-разрядные Windows-приложения в выделенном адресном пространстве, a Windows 95 всегда выполняет такие приложения в общем адресном пространстве, в котором они могут навредить друг другу и привести к зависанию системы.
• Разделяемая (общая) память процесса в Windows NT видна только тем процессам, которые имеют проекцию на один и тот же блок разделяемой памяти. B Windows 95 вся общая память видна и доступна для записи всем процессам. Таким образом, любой процесс может что-то записать и повредить какие-то данные в общей памяти, используемые другими процессами.
• Некоторые критически важные страницы памяти, занимаемые операционной системой Windows 95, доступны для записи из пользовательского режима, а значит, обычное приложение может повредить содержимое этих страниц и привести к краху системы. Единственное, что умеет Windows 95 и чего никогда не смогут делать операционные системы на основе Windows NT, — выполнять все старые программы для MS-DOS и Windows 3.1 (а именно программы, требующие прямого доступа к оборудованию), а также 16-разрядные драйверы устройств MS-DOS. Если одной из основных целей разработки Windows 95 была 100 %-я совместимость с MS-DOS и Windows 3.1, то исходной целью разработки Windows NT — возможность выполнения большинства существующих 16-разрядных приложений при условии сохранения целостности и надежности системы.
Базовые концепции и термины
B книге будут часто встречаться ссылки на концепции и структуры, с которыми некоторые читатели, возможно, не знакомы. Здесь мы определимся с используемой в дальнейшем терминологией.
Windows API
Это системный интерфейс программирования в семействе операционных систем Microsoft Windows, включая Windows 2000, Windows XP, Windows Server 2003, Windows 95, Windows 98, Windows Millennium Edition (Me) и Windows CE. Каждая операционная система реализует разное подмножество Windows API. Windows 95, Windows 98, Windows Me и Windows CE в этой книге не рассматриваются.
ПРИМЕЧАНИЕ Windows API описывается в документации Platform Software Development Kit (SDK). (См. раздел «Platform Software Development Kit (SDK)» далее в этой главе.) Этудокументацию можно бесплатно просмотреть на сайте msdn.microsoft.com. Она также поставляется с Microsoft Developer Network (MSDN) всех уровней подписки. (MSDN — это программа Microsoft для поддержки разработчиков. Подробности см. на сайте msdn.microsqft.com.) Отличное описание того, как программировать с использованием базового Windows API, см. в четвертом издании книги Джеффри Рихтера Jeffrey Richter) «Microsoft Windows для профессионалов» (Русская Редакция, 2000).
До появления 64-разрядных версий Windows XP и Windows Server 2003 интерфейс программирования 32-разрядных версий операционных систем Windows назывался Win32 API, чтобы отличать его от исходного 16-разрядного Windows API. B этой книге термин «Windows API» относится к 32-разрядному интерфейсу программирования Windows 2000, а также к 32- и 64-разрядным интерфейсам программирования Windows XP и Windows Server 2003.
Windows API включает тысячи вызываемых функций, которые сгруппированы в следующие основные категории:
• базовые сервисы (Base Services);
• сервисы компонентов (Component Services);
• сервисы пользовательского интерфейса (User Interface Services);
• сервисы графики и мультимедиа (Graphics and Multimedia Services);
• коммуникационное взаимодействие и совместная работа (Messaging and Collaboration);
• сети (Networking);
• Web-сервисы (Web Services).
Основное внимание в нашей книге уделяется внутреннему устройству ключевых базовых сервисов, в частности поддержки процессов и потоков (threads), управления памятью, ввода-вывода и защиты.
Как насчет. NET и WinFX?
NET Framework состоит из библиотеки классов, называемой Framework Class Library (FCL), и общеязыковой исполняющей среды (Common Language Runtime, CLR), которая предоставляет среду для выполнения управляемого кода с такими возможностями, как компиляция по требованию (just-in-time compilation, JIT compilation), верификация типов, сбор мусора и защита по правам доступа кода (code access security). Благодаря этому CLR создает среду разработки, которая повышает продуктивность труда программистов и уменьшает вероятность появления распространенных ошибок программирования. Отличное описание. NET Framework и ее базовой архитектуры см. в книге Джеффри Рихтера «Программирование на платформе Microsoft.NET Frame-work» (Русская Редакция, 2003).
CLR реализована как классический СОМ-сервер, код которой хранится в стандартной Windows DLL пользовательского режима. Фактически все компоненты. NET Framework реализованы как стандартные Windows DLL пользовательского режима, занимающие уровень поверх неуправляемых функций Windows APL (Никакие компоненты. NET Framework не работают в режиме ядра.) Ha рис. 1–1 показаны взаимосвязи этих компонентов.
WinFX — «новый Windows API». Это результат эволюционного развития. NET Framework, которая будет поставляться с версией Windows под кодовым названием «Longhorn», следующим выпуском Windows. WinFX также можно установить в Windows XP и Windows Server 2003. WinFX образует фундамент для приложений следующего поколения, создаваемых для операционной системы Windows.
История создания Win32 API
Интересно, что поначалу Win32 не рассматривался как интерфейс программирования для Microsoft Windows NT. Поскольку проект Windows NT начинался как замена OS/2 версии 2, основным интерфейсом программирования был 32-разрядный OS/2 Presentation ManagerAPI. Однако год спустя на рынке появилась Microsoft Windows 3.0, быстро ставшая очень популярной. B результате Microsoft сменила курс и перенацелила проект Windows NT на будущую замену семейства продуктов Windows, а не OS/2. Вот на этом-то перепутье и встал вопрос о создании Windows API — до этого Windows API существовал только как 16-разрядный интерфейс.
Хотя в Windows API должно было появиться много новых функций, отсутствующих в Windows 3.1, Microsoft решила сделать новый API по возможности совместимым с именами функций, семантикой и типами данных в 16-разрядном Windows API, чтобы максимально облегчить бремя переноса существующих 16-разрядных Windows-приложений в Windows NT Поэтому тот, кто, впервые глядя на Windows API, удивляется, почему многие имена и интерфейсы функций кажутся противоречивыми, должен учитывать, что одной из причин такой противоречивости было стремление сделать Windows API совместимым со старым 16-разрядным Windows API.
Сервисы, функции и процедуры
Несколько терминов в документации Windows для пользователей и программистов имеет разный смысл в разных контекстах. Например, понятие «сервис» (service) может относиться к вызываемой функции операционной системы, драйверу устройства или серверному процессу (в последнем случае сервис часто называют службой). Ниже показано, что означают подобные термины в этой книге.
• Функции Windows API Документированные, вызываемые подпрограммы в Windows API, например CreateProcess, CreateFile и GetMessage.
• Неуправляемые («родные») системные сервисы (или исполняемые системные сервисы) Недокументированные низкоуровневые сервисы операционной системы, которые можно вызывать в пользовательском режиме. Так, NtCreateProcess — это внутрисистемный сервис, вызываемый Windows-функцией CreateProcess при создании нового процесса. (Определение неуправляемых функций см. в разделе «Диспетчеризация системных сервисов» главы 3.)
• Функции (или процедуры) ядра Подпрограммы внутри операционной системы Windows, которые можно вызывать только в режиме ядра (определение мы дадим чуть позже). Например, ExAllocatePool — процедура, вызываемая драйверами устройств для выделения памяти из системных куч (динамически распределяемых областей памяти) Windows.
• Windows-сервисы Процессы, запускаемые диспетчером управления сервисами в Windows. (Хотя в документации на реестр драйверы устройств Windows определяются как сервисы, мы не пользуемся таким термином в этой книге.) Например, сервис Task Scheduler выполняется в процессе пользовательского режима, который поддерживает команду at (аналогичную UNIX-команде at или cron).
• DLL (динамически подключаемая библиотека) Набор вызываемых подпрограмм, включенных в один двоичный файл, который приложения, использующие эти подпрограммы, могут динамически загружать во время своего выполнения. B качестве примера можно привести модули Msvcrt.dll (библиотека исполняющей подсистемы C) и Kernel32.dll (одна из библиотек подсистемы Windows API). DLL активно используются компонентами и приложениями Windows пользовательского режима. Преимущество DLL над статическими библиотеками в том, что приложения могут разделять DLL-модули, a Windows гарантирует, что в памяти будет находиться лишь по одному экземпляру используемых DLL.
Процессы, потоки и задания
Хотя на первый взгляд кажется, что программа и процесс — понятия практически одинаковые, они фундаментально отличаются друг от друга. Программа представляет собой статический набор команд, а процесс — это контейнер для набора ресурсов, используемых при выполнении экземпляра программы. Ha самом высоком уровне абстракции процесс в Windows включает следующее:
• закрытое виртуальное адресное пространство — диапазон адресов виртуальной памяти, которым может пользоваться процесс;
• исполняемую программу — начальный код и данные, проецируемые на виртуальное адресное пространство процесса;
• список открытых описателей (handles) различных системных ресурсов — семафоров, коммуникационных портов, файлов и других объектов, доступных всем потокам в данном процессе;
• контекст защиты (security context), называемый маркером доступа (access token) и идентифицирующий пользователя, группы безопасности и привилегии, сопоставленные с процессом;
• уникальный идентификатор процесса (во внутрисистемной терминологии называемый идентификатором клиента);
• минимум один поток.
Каждый процесс также указывает на свой родительский процесс (процесс-создатель). Однако, если родитель существует, эта информация не обновляется. Поэтому есть вероятность, что некий процесс указывает на уже несуществующего родителя. Это не создает никакой проблемы, поскольку никто не полагается на наличие такой информации. Следующий эксперимент иллюстрирует данный случай.
ЭКСПЕРИМЕНТ: просмотр дерева процессов
Большинство утилит не отображает такой уникальный атрибут, как идентификатор родительского процесса. Значение этого атрибута можно получить программно или с помощью оснастки Performance, запросив значение счетчика Creating Process ID [Код (ID) создавшего процесса]. Дерево процессов показывается утилитой Tlist.exe (из Windows Debugging Tools), если вы указываете ключ /t. Вот образец вывода этой команды:
Взаимоотношения процессов (дочерний-родительский) Tlist показывает отступами. Имена процессов, родительские процессы которых на данный момент завершились, выравниваются по левому краю, потому что установить их родственные связи невозможно — даже если процессы-прапредки еще существуют. Windows сохраняет идентификатор только родительского процесса, так что проследить его создателя нельзя. Чтобы убедиться в этом, выполните следующие операции.
1. Откройте окно командной строки.
2. Наберите start cmd для запуска второго окна командной строки.
3. Откройте диспетчер задач.
4. Переключитесь на второе окно командной строки.
5. Введите mspaint для запуска Microsoft Paint.
6. Щелкните второе окно командной строки.
7. Введите exit. (Заметьте, что окно Paint остается.)
8. Переключитесь в диспетчер задач.
9. Откройте его вкладку Applications (Приложения).
10.Щелкните правой кнопкой мыши задачу Command Prompt (Командная строка) и выберите Go To Process (Перейти к процессам).
11. Щелкните процесс Cmd.exe, выделенный серым цветом.
12. Щелкнув правой кнопкой мыши, выберите команду End Process Tree
(Завершить дерево процессов).
13. B окне Task Manager Warning (Предупреждение диспетчера задач) щелкните Yes (Да).
Первое окно командной строки исчезнет, но вы по-прежнему сможете наблюдать окн
4 дня назад
7 AbrakaDaniel
http://apero.ru
Главная
Играй онлайн!
Конкурс открыт!
Сообщения
Участники
Магазин (2)
Создай игру!
Документация
Задания
iFiction.ru
Мы ВКонтакте

Профиль
Привет, AbrakaDaniel
Сейчас в онлайне AbrakaDaniel (Vetal123) и 20 гостей.
Партнеры Аперо:
"Коллекционер" - Страшный квест в Челнах!

В игре или на сайте ошибка?
Выдели текст и жми сюда или Ctrl+Enter
Разработчики скажут спасибо :)
Навигация:http://apero.ru / Участники / Vetal123
Vetal123 - страница участника аперо-сообщества

Профиль не активирован. Если это твой профиль - проверь e-mail, указанный при регистрации, и перейди по ссылке для активации.
Последние комментарии:

1 AbrakaDaniel 26 был отпр только что
2 AbrakaDaniel
http://apero.ru
Главная
Играй онлайн!
Конкурс открыт!
Сообщения
Участники
Магазин (2)
Создай игру!
Документация
Задания
iFiction.ru
Мы ВКонтакте
Профиль
Привет, AbrakaDaniel
Сейчас в онлайне AbrakaDaniel (Vetal123) и 20 гостей.
Партнеры Аперо:
"Коллекционер" - Страшный квест в Челнах!
В игре или на сайте ошибка?
Выдели текст и жми сюда или Ctrl+Enter
Разработчики скажут спасибо :)
Навигация:http://apero.ru / Участники / Vetal123
Vetal123 - страница участника аперо-сообщества
Профиль не активирован. Если это твой профиль - проверь e-mail, указанный при регистрации, и перейди по ссылке для активации.
Последние комментарии:
1 AbrakaDaniel
http://apero.ru
Главная
Играй онлайн!
Конкурс открыт!
Сообщения
Участники
Магазин (2)
Создай игру!
Документация
Задания
iFiction.ru
Мы ВКонтакте
Профиль
Привет, AbrakaDaniel
Сейчас в онлайне AbrakaDaniel (Vetal123) и 20 гостей.
Партнеры Аперо:
"Коллекционер" - Страшный квест в Челнах!
В игре или на сайте ошибка?
Выдели текст и жми сюда или Ctrl+Enter
Разработчики скажут спасибо :)
Навигация:http://apero.ru / Участники / Vetal123
Vetal123 - страница участника аперо-сообщества
Профиль не активирован. Если это твой профиль - проверь e-mail, указанный при регистрации, и перейди по ссылке для активации.
Последние комментарии:
1 AbrakaDaniel
http://apero.ru
Главная
Играй онлайн!
Конкурс открыт!
Сообщения
Участники
Магазин (2)
Создай игру!
Документация
Задания
iFiction.ru
Мы ВКонтакте
Профиль
Привет, AbrakaDaniel
Сейчас в онлайне AbrakaDaniel (Vetal123) и 20 гостей.
Партнеры Аперо:
"Коллекционер" - Страшный квест в Челнах!
В игре или на сайте ошибка?
Выдели текст и жми сюда или Ctrl+Enter
Разработчики скажут спасибо :)
Навигация:http://apero.ru / Участники / Vetal123
Vetal123 - страница участника аперо-сообщества
Профиль не активирован. Если это твой профиль - проверь e-mail, указанный при регистрации, и перейди по ссылке для активации.
Последние комментарии:
1 AbrakaDaniel
http://apero.ru
Главная
Играй онлайн!
Конкурс открыт!
Сообщения
Участники
Магазин (2)
Создай игру!
Документация
Задания
iFiction.ru
Мы ВКонтакте
Профиль
Привет, AbrakaDaniel
Сейчас в онлайне AbrakaDaniel (Vetal123) и 20 гостей.
Партнеры Аперо:
"Коллекционер" - Страшный квест в Челнах!
В игре или на сайте ошибка?
Выдели текст и жми сюда или Ctrl+Enter
Разработчики скажут спасибо :)
Навигация:http://apero.ru / Участники / Vetal123
Vetal123 - страница участника аперо-сообщества
Профиль не активирован. Если это твой профиль - проверь e-mail, указанный при регистрации, и перейди по ссылке для активации.
Последние комментарии:
1 AbrakaDaniel
http://apero.ru
Главная
Играй онлайн!
Конкурс открыт!
Сообщения
Участники
Магазин (2)
Создай игру!
Документация
Задания
iFiction.ru
Мы ВКонтакте
Профиль
Привет, AbrakaDaniel
Сейчас в онлайне AbrakaDaniel (Vetal123) и 20 гостей.
Партнеры Аперо:
"Коллекционер" - Страшный квест в Челнах!
В игре или на сайте ошибка?
Выдели текст и жми сюда или Ctrl+Enter
Разработчики скажут спасибо :)
Навигация:http://apero.ru / Участники / Vetal123
Vetal123 - страница участника аперо-сообщества
Профиль не активирован. Если это твой профиль - проверь e-mail, указанный при регистрации, и перейди по ссылке для активации.
Последние комментарии:
1 AbrakaDaniel Аннотация: Книга посвящена внутреннему устройству и алгоритмам работы основных компонентов операционной системы Microsoft Windows — Windows Server 2003, Windows XP и Windows 2000 — и файловой системы NTFS. Детально рассмотрены системные механизмы: диспетчеризация ловушек и прерываний, DPC, APC, LPC, RPC, синхронизация, системные рабочие потоки, глобальные флаги и др. Также описываются все этапы загрузки операционной системы и завершения ее работы. B четвертом издании книги больше внимания уделяется глубокому анализу и устранению проблем, из-за которых происходит крах операционной системы или из-за которых ее не удается загрузить. Кроме того, рассматриваются детали реализации поддержки аппаратных платформ AMD x64 и Intel IA64. Книга состоит из 14 глав, словаря терминов и предметного указателя. Книга предназначена системным администраторам, разработчикам серьезных приложений и всем, кто хочет понять, как устроена операционная система Windows.
Названия всех команд, диалоговых окон и других интерфейсных элементов операционной системы приведены как на английском языке, так и на русском.
Версия Fb2 редакции — 1.5 . Об ошибках просьба сообщать по адресу — general2008@ukr.net.
---------------------------------------------
М.Руссинович, Д.Соломон
Внутреннее устройство Microsoft Windows (главы 1–4)
Windows Server™ 2003, Windows XP и Windows 2000
4-е издание
Предыстория
Я вновь признателен Дэвиду Соломону (David Solomon) и Марку Руссиновичу (Mark Russinovich) за то, что они предоставили мне возможность сказать несколько слов о новом издании их книги «Внутреннее устройство Microsoft Windows». Прошло уже более трех лет с момента выхода последнего издания этой книги, и за это время на свет появились два выпуска операционной системы Windows — очень значимые обновления клиентской и серверной систем.
Перед авторами стояли две задачи, которые постоянно усложняются: отслеживание эволюционного развития системы Microsoft Windows NT и документирование того, как менялась реализация ее компонентов в каждой версии. B этом смысле авторы проделали просто выдающуюся работу.
(Слева направо) Дэвид Соломон, Дэвид Катлер и Марк Руссинович
Впервые я познакомился с Дэвидом Соломоном, когда ему было всего 16 лет, а я работал в Digital Equipment Corporation над операционной системой VMS для VAX. C тех пор он участвовал в разработке операционных систем, а также преподавал в этой области. C Марком Руссиновичем я познакомился позже, но уже задолго до этого был немало наслышан о его глубоких познаниях в области операционных систем. B числе его заслуг версия файловой системы NTFS, которую он заставил работать в Microsoft Windows 98, и «живой» отладчик ядра Windows, позволяющий заглянуть внутрь системы Windows в процессе ее выполнения.
Истоки Windows NT восходят к октябрю 1988 года, когда было решено создать переносимую операционную систему, совместимую с OS/2, поддерживающую POSIX и многопроцессорную обработку, обладающую высокой защищенностью, надежностью и интегрированными средствами работы в сетях. C приходом Windows 3.0 и ее колоссальным успехом заявленные цели несколько изменились: совместимость с OS/2 была перенесена с уровня всей системы на уровень отдельной подсистемы.
Поначалу мы полагали, что сумеем создать Windows NT за пару лет, но в действительности ее первая версия вышла лишь через четыре с половиной года — летом 1993-го. Эта версия поддерживала процессоры Intel i386, Intel i486 и MIPS R4000. Шесть недель спустя мы ввели поддержку и для процессоров Digital Alpha.
Первая версия Windows NT получилась более громоздкой и медленной, чем ожидалось, так что следующей вехой стал проект Daytona (так называется автострада во Флориде). Главной целью в этой версии было уменьшение размера системы, повышение ее быстродействия и, разумеется, надежности. Через полгода после выпуска Windows NT 3.5 осенью 1994-го мы подготовили Windows NT 3.51, которая представляла собой обновленную версию с дополнительной поддержкой процессора IBM PowerPC.
Толчком к созданию следующей версии Windows NT стало желание сделать пользовательский интерфейс, совместимый с Windows 95, и включить технологии Cairo, уже находившиеся в разработке пару лет. Ha создание этой системы ушло еще два года, и летом 1996 года была представлена Windows NT 4.0.
Название следующей версии NT было изменено на Windows 2000. Она стала последней системой, для которой одновременно выпускались клиентская и серверная версии. Windows 2000 была построена на той же технологии Windows NT, что и предыдущие версии, но обладала новой важной функциональностью, поддерживая, в частности, Active Directory. Ha разработку Windows 2000 ушло три с половиной года, и на тот период она была самой оптимизированной и наиболее тщательно протестированной версией технологии Windows NT Windows 2000 стала кульминацией более чем одиннадцатилетних разработок, реализованных на четырех архитектурах.
B конце разработки Windows 2000 мы приступили к работе над амбициозным планом реализации новых версий клиентской и серверной систем, которые должны были предоставить новые, более совершенные возможности потребителям и улучшить характеристики серверов. Ho потом стало ясно, что реализация серверных средств привела бы к задержке в реализации клиентских, и поэтому было решено разделить выпуски. B августе 2001 года на свет появились Windows XP Professional и Windows XP Home Edition, a через год с небольшим, в марте 2003 года была выпущена Microsoft Windows Server 2003. Помимо архитектуры Intel x86, эти системы поддерживали Intel IA64, благодаря чему Windows NT впервые вышла на стезю 64-разрядных вычислений.
Эта книга единственная, где так глубоко и полно рассмотрены внутренние структуры и принципы функционирования Windows XP и Windows Server
2003. Кроме того, она предлагает заглянуть в будущее — перевод Windows на 64-разрядные «рельсы», т. е. на ее поддержку архитектур x64 (AMD64) и Intel EM64T, объявленных AMD в 2003 году и Intel в феврале 2004 года соответственно. Выпуск клиентской и серверной версий с полной поддержкой x64 запланирован на первую половину 2005 года, и в этой книге содержится масса информации о внутренних деталях реализации х64-системы.
Архитектура х64 — это начало новой эры для Windows NT в тот момент, когда время архитектуры x86 подходит к концу. Архитектура x64 обеспечивает совместимость с 32-разрядной х86-платформой и предоставляет 64-разрядную адресацию для наиболее требовательных, совершенно новых приложений. Это позволит сохранить инвестиции в 32-разрядное программное обеспечение, в то же время вдохнув новую жизнь в Windows NT на ближайшее десятилетие или даже на более длительный период.
Хотя название NT-системы за последние несколько лет неоднократно менялось, она по-прежнему полностью основана на исходной кодовой базе Windows NT. Ho время бежит, появляются новые технологии, и реализация многих внутренних компонентов и функций значительно изменилась. Авторы проделали внушительную работу, собрав столько детальной информации о кодовой базе Windows NT и ее реализациях в разных выпусках на разных платформах, а также создав примеры и утилиты, которые помогают читателю разобраться в том, как работают компоненты и подсистемы Windows. Экземпляр этой книги должен лежать на столе у каждого разработчика серьезного программного обеспечения.
Дэвид H. Катлер, заслуженный старший инженер корпорации Microsoft
Предисловие
Microsoft Windows была частью моей жизни целых 14 лет. За это время — от версии к версии — наша операционная система развивалась вширь и вглубь. Сегодня работа над Windows — один из самых важных и сложных проектов в мире. B выпуске Windows участвуют более 5000 инженеров. Среди пользователей Windows есть представители уже почти всех культур, она используется как на крупных предприятиях, так и маленькими детьми. Пользователи Windows постоянно требуют ее совершенствования практически во всех сферах — от эффективной работы на крупнейших серверах до применения в дошкольном обучении. Windows поставляется в самых разных ипостасях — от встраиваемых версий и выпусков для медиа-центров до редакций для центров обработки данных. Все эти продукты опираются на одни и те же базовые компоненты Windows, которые развиваются и совершенствуются в каждой новой версии.
Это фундаментальная книга о внутреннем устройстве базовых компонентов Windows. Если вы хотите как можно быстрее освоить принципы внутренней работы Windows, тогда эта книга для вас. Освоение всех частей столь основательного продукта — задача устрашающая. Ho если вы начнете с базовых концепций системы, сложить фрагменты головоломки воедино будет гораздо легче. C эволюцией самой Windows развивается и эта книга — сейчас публикуется ее четвертое издание. Мы уже давно используем ее для обучения новых сотрудников Microsoft, так что предлагаемые вам материалы проверены на практике.
Если вы вроде меня, значит, вам тоже нравится разбираться в том, как устроены вещи. Чтение книжек типа «как использовать то-то и то-то» меня никогда не удовлетворяло. Когда понимаешь, как именно устроена вещь, пользуешься ею гораздо эффективнее и, честно говоря, с большим удовольствием. Если вас интересует Windows «с изнанки», вы выбрали подходящую книгу.
Дэвид и Марк проделали превосходную работу, написав книгу о технической «изнанке» Windows. A инструменты, которые они предлагают вам, — отличное средство для самостоятельного обучения и диагностики. Прочитав эту книгу, вы будете гораздо лучше понимать, как взаимодействуют между собой различные компоненты и подсистемы, какие усовершенствования внесены в новую версию и как выжать из них максимум возможного.
Это был долгий путь — и он все еще продолжается. Так что открывайте книгу, а заодно и капот, под которым бьется сердце одной из самых потрясающих операционных систем.
Джим Олчин, вице-президент группы платформ корпорации Microsoft
Благодарности
B первую очередь мы хотим особо поблагодарить следующих людей.
• Дэйва Катлера (Dave Cutler), заслуженного старшего инженера и первого архитектора Microsoft Windows NT. Дэйв разрешил Дэвиду Соломону (David Solomon) доступ к исходному коду и всячески поддерживал его преподавательскую деятельность, посвященную объяснению деталей внутреннего устройства Windows NT, а также его работу над вторым и третьим изданием книги. Помимо рецензирования главы по процессам и потокам, Дэйв ответил на массу вопросов об архитектуре ядра и написал об истории создания Windows для нашей книги.
• Джима Олчина Jim Allchin), нашего главного спонсора, — за предисловие к этой книге и за отстаивание интересов нашего дела в Microsoft.
• Роба Шорта (Rob Short), вице-президента, который позаботился о том, чтобы нам предоставили ресурсы и доступ к нужным людям.
Мы также выражаем признательность двум разработчикам из отдела Windows за подготовку новых материалов, включенных в это издание:
• Адриану Маринеску (Adrian Marinescu), который написал заметно разросшийся раздел по диспетчеру куч в главе, где рассматривается диспетчер памяти.
• Самеру Арафеху (Samer Arafeh), который предоставил материалы по Wow64.
Спасибо нашему старому приятелю, Джеффри Рихтеру Jeffrey Richter), с которым мы часто вместе обедаем, за врезку «Как насчет. NET и WinFX?» в главе 1 и за постоянное напоминание о том, как мало людей, по-настоящему интересующихся тем, о чем мы говорим в своей книге.
B этой книге не было бы такой глубины и точности изложения технических сведений без поддержки, замечаний и предложений ключевых членов команды разработчиков Microsoft Windows. Вот эти люди:
Были и другие, кто отвечал на наши вопросы в коридорах или кафетериях, — если мы вас пропустили, пожалуйста, простите нас!
Мы также выражаем благодарность Джейми Ханрахан Jamie Hanrahan) из Azius Developer Training (www.azius.com), которая в соавторстве с Дэвидом подготовила учебный курс по внутренней архитектуре исходной версии Windows. Ha основе этого курса было написано второе издание этой книги. Джейми, у которой настоящий талант доходчиво объяснять сложнейшие вещи, предоставила нам отдельные материалы, а также ряд схем и иллюстраций.
Спасибо Дэйву Проберту (Dave Probert) за то, что разместил в сети наши черновые материалы для распространения среди рецензентов внутри Microsoft.
Благодарим Джонатана Славза (Jonathan Sloves) из AMD, с помощью которого нам предоставили тестовые системы AMD64; они очень помогли нам в написании материалов по 64-разрядной архитектуре и в переносе ряда утилит Sysinternals на платформу x64.
Наконец, мы хотим выразить благодарность следующим сотрудникам Microsoft Press за их вклад в эту книгу.
• Робину Ван-Штеенбергу (Robin van Steenburgh), рецензенту издательства, за терпение в работе с нами над этим проектом.
• Салли Стикни (Sally Stickney), которая на первых порах по-прежнему была редактором нашего проекта, но потом ее закрутил водоворот административных дел. Мы очень скучали без вас!
• Валери Вулли (Valerie Woolley), которая приняла бразды правления от Салли и стала нашим новым редактором проекта. Вы замечательная и не такая резкая, как Салли!
• Роджеру Лебланку (Roger LeBlanc), который одолел все главы и сумел сократить в них текст, найти несогласованности и вообще довести нашу рукопись до высоких стандартов Microsoft Press.
Дэвид Соломон и Марк Руссинович сентябрь 2004 г.
Введение
Четвертое издание этой книги ориентировано на квалифицированных специалистов (программистов, разработчиков и системных администраторов), желающих разобраться в принципах внутренней работы основных компонентов операционных систем Microsoft Windows 2000, Microsoft Windows XP и Microsoft Windows Server 2003. Зная их, разработчики смогут принимать более эффективные решения на этапах проектирования приложений для платформы Windows. Такие знания помогут программистам и в отладке — при устранении сложных проблем. Информация, изложенная в книге, будет также полезна системным администраторам: понимание того, как устроена и работает операционная система, упростит им оптимизацию своих систем и устранение неполадок в случае каких-либо сбоев. Прочитав эту книгу, вы лучше поймете, как функционирует Windows и почему она ведет себя именно так, а не как-то иначе.
Структура книги
Первые две главы закладывают фундамент, вводя термины и концепции, используемые во всей книге. Следующие три главы описывают ключевые механизмы операционной системы. B следующих восьми главах детально рассматриваются базовые компоненты Windows — процессы, потоки и задания, управление памятью, защита, подсистема ввода-вывода, управление внешней памятью, диспетчер кэша, файловые системы и поддержка сетей. Наконец, в последней главе поясняется, как проводить анализ аварийных дампов памяти.
История написания книги
Это четвертое издание книги, которая изначально называлась «Inside Windows NT» (Microsoft Press, 1992) и была написана Хелен Кастер (Helen Custer) еще до выпуска Microsoft Windows NT 3.1. Она стала первой книгой по Windows NT и представляла собой глубокий обзор архитектуры этой системы. Второе издание, «Inside Windows NT» (Microsoft Press, 1998), было написано Дэвидом Соломоном. B него вошла новая информация по Windows NT 4.0, а сама книга стала гораздо более глубокой. Третье издание, «Inside Windows 2000» (Microsoft Press, 2000), было подготовлено Дэвидом Соломоном и Марком Руссиновичем. B нем появилось много новых тематических разделов, в том числе по этапам загрузки и завершения работы системы, внутреннему устройству сервисов и реестра, по драйверам файловых систем, поддержке сетей, а также по новой функциональности ядра Windows 2000, например модели WDM, Plug and Play, WMI, шифрованию, Terminal Services и др.
Особенности четвертого издания
Новое издание дополнено информацией об изменениях в ядре, которые были внесены в Windows XP и Windows Server 2003, в том числе касающихся поддержки 64-разрядных систем. Материалы для экспериментов также были обновлены, чтобы отразить изменения в усовершенствованных утилитах и научить вас пользоваться новыми инструментами, которых не было на момент подготовки третьего издания.
Так как отличия новых версий Windows от Windows 2000 относительно невелики (по сравнению с различиями между Windows NT 4.0 и Windows 2000), основная часть книги равно применима к Windows 2000, Windows XP и Windows Server 2003. Поэтому, если не оговорено иное, все сказанное относится ко всем трем версиям.
Инструменты для проведения экспериментов
Даже без доступа к исходному коду существующие инструменты вроде отладчика ядра позволяют многое прояснить во внутреннем устройстве Windows. B том месте, где для демонстрации какого-либо аспекта поведения Windows используется тот или иной инструмент, во врезке «Эксперимент» даются инструкции по его применению. Такие врезки часто встречаются в книге, и мы рекомендуем вам проделывать эти эксперименты в процессе чтения: наглядно увидев, как ведет себя Windows в конкретной ситуации, вы гораздо лучше усвоите прочитанный материал.
Тематика, не рассматриваемая в книге
Windows — большая и сложная операционная система. Нельзя объять необъятное, и поэтому основное внимание в книге уделяется только базовым системным компонентам. Например, мы не рассматриваем COM+, инфраструктуру объектно-ориентированного программирования распределенных приложений для Windows, или. NET Framework, платформу для следующего поколения приложений с управляемым кодом.
Поскольку наша книга о внутреннем устройстве Windows, а не о том, как пользоваться этой операционной системой, программировать для нее или администрировать системы, созданные на ее основе, вы не найдете здесь никаких сведений об использовании, программировании и конфигурировании Windows.
Подводные камни
B книге описываются недокументированные внутренние структуры и функции ядра, архитектура и различные аспекты внутренней работы Windows, и часть таких структур и функций может измениться в следующем выпуске этой операционной системы. (Впрочем, внешние интерфейсы вроде Windows API всегда сохраняют совместимость с аналогичными интерфейсами в очередных выпусках.)
Говоря «может измениться», мы не имеем в виду, что детали устройства системы обязательно изменятся в следующем выпуске, а лишь обращаем внимание на то, что достоверность информации гарантируется исключительно для данных версий. Любое программное обеспечение, использующее недокументированные интерфейсы, может перестать работать в будущих версиях Windows. Более того, такое программное обеспечение, если оно работает в режиме ядра (как, например, драйверы устройств), может привести к краху более новых версий Windows.
Техническая поддержка
Мы приложили максимум усилий, чтобы не допустить неточностей и ошибок в книге. Если у вас возникнут какие-либо проблемы или вопросы, пожалуйста, обращайтесь по адресам, указанным в следующих двух разделах.
От авторов
Эта книга отнюдь не совершенна. Несомненно в ней есть какие-то неточности; может быть, мы упустили что-то важное. Если вы найдете то, что считаете ошибочным, или если вы сочтете, что в книгу следует включить дополнительный материал, пожалуйста, пошлите свое сообщение по адресу windowsinternals@sysinternals.com . Обновления и исправления будут выкладываться на страницу wwwsysinternals.com/windowsinternals*
От Microsoft Press
Microsoft публикует исправления к книгам по адресу http://www.microsoftcom/learning/support. Для прямого подключения к Microsoft Learning Knowledge Base и ввода запроса по проблеме, с которой вы столкнулись, заходите на страницу http://www.microsoft.comflearning/support/search.asp .
B переводе учтены исправления, опубликованные на этой Web-странице, по состоянию на 1 июля 2005 года. — Прим. перев.
ГЛABA 1 Концепции и инструменты
B этой главе мы познакомим вас с основными концепциями и терминами операционной системы Microsoft Windows, которые будут использоваться в последующих главах, в том числе с Windows API, процессами, потоками, виртуальной памятью, режимом ядра и пользовательским режимом, объектами, описателями (handles), защитой, реестром. Мы также расскажем об инструментах, с помощью которых вы сможете исследовать внутреннее устройство Windows. K ним относятся, например, отладчик ядра, оснастка Performance и важнейшие утилиты с сайта www.sysinternals.com . Кроме того, мы поясним, как пользоваться Windows Device Driver Kit (DDK) и Platform Software Development Kit (SDK) в качестве источника дополнительной информации о внутреннем устройстве Windows.
Вы должны хорошо понимать все, что написано в этой главе, — в остальной части книги мы предполагаем именно так.
Версии операционных систем Windows
Эта книга охватывает три последние версии операционной системы Microsoft Windows, основанные на кодовой базе Windows NT: Windows 2000, Windows XP (32- и 64-разрядные версии) и Windows Server 2003 (32- и 64-разрядные версии). Текст относится ко всем трем версиям, если не оговорено иное. B таблице 1–1 перечислены выпуски кодовой базы Windows NT, номера версий и названия продуктов.
Windows NT и Windows 95
При первом выпуске Windows NT компания Microsoft дала ясно понять, что это долгосрочная замена Windows 95 (и ее последующих выпусков — Windows 98 и Windows Millennium Edition). Вот список некоторых архитектурных различий и преимуществ Windows NT (и ее последующих выпусков) над Windows 95 (и ее последующими выпусками).
• Windows NT поддерживает многопроцессорные системы, a Windows 95 — нет.
• Файловая система Windows NT поддерживает средства защиты, например управление избирательным доступом (discretionary access control). B файловой системе Windows 95 этого нет.
• Windows NT — полностью 32-разрядная (а теперь и 64-разрядная) операционная система, в ней нет 16-разрядного кода, кроме того, который предназначен для выполнения 16-разрядных Windows-приложений. Windows 95 содержит большой объем старого 16-разрядного кода из предшествующих операционных систем — Windows 3.1 nMS-DOS.
• Windows NT полностью реентерабельна, а многие части Windows 95 нереентерабельны (в основном это касается 16-разрядного кода, взятого из Windows 3.1 ). Большинство функций, связанных с графикой и управлением окнами (GDI и USER), включают именно нереентерабельный код. Когда 32-разрядное приложение в Windows 95 пытается вызвать системный сервис, реализованный как нереентерабельный 16-разрядный код, оно должно сначала получить общесистемную блокировку (или мьютекс), чтобы предотвратить вход других потоков в нереентерабельную кодовую базу. Еще хуже, что 16-разрядное приложение удерживает такую блокировку в течение всего времени своего выполнения. B итоге, хотя ядро Windows 95 содержит 32-разрядный планировщик с поддержкой мно-гопоточности и вытесняющей многозадачности, приложения часто работают как однопоточные из-за того, что большая часть системы реализована как нереентерабельный код.
• Windows NT позволяет выполнять 16-разрядные Windows-приложения в выделенном адресном пространстве, a Windows 95 всегда выполняет такие приложения в общем адресном пространстве, в котором они могут навредить друг другу и привести к зависанию системы.
• Разделяемая (общая) память процесса в Windows NT видна только тем процессам, которые имеют проекцию на один и тот же блок разделяемой памяти. B Windows 95 вся общая память видна и доступна для записи всем процессам. Таким образом, любой процесс может что-то записать и повредить какие-то данные в общей памяти, используемые другими процессами.
• Некоторые критически важные страницы памяти, занимаемые операционной системой Windows 95, доступны для записи из пользовательского режима, а значит, обычное приложение может повредить содержимое этих страниц и привести к краху системы. Единственное, что умеет Windows 95 и чего никогда не смогут делать операционные системы на основе Windows NT, — выполнять все старые программы для MS-DOS и Windows 3.1 (а именно программы, требующие прямого доступа к оборудованию), а также 16-разрядные драйверы устройств MS-DOS. Если одной из основных целей разработки Windows 95 была 100 %-я совместимость с MS-DOS и Windows 3.1, то исходной целью разработки Windows NT — возможность выполнения большинства существующих 16-разрядных приложений при условии сохранения целостности и надежности системы.
Базовые концепции и термины
B книге будут часто встречаться ссылки на концепции и структуры, с которыми некоторые читатели, возможно, не знакомы. Здесь мы определимся с используемой в дальнейшем терминологией.
Windows API
Это системный интерфейс программирования в семействе операционных систем Microsoft Windows, включая Windows 2000, Windows XP, Windows Server 2003, Windows 95, Windows 98, Windows Millennium Edition (Me) и Windows CE. Каждая операционная система реализует разное подмножество Windows API. Windows 95, Windows 98, Windows Me и Windows CE в этой книге не рассматриваются.
ПРИМЕЧАНИЕ Windows API описывается в документации Platform Software Development Kit (SDK). (См. раздел «Platform Software Development Kit (SDK)» далее в этой главе.) Этудокументацию можно бесплатно просмотреть на сайте msdn.microsoft.com. Она также поставляется с Microsoft Developer Network (MSDN) всех уровней подписки. (MSDN — это программа Microsoft для поддержки разработчиков. Подробности см. на сайте msdn.microsqft.com.) Отличное описание того, как программировать с использованием базового Windows API, см. в четвертом издании книги Джеффри Рихтера Jeffrey Richter) «Microsoft Windows для профессионалов» (Русская Редакция, 2000).
До появления 64-разрядных версий Windows XP и Windows Server 2003 интерфейс программирования 32-разрядных версий операционных систем Windows назывался Win32 API, чтобы отличать его от исходного 16-разрядного Windows API. B этой книге термин «Windows API» относится к 32-разрядному интерфейсу программирования Windows 2000, а также к 32- и 64-разрядным интерфейсам программирования Windows XP и Windows Server 2003.
Windows API включает тысячи вызываемых функций, которые сгруппированы в следующие основные категории:
• базовые сервисы (Base Services);
• сервисы компонентов (Component Services);
• сервисы пользовательского интерфейса (User Interface Services);
• сервисы графики и мультимедиа (Graphics and Multimedia Services);
• коммуникационное взаимодействие и совместная работа (Messaging and Collaboration);
• сети (Networking);
• Web-сервисы (Web Services).
Основное внимание в нашей книге уделяется внутреннему устройству ключевых базовых сервисов, в частности поддержки процессов и потоков (threads), управления памятью, ввода-вывода и защиты.
Как насчет. NET и WinFX?
NET Framework состоит из библиотеки классов, называемой Framework Class Library (FCL), и общеязыковой исполняющей среды (Common Language Runtime, CLR), которая предоставляет среду для выполнения управляемого кода с такими возможностями, как компиляция по требованию (just-in-time compilation, JIT compilation), верификация типов, сбор мусора и защита по правам доступа кода (code access security). Благодаря этому CLR создает среду разработки, которая повышает продуктивность труда программистов и уменьшает вероятность появления распространенных ошибок программирования. Отличное описание. NET Framework и ее базовой архитектуры см. в книге Джеффри Рихтера «Программирование на платформе Microsoft.NET Frame-work» (Русская Редакция, 2003).
CLR реализована как классический СОМ-сервер, код которой хранится в стандартной Windows DLL пользовательского режима. Фактически все компоненты. NET Framework реализованы как стандартные Windows DLL пользовательского режима, занимающие уровень поверх неуправляемых функций Windows APL (Никакие компоненты. NET Framework не работают в режиме ядра.) Ha рис. 1–1 показаны взаимосвязи этих компонентов.
WinFX — «новый Windows API». Это результат эволюционного развития. NET Framework, которая будет поставляться с версией Windows под кодовым названием «Longhorn», следующим выпуском Windows. WinFX также можно установить в Windows XP и Windows Server 2003. WinFX образует фундамент для приложений следующего поколения, создаваемых для операционной системы Windows.
История создания Win32 API
Интересно, что поначалу Win32 не рассматривался как интерфейс программирования для Microsoft Windows NT. Поскольку проект Windows NT начинался как замена OS/2 версии 2, основным интерфейсом программирования был 32-разрядный OS/2 Presentation ManagerAPI. Однако год спустя на рынке появилась Microsoft Windows 3.0, быстро ставшая очень популярной. B результате Microsoft сменила курс и перенацелила проект Windows NT на будущую замену семейства продуктов Windows, а не OS/2. Вот на этом-то перепутье и встал вопрос о создании Windows API — до этого Windows API существовал только как 16-разрядный интерфейс.
Хотя в Windows API должно было появиться много новых функций, отсутствующих в Windows 3.1, Microsoft решила сделать новый API по возможности совместимым с именами функций, семантикой и типами данных в 16-разрядном Windows API, чтобы максимально облегчить бремя переноса существующих 16-разрядных Windows-приложений в Windows NT Поэтому тот, кто, впервые глядя на Windows API, удивляется, почему многие имена и интерфейсы функций кажутся противоречивыми, должен учитывать, что одной из причин такой противоречивости было стремление сделать Windows API совместимым со старым 16-разрядным Windows API.
Сервисы, функции и процедуры
Несколько терминов в документации Windows для пользователей и программистов имеет разный смысл в разных контекстах. Например, понятие «сервис» (service) может относиться к вызываемой функции операционной системы, драйверу устройства или серверному процессу (в последнем случае сервис часто называют службой). Ниже показано, что означают подобные термины в этой книге.
• Функции Windows API Документированные, вызываемые подпрограммы в Windows API, например CreateProcess, CreateFile и GetMessage.
• Неуправляемые («родные») системные сервисы (или исполняемые системные сервисы) Недокументированные низкоуровневые сервисы операционной системы, которые можно вызывать в пользовательском режиме. Так, NtCreateProcess — это внутрисистемный сервис, вызываемый Windows-функцией CreateProcess при создании нового процесса. (Определение неуправляемых функций см. в разделе «Диспетчеризация системных сервисов» главы 3.)
• Функции (или процедуры) ядра Подпрограммы внутри операционной системы Windows, которые можно вызывать только в режиме ядра (определение мы дадим чуть позже). Например, ExAllocatePool — процедура, вызываемая драйверами устройств для выделения памяти из системных куч (динамически распределяемых областей памяти) Windows.
• Windows-сервисы Процессы, запускаемые диспетчером управления сервисами в Windows. (Хотя в документации на реестр драйверы устройств Windows определяются как сервисы, мы не пользуемся таким термином в этой книге.) Например, сервис Task Scheduler выполняется в процессе пользовательского режима, который поддерживает команду at (аналогичную UNIX-команде at или cron).
• DLL (динамически подключаемая библиотека) Набор вызываемых подпрограмм, включенных в один двоичный файл, который приложения, использующие эти подпрограммы, могут динамически загружать во время своего выполнения. B качестве примера можно привести модули Msvcrt.dll (библиотека исполняющей подсистемы C) и Kernel32.dll (одна из библиотек подсистемы Windows API). DLL активно используются компонентами и приложениями Windows пользовательского режима. Преимущество DLL над статическими библиотеками в том, что приложения могут разделять DLL-модули, a Windows гарантирует, что в памяти будет находиться лишь по одному экземпляру используемых DLL.
Процессы, потоки и задания
Хотя на первый взгляд кажется, что программа и процесс — понятия практически одинаковые, они фундаментально отличаются друг от друга. Программа представляет собой статический набор команд, а процесс — это контейнер для набора ресурсов, используемых при выполнении экземпляра программы. Ha самом высоком уровне абстракции процесс в Windows включает следующее:
• закрытое виртуальное адресное пространство — диапазон адресов виртуальной памяти, которым может пользоваться процесс;
• исполняемую программу — начальный код и данные, проецируемые на виртуальное адресное пространство процесса;
• список открытых описателей (handles) различных системных ресурсов — семафоров, коммуникационных портов, файлов и других объектов, доступных всем потокам в данном процессе;
• контекст защиты (security context), называемый маркером доступа (access token) и идентифицирующий пользователя, группы безопасности и привилегии, сопоставленные с процессом;
• уникальный идентификатор процесса (во внутрисистемной терминологии называемый идентификатором клиента);
• минимум один поток.
Каждый процесс также указывает на свой родительский процесс (процесс-создатель). Однако, если родитель существует, эта информация не обновляется. Поэтому есть вероятность, что некий процесс указывает на уже несуществующего родителя. Это не создает никакой проблемы, поскольку никто не полагается на наличие такой информации. Следующий эксперимент иллюстрирует данный случай.
ЭКСПЕРИМЕНТ: просмотр дерева процессов
Большинство утилит не отображает такой уникальный атрибут, как идентификатор родительского процесса. Значение этого атрибута можно получить программно или с помощью оснастки Performance, запросив значение счетчика Creating Process ID [Код (ID) создавшего процесса]. Дерево процессов показывается утилитой Tlist.exe (из Windows Debugging Tools), если вы указываете ключ /t. Вот образец вывода этой команды:
Взаимоотношения процессов (дочерний-родительский) Tlist показывает отступами. Имена процессов, родительские процессы которых на данный момент завершились, выравниваются по левому краю, потому что установить их родственные связи невозможно — даже если процессы-прапредки еще существуют. Windows сохраняет идентификатор только родительского процесса, так что проследить его создателя нельзя. Чтобы убедиться в этом, выполните следующие операции.
1. Откройте окно командной строки.
2. Наберите start cmd для запуска второго окна командной строки.
3. Откройте диспетчер задач.
4. Переключитесь на второе окно командной строки.
5. Введите mspaint для запуска Microsoft Paint.
6. Щелкните второе окно командной строки.
7. Введите exit. (Заметьте, что окно Paint остается.)
8. Переключитесь в диспетчер задач.
9. Откройте его вкладку Applications (Приложения).
10.Щелкните правой кнопкой мыши задачу Command Prompt (Командная строка) и выберите Go To Process (Перейти к процессам).
11. Щелкните процесс Cmd.exe, выделенный серым цветом.
12. Щелкнув правой кнопкой мыши, выберите команду End Process Tree
(Завершить дерево процессов).
13. B окне Task Manager Warning (Предупреждение диспетчера задач) щелкните Yes (Да).
Первое окно командной строки исчезнет, но вы по-прежнему сможете наблюдать окн
4 дня назад
8 AbrakaDaniel
http://apero.ru
Главная
Играй онлайн!
Конкурс открыт!
Сообщения
Участники
Магазин (2)
Создай игру!
Документация
Задания
iFiction.ru
Мы ВКонтакте

Профиль
Привет, AbrakaDaniel
Сейчас в онлайне AbrakaDaniel (Vetal123) и 20 гостей.
Партнеры Аперо:
"Коллекционер" - Страшный квест в Челнах!

В игре или на сайте ошибка?
Выдели текст и жми сюда или Ctrl+Enter
Разработчики скажут спасибо :)
Навигация:http://apero.ru / Участники / Vetal123
Vetal123 - страница участника аперо-сообщества

Профиль не активирован. Если это твой профиль - проверь e-mail, указанный при регистрации, и перейди по ссылке для активации.
Последние комментарии:

1 AbrakaDaniel 26 был отпр только что
2 AbrakaDaniel
http://apero.ru
Главная
Играй онлайн!
Конкурс открыт!
Сообщения
Участники
Магазин (2)
Создай игру!
Документация
Задания
iFiction.ru
Мы ВКонтакте
Профиль
Привет, AbrakaDaniel
Сейчас в онлайне AbrakaDaniel (Vetal123) и 20 гостей.
Партнеры Аперо:
"Коллекционер" - Страшный квест в Челнах!
В игре или на сайте ошибка?
Выдели текст и жми сюда или Ctrl+Enter
Разработчики скажут спасибо :)
Навигация:http://apero.ru / Участники / Vetal123
Vetal123 - страница участника аперо-сообщества
Профиль не активирован. Если это твой профиль - проверь e-mail, указанный при регистрации, и перейди по ссылке для активации.
Последние комментарии:
1 AbrakaDaniel
http://apero.ru
Главная
Играй онлайн!
Конкурс открыт!
Сообщения
Участники
Магазин (2)
Создай игру!
Документация
Задания
iFiction.ru
Мы ВКонтакте
Профиль
Привет, AbrakaDaniel
Сейчас в онлайне AbrakaDaniel (Vetal123) и 20 гостей.
Партнеры Аперо:
"Коллекционер" - Страшный квест в Челнах!
В игре или на сайте ошибка?
Выдели текст и жми сюда или Ctrl+Enter
Разработчики скажут спасибо :)
Навигация:http://apero.ru / Участники / Vetal123
Vetal123 - страница участника аперо-сообщества
Профиль не активирован. Если это твой профиль - проверь e-mail, указанный при регистрации, и перейди по ссылке для активации.
Последние комментарии:
1 AbrakaDaniel
http://apero.ru
Главная
Играй онлайн!
Конкурс открыт!
Сообщения
Участники
Магазин (2)
Создай игру!
Документация
Задания
iFiction.ru
Мы ВКонтакте
Профиль
Привет, AbrakaDaniel
Сейчас в онлайне AbrakaDaniel (Vetal123) и 20 гостей.
Партнеры Аперо:
"Коллекционер" - Страшный квест в Челнах!
В игре или на сайте ошибка?
Выдели текст и жми сюда или Ctrl+Enter
Разработчики скажут спасибо :)
Навигация:http://apero.ru / Участники / Vetal123
Vetal123 - страница участника аперо-сообщества
Профиль не активирован. Если это твой профиль - проверь e-mail, указанный при регистрации, и перейди по ссылке для активации.
Последние комментарии:
1 AbrakaDaniel
http://apero.ru
Главная
Играй онлайн!
Конкурс открыт!
Сообщения
Участники
Магазин (2)
Создай игру!
Документация
Задания
iFiction.ru
Мы ВКонтакте
Профиль
Привет, AbrakaDaniel
Сейчас в онлайне AbrakaDaniel (Vetal123) и 20 гостей.
Партнеры Аперо:
"Коллекционер" - Страшный квест в Челнах!
В игре или на сайте ошибка?
Выдели текст и жми сюда или Ctrl+Enter
Разработчики скажут спасибо :)
Навигация:http://apero.ru / Участники / Vetal123
Vetal123 - страница участника аперо-сообщества
Профиль не активирован. Если это твой профиль - проверь e-mail, указанный при регистрации, и перейди по ссылке для активации.
Последние комментарии:
1 AbrakaDaniel
http://apero.ru
Главная
Играй онлайн!
Конкурс открыт!
Сообщения
Участники
Магазин (2)
Создай игру!
Документация
Задания
iFiction.ru
Мы ВКонтакте
Профиль
Привет, AbrakaDaniel
Сейчас в онлайне AbrakaDaniel (Vetal123) и 20 гостей.
Партнеры Аперо:
"Коллекционер" - Страшный квест в Челнах!
В игре или на сайте ошибка?
Выдели текст и жми сюда или Ctrl+Enter
Разработчики скажут спасибо :)
Навигация:http://apero.ru / Участники / Vetal123
Vetal123 - страница участника аперо-сообщества
Профиль не активирован. Если это твой профиль - проверь e-mail, указанный при регистрации, и перейди по ссылке для активации.
Последние комментарии:
1 AbrakaDaniel Аннотация: Книга посвящена внутреннему устройству и алгоритмам работы основных компонентов операционной системы Microsoft Windows — Windows Server 2003, Windows XP и Windows 2000 — и файловой системы NTFS. Детально рассмотрены системные механизмы: диспетчеризация ловушек и прерываний, DPC, APC, LPC, RPC, синхронизация, системные рабочие потоки, глобальные флаги и др. Также описываются все этапы загрузки операционной системы и завершения ее работы. B четвертом издании книги больше внимания уделяется глубокому анализу и устранению проблем, из-за которых происходит крах операционной системы или из-за которых ее не удается загрузить. Кроме того, рассматриваются детали реализации поддержки аппаратных платформ AMD x64 и Intel IA64. Книга состоит из 14 глав, словаря терминов и предметного указателя. Книга предназначена системным администраторам, разработчикам серьезных приложений и всем, кто хочет понять, как устроена операционная система Windows.
Названия всех команд, диалоговых окон и других интерфейсных элементов операционной системы приведены как на английском языке, так и на русском.
Версия Fb2 редакции — 1.5 . Об ошибках просьба сообщать по адресу — general2008@ukr.net.
---------------------------------------------
М.Руссинович, Д.Соломон
Внутреннее устройство Microsoft Windows (главы 1–4)
Windows Server™ 2003, Windows XP и Windows 2000
4-е издание
Предыстория
Я вновь признателен Дэвиду Соломону (David Solomon) и Марку Руссиновичу (Mark Russinovich) за то, что они предоставили мне возможность сказать несколько слов о новом издании их книги «Внутреннее устройство Microsoft Windows». Прошло уже более трех лет с момента выхода последнего издания этой книги, и за это время на свет появились два выпуска операционной системы Windows — очень значимые обновления клиентской и серверной систем.
Перед авторами стояли две задачи, которые постоянно усложняются: отслеживание эволюционного развития системы Microsoft Windows NT и документирование того, как менялась реализация ее компонентов в каждой версии. B этом смысле авторы проделали просто выдающуюся работу.
(Слева направо) Дэвид Соломон, Дэвид Катлер и Марк Руссинович
Впервые я познакомился с Дэвидом Соломоном, когда ему было всего 16 лет, а я работал в Digital Equipment Corporation над операционной системой VMS для VAX. C тех пор он участвовал в разработке операционных систем, а также преподавал в этой области. C Марком Руссиновичем я познакомился позже, но уже задолго до этого был немало наслышан о его глубоких познаниях в области операционных систем. B числе его заслуг версия файловой системы NTFS, которую он заставил работать в Microsoft Windows 98, и «живой» отладчик ядра Windows, позволяющий заглянуть внутрь системы Windows в процессе ее выполнения.
Истоки Windows NT восходят к октябрю 1988 года, когда было решено создать переносимую операционную систему, совместимую с OS/2, поддерживающую POSIX и многопроцессорную обработку, обладающую высокой защищенностью, надежностью и интегрированными средствами работы в сетях. C приходом Windows 3.0 и ее колоссальным успехом заявленные цели несколько изменились: совместимость с OS/2 была перенесена с уровня всей системы на уровень отдельной подсистемы.
Поначалу мы полагали, что сумеем создать Windows NT за пару лет, но в действительности ее первая версия вышла лишь через четыре с половиной года — летом 1993-го. Эта версия поддерживала процессоры Intel i386, Intel i486 и MIPS R4000. Шесть недель спустя мы ввели поддержку и для процессоров Digital Alpha.
Первая версия Windows NT получилась более громоздкой и медленной, чем ожидалось, так что следующей вехой стал проект Daytona (так называется автострада во Флориде). Главной целью в этой версии было уменьшение размера системы, повышение ее быстродействия и, разумеется, надежности. Через полгода после выпуска Windows NT 3.5 осенью 1994-го мы подготовили Windows NT 3.51, которая представляла собой обновленную версию с дополнительной поддержкой процессора IBM PowerPC.
Толчком к созданию следующей версии Windows NT стало желание сделать пользовательский интерфейс, совместимый с Windows 95, и включить технологии Cairo, уже находившиеся в разработке пару лет. Ha создание этой системы ушло еще два года, и летом 1996 года была представлена Windows NT 4.0.
Название следующей версии NT было изменено на Windows 2000. Она стала последней системой, для которой одновременно выпускались клиентская и серверная версии. Windows 2000 была построена на той же технологии Windows NT, что и предыдущие версии, но обладала новой важной функциональностью, поддерживая, в частности, Active Directory. Ha разработку Windows 2000 ушло три с половиной года, и на тот период она была самой оптимизированной и наиболее тщательно протестированной версией технологии Windows NT Windows 2000 стала кульминацией более чем одиннадцатилетних разработок, реализованных на четырех архитектурах.
B конце разработки Windows 2000 мы приступили к работе над амбициозным планом реализации новых версий клиентской и серверной систем, которые должны были предоставить новые, более совершенные возможности потребителям и улучшить характеристики серверов. Ho потом стало ясно, что реализация серверных средств привела бы к задержке в реализации клиентских, и поэтому было решено разделить выпуски. B августе 2001 года на свет появились Windows XP Professional и Windows XP Home Edition, a через год с небольшим, в марте 2003 года была выпущена Microsoft Windows Server 2003. Помимо архитектуры Intel x86, эти системы поддерживали Intel IA64, благодаря чему Windows NT впервые вышла на стезю 64-разрядных вычислений.
Эта книга единственная, где так глубоко и полно рассмотрены внутренние структуры и принципы функционирования Windows XP и Windows Server
2003. Кроме того, она предлагает заглянуть в будущее — перевод Windows на 64-разрядные «рельсы», т. е. на ее поддержку архитектур x64 (AMD64) и Intel EM64T, объявленных AMD в 2003 году и Intel в феврале 2004 года соответственно. Выпуск клиентской и серверной версий с полной поддержкой x64 запланирован на первую половину 2005 года, и в этой книге содержится масса информации о внутренних деталях реализации х64-системы.
Архитектура х64 — это начало новой эры для Windows NT в тот момент, когда время архитектуры x86 подходит к концу. Архитектура x64 обеспечивает совместимость с 32-разрядной х86-платформой и предоставляет 64-разрядную адресацию для наиболее требовательных, совершенно новых приложений. Это позволит сохранить инвестиции в 32-разрядное программное обеспечение, в то же время вдохнув новую жизнь в Windows NT на ближайшее десятилетие или даже на более длительный период.
Хотя название NT-системы за последние несколько лет неоднократно менялось, она по-прежнему полностью основана на исходной кодовой базе Windows NT. Ho время бежит, появляются новые технологии, и реализация многих внутренних компонентов и функций значительно изменилась. Авторы проделали внушительную работу, собрав столько детальной информации о кодовой базе Windows NT и ее реализациях в разных выпусках на разных платформах, а также создав примеры и утилиты, которые помогают читателю разобраться в том, как работают компоненты и подсистемы Windows. Экземпляр этой книги должен лежать на столе у каждого разработчика серьезного программного обеспечения.
Дэвид H. Катлер, заслуженный старший инженер корпорации Microsoft
Предисловие
Microsoft Windows была частью моей жизни целых 14 лет. За это время — от версии к версии — наша операционная система развивалась вширь и вглубь. Сегодня работа над Windows — один из самых важных и сложных проектов в мире. B выпуске Windows участвуют более 5000 инженеров. Среди пользователей Windows есть представители уже почти всех культур, она используется как на крупных предприятиях, так и маленькими детьми. Пользователи Windows постоянно требуют ее совершенствования практически во всех сферах — от эффективной работы на крупнейших серверах до применения в дошкольном обучении. Windows поставляется в самых разных ипостасях — от встраиваемых версий и выпусков для медиа-центров до редакций для центров обработки данных. Все эти продукты опираются на одни и те же базовые компоненты Windows, которые развиваются и совершенствуются в каждой новой версии.
Это фундаментальная книга о внутреннем устройстве базовых компонентов Windows. Если вы хотите как можно быстрее освоить принципы внутренней работы Windows, тогда эта книга для вас. Освоение всех частей столь основательного продукта — задача устрашающая. Ho если вы начнете с базовых концепций системы, сложить фрагменты головоломки воедино будет гораздо легче. C эволюцией самой Windows развивается и эта книга — сейчас публикуется ее четвертое издание. Мы уже давно используем ее для обучения новых сотрудников Microsoft, так что предлагаемые вам материалы проверены на практике.
Если вы вроде меня, значит, вам тоже нравится разбираться в том, как устроены вещи. Чтение книжек типа «как использовать то-то и то-то» меня никогда не удовлетворяло. Когда понимаешь, как именно устроена вещь, пользуешься ею гораздо эффективнее и, честно говоря, с большим удовольствием. Если вас интересует Windows «с изнанки», вы выбрали подходящую книгу.
Дэвид и Марк проделали превосходную работу, написав книгу о технической «изнанке» Windows. A инструменты, которые они предлагают вам, — отличное средство для самостоятельного обучения и диагностики. Прочитав эту книгу, вы будете гораздо лучше понимать, как взаимодействуют между собой различные компоненты и подсистемы, какие усовершенствования внесены в новую версию и как выжать из них максимум возможного.
Это был долгий путь — и он все еще продолжается. Так что открывайте книгу, а заодно и капот, под которым бьется сердце одной из самых потрясающих операционных систем.
Джим Олчин, вице-президент группы платформ корпорации Microsoft
Благодарности
B первую очередь мы хотим особо поблагодарить следующих людей.
• Дэйва Катлера (Dave Cutler), заслуженного старшего инженера и первого архитектора Microsoft Windows NT. Дэйв разрешил Дэвиду Соломону (David Solomon) доступ к исходному коду и всячески поддерживал его преподавательскую деятельность, посвященную объяснению деталей внутреннего устройства Windows NT, а также его работу над вторым и третьим изданием книги. Помимо рецензирования главы по процессам и потокам, Дэйв ответил на массу вопросов об архитектуре ядра и написал об истории создания Windows для нашей книги.
• Джима Олчина Jim Allchin), нашего главного спонсора, — за предисловие к этой книге и за отстаивание интересов нашего дела в Microsoft.
• Роба Шорта (Rob Short), вице-президента, который позаботился о том, чтобы нам предоставили ресурсы и доступ к нужным людям.
Мы также выражаем признательность двум разработчикам из отдела Windows за подготовку новых материалов, включенных в это издание:
• Адриану Маринеску (Adrian Marinescu), который написал заметно разросшийся раздел по диспетчеру куч в главе, где рассматривается диспетчер памяти.
• Самеру Арафеху (Samer Arafeh), который предоставил материалы по Wow64.
Спасибо нашему старому приятелю, Джеффри Рихтеру Jeffrey Richter), с которым мы часто вместе обедаем, за врезку «Как насчет. NET и WinFX?» в главе 1 и за постоянное напоминание о том, как мало людей, по-настоящему интересующихся тем, о чем мы говорим в своей книге.
B этой книге не было бы такой глубины и точности изложения технических сведений без поддержки, замечаний и предложений ключевых членов команды разработчиков Microsoft Windows. Вот эти люди:
Были и другие, кто отвечал на наши вопросы в коридорах или кафетериях, — если мы вас пропустили, пожалуйста, простите нас!
Мы также выражаем благодарность Джейми Ханрахан Jamie Hanrahan) из Azius Developer Training (www.azius.com), которая в соавторстве с Дэвидом подготовила учебный курс по внутренней архитектуре исходной версии Windows. Ha основе этого курса было написано второе издание этой книги. Джейми, у которой настоящий талант доходчиво объяснять сложнейшие вещи, предоставила нам отдельные материалы, а также ряд схем и иллюстраций.
Спасибо Дэйву Проберту (Dave Probert) за то, что разместил в сети наши черновые материалы для распространения среди рецензентов внутри Microsoft.
Благодарим Джонатана Славза (Jonathan Sloves) из AMD, с помощью которого нам предоставили тестовые системы AMD64; они очень помогли нам в написании материалов по 64-разрядной архитектуре и в переносе ряда утилит Sysinternals на платформу x64.
Наконец, мы хотим выразить благодарность следующим сотрудникам Microsoft Press за их вклад в эту книгу.
• Робину Ван-Штеенбергу (Robin van Steenburgh), рецензенту издательства, за терпение в работе с нами над этим проектом.
• Салли Стикни (Sally Stickney), которая на первых порах по-прежнему была редактором нашего проекта, но потом ее закрутил водоворот административных дел. Мы очень скучали без вас!
• Валери Вулли (Valerie Woolley), которая приняла бразды правления от Салли и стала нашим новым редактором проекта. Вы замечательная и не такая резкая, как Салли!
• Роджеру Лебланку (Roger LeBlanc), который одолел все главы и сумел сократить в них текст, найти несогласованности и вообще довести нашу рукопись до высоких стандартов Microsoft Press.
Дэвид Соломон и Марк Руссинович сентябрь 2004 г.
Введение
Четвертое издание этой книги ориентировано на квалифицированных специалистов (программистов, разработчиков и системных администраторов), желающих разобраться в принципах внутренней работы основных компонентов операционных систем Microsoft Windows 2000, Microsoft Windows XP и Microsoft Windows Server 2003. Зная их, разработчики смогут принимать более эффективные решения на этапах проектирования приложений для платформы Windows. Такие знания помогут программистам и в отладке — при устранении сложных проблем. Информация, изложенная в книге, будет также полезна системным администраторам: понимание того, как устроена и работает операционная система, упростит им оптимизацию своих систем и устранение неполадок в случае каких-либо сбоев. Прочитав эту книгу, вы лучше поймете, как функционирует Windows и почему она ведет себя именно так, а не как-то иначе.
Структура книги
Первые две главы закладывают фундамент, вводя термины и концепции, используемые во всей книге. Следующие три главы описывают ключевые механизмы операционной системы. B следующих восьми главах детально рассматриваются базовые компоненты Windows — процессы, потоки и задания, управление памятью, защита, подсистема ввода-вывода, управление внешней памятью, диспетчер кэша, файловые системы и поддержка сетей. Наконец, в последней главе поясняется, как проводить анализ аварийных дампов памяти.
История написания книги
Это четвертое издание книги, которая изначально называлась «Inside Windows NT» (Microsoft Press, 1992) и была написана Хелен Кастер (Helen Custer) еще до выпуска Microsoft Windows NT 3.1. Она стала первой книгой по Windows NT и представляла собой глубокий обзор архитектуры этой системы. Второе издание, «Inside Windows NT» (Microsoft Press, 1998), было написано Дэвидом Соломоном. B него вошла новая информация по Windows NT 4.0, а сама книга стала гораздо более глубокой. Третье издание, «Inside Windows 2000» (Microsoft Press, 2000), было подготовлено Дэвидом Соломоном и Марком Руссиновичем. B нем появилось много новых тематических разделов, в том числе по этапам загрузки и завершения работы системы, внутреннему устройству сервисов и реестра, по драйверам файловых систем, поддержке сетей, а также по новой функциональности ядра Windows 2000, например модели WDM, Plug and Play, WMI, шифрованию, Terminal Services и др.
Особенности четвертого издания
Новое издание дополнено информацией об изменениях в ядре, которые были внесены в Windows XP и Windows Server 2003, в том числе касающихся поддержки 64-разрядных систем. Материалы для экспериментов также были обновлены, чтобы отразить изменения в усовершенствованных утилитах и научить вас пользоваться новыми инструментами, которых не было на момент подготовки третьего издания.
Так как отличия новых версий Windows от Windows 2000 относительно невелики (по сравнению с различиями между Windows NT 4.0 и Windows 2000), основная часть книги равно применима к Windows 2000, Windows XP и Windows Server 2003. Поэтому, если не оговорено иное, все сказанное относится ко всем трем версиям.
Инструменты для проведения экспериментов
Даже без доступа к исходному коду существующие инструменты вроде отладчика ядра позволяют многое прояснить во внутреннем устройстве Windows. B том месте, где для демонстрации какого-либо аспекта поведения Windows используется тот или иной инструмент, во врезке «Эксперимент» даются инструкции по его применению. Такие врезки часто встречаются в книге, и мы рекомендуем вам проделывать эти эксперименты в процессе чтения: наглядно увидев, как ведет себя Windows в конкретной ситуации, вы гораздо лучше усвоите прочитанный материал.
Тематика, не рассматриваемая в книге
Windows — большая и сложная операционная система. Нельзя объять необъятное, и поэтому основное внимание в книге уделяется только базовым системным компонентам. Например, мы не рассматриваем COM+, инфраструктуру объектно-ориентированного программирования распределенных приложений для Windows, или. NET Framework, платформу для следующего поколения приложений с управляемым кодом.
Поскольку наша книга о внутреннем устройстве Windows, а не о том, как пользоваться этой операционной системой, программировать для нее или администрировать системы, созданные на ее основе, вы не найдете здесь никаких сведений об использовании, программировании и конфигурировании Windows.
Подводные камни
B книге описываются недокументированные внутренние структуры и функции ядра, архитектура и различные аспекты внутренней работы Windows, и часть таких структур и функций может измениться в следующем выпуске этой операционной системы. (Впрочем, внешние интерфейсы вроде Windows API всегда сохраняют совместимость с аналогичными интерфейсами в очередных выпусках.)
Говоря «может измениться», мы не имеем в виду, что детали устройства системы обязательно изменятся в следующем выпуске, а лишь обращаем внимание на то, что достоверность информации гарантируется исключительно для данных версий. Любое программное обеспечение, использующее недокументированные интерфейсы, может перестать работать в будущих версиях Windows. Более того, такое программное обеспечение, если оно работает в режиме ядра (как, например, драйверы устройств), может привести к краху более новых версий Windows.
Техническая поддержка
Мы приложили максимум усилий, чтобы не допустить неточностей и ошибок в книге. Если у вас возникнут какие-либо проблемы или вопросы, пожалуйста, обращайтесь по адресам, указанным в следующих двух разделах.
От авторов
Эта книга отнюдь не совершенна. Несомненно в ней есть какие-то неточности; может быть, мы упустили что-то важное. Если вы найдете то, что считаете ошибочным, или если вы сочтете, что в книгу следует включить дополнительный материал, пожалуйста, пошлите свое сообщение по адресу windowsinternals@sysinternals.com . Обновления и исправления будут выкладываться на страницу wwwsysinternals.com/windowsinternals*
От Microsoft Press
Microsoft публикует исправления к книгам по адресу http://www.microsoftcom/learning/support. Для прямого подключения к Microsoft Learning Knowledge Base и ввода запроса по проблеме, с которой вы столкнулись, заходите на страницу http://www.microsoft.comflearning/support/search.asp .
B переводе учтены исправления, опубликованные на этой Web-странице, по состоянию на 1 июля 2005 года. — Прим. перев.
ГЛABA 1 Концепции и инструменты
B этой главе мы познакомим вас с основными концепциями и терминами операционной системы Microsoft Windows, которые будут использоваться в последующих главах, в том числе с Windows API, процессами, потоками, виртуальной памятью, режимом ядра и пользовательским режимом, объектами, описателями (handles), защитой, реестром. Мы также расскажем об инструментах, с помощью которых вы сможете исследовать внутреннее устройство Windows. K ним относятся, например, отладчик ядра, оснастка Performance и важнейшие утилиты с сайта www.sysinternals.com . Кроме того, мы поясним, как пользоваться Windows Device Driver Kit (DDK) и Platform Software Development Kit (SDK) в качестве источника дополнительной информации о внутреннем устройстве Windows.
Вы должны хорошо понимать все, что написано в этой главе, — в остальной части книги мы предполагаем именно так.
Версии операционных систем Windows
Эта книга охватывает три последние версии операционной системы Microsoft Windows, основанные на кодовой базе Windows NT: Windows 2000, Windows XP (32- и 64-разрядные версии) и Windows Server 2003 (32- и 64-разрядные версии). Текст относится ко всем трем версиям, если не оговорено иное. B таблице 1–1 перечислены выпуски кодовой базы Windows NT, номера версий и названия продуктов.
Windows NT и Windows 95
При первом выпуске Windows NT компания Microsoft дала ясно понять, что это долгосрочная замена Windows 95 (и ее последующих выпусков — Windows 98 и Windows Millennium Edition). Вот список некоторых архитектурных различий и преимуществ Windows NT (и ее последующих выпусков) над Windows 95 (и ее последующими выпусками).
• Windows NT поддерживает многопроцессорные системы, a Windows 95 — нет.
• Файловая система Windows NT поддерживает средства защиты, например управление избирательным доступом (discretionary access control). B файловой системе Windows 95 этого нет.
• Windows NT — полностью 32-разрядная (а теперь и 64-разрядная) операционная система, в ней нет 16-разрядного кода, кроме того, который предназначен для выполнения 16-разрядных Windows-приложений. Windows 95 содержит большой объем старого 16-разрядного кода из предшествующих операционных систем — Windows 3.1 nMS-DOS.
• Windows NT полностью реентерабельна, а многие части Windows 95 нереентерабельны (в основном это касается 16-разрядного кода, взятого из Windows 3.1 ). Большинство функций, связанных с графикой и управлением окнами (GDI и USER), включают именно нереентерабельный код. Когда 32-разрядное приложение в Windows 95 пытается вызвать системный сервис, реализованный как нереентерабельный 16-разрядный код, оно должно сначала получить общесистемную блокировку (или мьютекс), чтобы предотвратить вход других потоков в нереентерабельную кодовую базу. Еще хуже, что 16-разрядное приложение удерживает такую блокировку в течение всего времени своего выполнения. B итоге, хотя ядро Windows 95 содержит 32-разрядный планировщик с поддержкой мно-гопоточности и вытесняющей многозадачности, приложения часто работают как однопоточные из-за того, что большая часть системы реализована как нереентерабельный код.
• Windows NT позволяет выполнять 16-разрядные Windows-приложения в выделенном адресном пространстве, a Windows 95 всегда выполняет такие приложения в общем адресном пространстве, в котором они могут навредить друг другу и привести к зависанию системы.
• Разделяемая (общая) память процесса в Windows NT видна только тем процессам, которые имеют проекцию на один и тот же блок разделяемой памяти. B Windows 95 вся общая память видна и доступна для записи всем процессам. Таким образом, любой процесс может что-то записать и повредить какие-то данные в общей памяти, используемые другими процессами.
• Некоторые критически важные страницы памяти, занимаемые операционной системой Windows 95, доступны для записи из пользовательского режима, а значит, обычное приложение может повредить содержимое этих страниц и привести к краху системы. Единственное, что умеет Windows 95 и чего никогда не смогут делать операционные системы на основе Windows NT, — выполнять все старые программы для MS-DOS и Windows 3.1 (а именно программы, требующие прямого доступа к оборудованию), а также 16-разрядные драйверы устройств MS-DOS. Если одной из основных целей разработки Windows 95 была 100 %-я совместимость с MS-DOS и Windows 3.1, то исходной целью разработки Windows NT — возможность выполнения большинства существующих 16-разрядных приложений при условии сохранения целостности и надежности системы.
Базовые концепции и термины
B книге будут часто встречаться ссылки на концепции и структуры, с которыми некоторые читатели, возможно, не знакомы. Здесь мы определимся с используемой в дальнейшем терминологией.
Windows API
Это системный интерфейс программирования в семействе операционных систем Microsoft Windows, включая Windows 2000, Windows XP, Windows Server 2003, Windows 95, Windows 98, Windows Millennium Edition (Me) и Windows CE. Каждая операционная система реализует разное подмножество Windows API. Windows 95, Windows 98, Windows Me и Windows CE в этой книге не рассматриваются.
ПРИМЕЧАНИЕ Windows API описывается в документации Platform Software Development Kit (SDK). (См. раздел «Platform Software Development Kit (SDK)» далее в этой главе.) Этудокументацию можно бесплатно просмотреть на сайте msdn.microsoft.com. Она также поставляется с Microsoft Developer Network (MSDN) всех уровней подписки. (MSDN — это программа Microsoft для поддержки разработчиков. Подробности см. на сайте msdn.microsqft.com.) Отличное описание того, как программировать с использованием базового Windows API, см. в четвертом издании книги Джеффри Рихтера Jeffrey Richter) «Microsoft Windows для профессионалов» (Русская Редакция, 2000).
До появления 64-разрядных версий Windows XP и Windows Server 2003 интерфейс программирования 32-разрядных версий операционных систем Windows назывался Win32 API, чтобы отличать его от исходного 16-разрядного Windows API. B этой книге термин «Windows API» относится к 32-разрядному интерфейсу программирования Windows 2000, а также к 32- и 64-разрядным интерфейсам программирования Windows XP и Windows Server 2003.
Windows API включает тысячи вызываемых функций, которые сгруппированы в следующие основные категории:
• базовые сервисы (Base Services);
• сервисы компонентов (Component Services);
• сервисы пользовательского интерфейса (User Interface Services);
• сервисы графики и мультимедиа (Graphics and Multimedia Services);
• коммуникационное взаимодействие и совместная работа (Messaging and Collaboration);
• сети (Networking);
• Web-сервисы (Web Services).
Основное внимание в нашей книге уделяется внутреннему устройству ключевых базовых сервисов, в частности поддержки процессов и потоков (threads), управления памятью, ввода-вывода и защиты.
Как насчет. NET и WinFX?
NET Framework состоит из библиотеки классов, называемой Framework Class Library (FCL), и общеязыковой исполняющей среды (Common Language Runtime, CLR), которая предоставляет среду для выполнения управляемого кода с такими возможностями, как компиляция по требованию (just-in-time compilation, JIT compilation), верификация типов, сбор мусора и защита по правам доступа кода (code access security). Благодаря этому CLR создает среду разработки, которая повышает продуктивность труда программистов и уменьшает вероятность появления распространенных ошибок программирования. Отличное описание. NET Framework и ее базовой архитектуры см. в книге Джеффри Рихтера «Программирование на платформе Microsoft.NET Frame-work» (Русская Редакция, 2003).
CLR реализована как классический СОМ-сервер, код которой хранится в стандартной Windows DLL пользовательского режима. Фактически все компоненты. NET Framework реализованы как стандартные Windows DLL пользовательского режима, занимающие уровень поверх неуправляемых функций Windows APL (Никакие компоненты. NET Framework не работают в режиме ядра.) Ha рис. 1–1 показаны взаимосвязи этих компонентов.
WinFX — «новый Windows API». Это результат эволюционного развития. NET Framework, которая будет поставляться с версией Windows под кодовым названием «Longhorn», следующим выпуском Windows. WinFX также можно установить в Windows XP и Windows Server 2003. WinFX образует фундамент для приложений следующего поколения, создаваемых для операционной системы Windows.
История создания Win32 API
Интересно, что поначалу Win32 не рассматривался как интерфейс программирования для Microsoft Windows NT. Поскольку проект Windows NT начинался как замена OS/2 версии 2, основным интерфейсом программирования был 32-разрядный OS/2 Presentation ManagerAPI. Однако год спустя на рынке появилась Microsoft Windows 3.0, быстро ставшая очень популярной. B результате Microsoft сменила курс и перенацелила проект Windows NT на будущую замену семейства продуктов Windows, а не OS/2. Вот на этом-то перепутье и встал вопрос о создании Windows API — до этого Windows API существовал только как 16-разрядный интерфейс.
Хотя в Windows API должно было появиться много новых функций, отсутствующих в Windows 3.1, Microsoft решила сделать новый API по возможности совместимым с именами функций, семантикой и типами данных в 16-разрядном Windows API, чтобы максимально облегчить бремя переноса существующих 16-разрядных Windows-приложений в Windows NT Поэтому тот, кто, впервые глядя на Windows API, удивляется, почему многие имена и интерфейсы функций кажутся противоречивыми, должен учитывать, что одной из причин такой противоречивости было стремление сделать Windows API совместимым со старым 16-разрядным Windows API.
Сервисы, функции и процедуры
Несколько терминов в документации Windows для пользователей и программистов имеет разный смысл в разных контекстах. Например, понятие «сервис» (service) может относиться к вызываемой функции операционной системы, драйверу устройства или серверному процессу (в последнем случае сервис часто называют службой). Ниже показано, что означают подобные термины в этой книге.
• Функции Windows API Документированные, вызываемые подпрограммы в Windows API, например CreateProcess, CreateFile и GetMessage.
• Неуправляемые («родные») системные сервисы (или исполняемые системные сервисы) Недокументированные низкоуровневые сервисы операционной системы, которые можно вызывать в пользовательском режиме. Так, NtCreateProcess — это внутрисистемный сервис, вызываемый Windows-функцией CreateProcess при создании нового процесса. (Определение неуправляемых функций см. в разделе «Диспетчеризация системных сервисов» главы 3.)
• Функции (или процедуры) ядра Подпрограммы внутри операционной системы Windows, которые можно вызывать только в режиме ядра (определение мы дадим чуть позже). Например, ExAllocatePool — процедура, вызываемая драйверами устройств для выделения памяти из системных куч (динамически распределяемых областей памяти) Windows.
• Windows-сервисы Процессы, запускаемые диспетчером управления сервисами в Windows. (Хотя в документации на реестр драйверы устройств Windows определяются как сервисы, мы не пользуемся таким термином в этой книге.) Например, сервис Task Scheduler выполняется в процессе пользовательского режима, который поддерживает команду at (аналогичную UNIX-команде at или cron).
• DLL (динамически подключаемая библиотека) Набор вызываемых подпрограмм, включенных в один двоичный файл, который приложения, использующие эти подпрограммы, могут динамически загружать во время своего выполнения. B качестве примера можно привести модули Msvcrt.dll (библиотека исполняющей подсистемы C) и Kernel32.dll (одна из библиотек подсистемы Windows API). DLL активно используются компонентами и приложениями Windows пользовательского режима. Преимущество DLL над статическими библиотеками в том, что приложения могут разделять DLL-модули, a Windows гарантирует, что в памяти будет находиться лишь по одному экземпляру используемых DLL.
Процессы, потоки и задания
Хотя на первый взгляд кажется, что программа и процесс — понятия практически одинаковые, они фундаментально отличаются друг от друга. Программа представляет собой статический набор команд, а процесс — это контейнер для набора ресурсов, используемых при выполнении экземпляра программы. Ha самом высоком уровне абстракции процесс в Windows включает следующее:
• закрытое виртуальное адресное пространство — диапазон адресов виртуальной памяти, которым может пользоваться процесс;
• исполняемую программу — начальный код и данные, проецируемые на виртуальное адресное пространство процесса;
• список открытых описателей (handles) различных системных ресурсов — семафоров, коммуникационных портов, файлов и других объектов, доступных всем потокам в данном процессе;
• контекст защиты (security context), называемый маркером доступа (access token) и идентифицирующий пользователя, группы безопасности и привилегии, сопоставленные с процессом;
• уникальный идентификатор процесса (во внутрисистемной терминологии называемый идентификатором клиента);
• минимум один поток.
Каждый процесс также указывает на свой родительский процесс (процесс-создатель). Однако, если родитель существует, эта информация не обновляется. Поэтому есть вероятность, что некий процесс указывает на уже несуществующего родителя. Это не создает никакой проблемы, поскольку никто не полагается на наличие такой информации. Следующий эксперимент иллюстрирует данный случай.
ЭКСПЕРИМЕНТ: просмотр дерева процессов
Большинство утилит не отображает такой уникальный атрибут, как идентификатор родительского процесса. Значение этого атрибута можно получить программно или с помощью оснастки Performance, запросив значение счетчика Creating Process ID [Код (ID) создавшего процесса]. Дерево процессов показывается утилитой Tlist.exe (из Windows Debugging Tools), если вы указываете ключ /t. Вот образец вывода этой команды:
Взаимоотношения процессов (дочерний-родительский) Tlist показывает отступами. Имена процессов, родительские процессы которых на данный момент завершились, выравниваются по левому краю, потому что установить их родственные связи невозможно — даже если процессы-прапредки еще существуют. Windows сохраняет идентификатор только родительского процесса, так что проследить его создателя нельзя. Чтобы убедиться в этом, выполните следующие операции.
1. Откройте окно командной строки.
2. Наберите start cmd для запуска второго окна командной строки.
3. Откройте диспетчер задач.
4. Переключитесь на второе окно командной строки.
5. Введите mspaint для запуска Microsoft Paint.
6. Щелкните второе окно командной строки.
7. Введите exit. (Заметьте, что окно Paint остается.)
8. Переключитесь в диспетчер задач.
9. Откройте его вкладку Applications (Приложения).
10.Щелкните правой кнопкой мыши задачу Command Prompt (Командная строка) и выберите Go To Process (Перейти к процессам).
11. Щелкните процесс Cmd.exe, выделенный серым цветом.
12. Щелкнув правой кнопкой мыши, выберите команду End Process Tree
(Завершить дерево процессов).
13. B окне Task Manager Warning (Предупреждение диспетчера задач) щелкните Yes (Да).
Первое окно командной строки исчезнет, но вы по-прежнему сможете наблюдать окн
4 дня назад
9 AbrakaDaniel 26 был отпр 4 дня назад
10 AbrakaDaniel
http://apero.ru
Главная
Играй онлайн!
Конкурс открыт!
Сообщения
Участники
Магазин (2)
Создай игру!
Документация
Задания
iFiction.ru
Мы ВКонтакте

Профиль
Привет, AbrakaDaniel
Сейчас в онлайне AbrakaDaniel (Vetal123) и 20 гостей.
Партнеры Аперо:
"Коллекционер" - Страшный квест в Челнах!

В игре или на сайте ошибка?
Выдели текст и жми сюда или Ctrl+Enter
Разработчики скажут спасибо :)
Навигация:http://apero.ru / Участники / Vetal123
Vetal123 - страница участника аперо-сообщества

Профиль не активирован. Если это твой профиль - проверь e-mail, указанный при регистрации, и перейди по ссылке для активации.
Последние комментарии:

1 AbrakaDaniel
http://apero.ru
Главная
Играй онлайн!
Конкурс открыт!
Сообщения
Участники
Магазин (2)
Создай игру!
Документация
Задания
iFiction.ru
Мы ВКонтакте
Профиль
Привет, AbrakaDaniel
Сейчас в онлайне AbrakaDaniel (Vetal123) и 20 гостей.
Партнеры Аперо:
"Коллекционер" - Страшный квест в Челнах!
В игре или на сайте ошибка?
Выдели текст и жми сюда или Ctrl+Enter
Разработчики скажут спасибо :)
Навигация:http://apero.ru / Участники / Vetal123
Vetal123 - страница участника аперо-сообщества
Профиль не активирован. Если это твой профиль - проверь e-mail, указанный при регистрации, и перейди по ссылке для активации.
Последние комментарии:
1 AbrakaDaniel
http://apero.ru
Главная
Играй онлайн!
Конкурс открыт!
Сообщения
Участники
Магазин (2)
Создай игру!
Документация
Задания
iFiction.ru
Мы ВКонтакте
Профиль
Привет, AbrakaDaniel
Сейчас в онлайне AbrakaDaniel (Vetal123) и 20 гостей.
Партнеры Аперо:
"Коллекционер" - Страшный квест в Челнах!
В игре или на сайте ошибка?
Выдели текст и жми сюда или Ctrl+Enter
Разработчики скажут спасибо :)
Навигация:http://apero.ru / Участники / Vetal123
Vetal123 - страница участника аперо-сообщества
Профиль не активирован. Если это твой профиль - проверь e-mail, указанный при регистрации, и перейди по ссылке для активации.
Последние комментарии:
1 AbrakaDaniel
http://apero.ru
Главная
Играй онлайн!
Конкурс открыт!
Сообщения
Участники
Магазин (2)
Создай игру!
Документация
Задания
iFiction.ru
Мы ВКонтакте
Профиль
Привет, AbrakaDaniel
Сейчас в онлайне AbrakaDaniel (Vetal123) и 20 гостей.
Партнеры Аперо:
"Коллекционер" - Страшный квест в Челнах!
В игре или на сайте ошибка?
Выдели текст и жми сюда или Ctrl+Enter
Разработчики скажут спасибо :)
Навигация:http://apero.ru / Участники / Vetal123
Vetal123 - страница участника аперо-сообщества
Профиль не активирован. Если это твой профиль - проверь e-mail, указанный при регистрации, и перейди по ссылке для активации.
Последние комментарии:
1 AbrakaDaniel
http://apero.ru
Главная
Играй онлайн!
Конкурс открыт!
Сообщения
Участники
Магазин (2)
Создай игру!
Документация
Задания
iFiction.ru
Мы ВКонтакте
Профиль
Привет, AbrakaDaniel
Сейчас в онлайне AbrakaDaniel (Vetal123) и 20 гостей.
Партнеры Аперо:
"Коллекционер" - Страшный квест в Челнах!
В игре или на сайте ошибка?
Выдели текст и жми сюда или Ctrl+Enter
Разработчики скажут спасибо :)
Навигация:http://apero.ru / Участники / Vetal123
Vetal123 - страница участника аперо-сообщества
Профиль не активирован. Если это твой профиль - проверь e-mail, указанный при регистрации, и перейди по ссылке для активации.
Последние комментарии:
1 AbrakaDaniel Аннотация: Книга посвящена внутреннему устройству и алгоритмам работы основных компонентов операционной системы Microsoft Windows — Windows Server 2003, Windows XP и Windows 2000 — и файловой системы NTFS. Детально рассмотрены системные механизмы: диспетчеризация ловушек и прерываний, DPC, APC, LPC, RPC, синхронизация, системные рабочие потоки, глобальные флаги и др. Также описываются все этапы загрузки операционной системы и завершения ее работы. B четвертом издании книги больше внимания уделяется глубокому анализу и устранению проблем, из-за которых происходит крах операционной системы или из-за которых ее не удается загрузить. Кроме того, рассматриваются детали реализации поддержки аппаратных платформ AMD x64 и Intel IA64. Книга состоит из 14 глав, словаря терминов и предметного указателя. Книга предназначена системным администраторам, разработчикам серьезных приложений и всем, кто хочет понять, как устроена операционная система Windows.
Названия всех команд, диалоговых окон и других интерфейсных элементов операционной системы приведены как на английском языке, так и на русском.
Версия Fb2 редакции — 1.5 . Об ошибках просьба сообщать по адресу — general2008@ukr.net.
---------------------------------------------
М.Руссинович, Д.Соломон
Внутреннее устройство Microsoft Windows (главы 1–4)
Windows Server™ 2003, Windows XP и Windows 2000
4-е издание
Предыстория
Я вновь признателен Дэвиду Соломону (David Solomon) и Марку Руссиновичу (Mark Russinovich) за то, что они предоставили мне возможность сказать несколько слов о новом издании их книги «Внутреннее устройство Microsoft Windows». Прошло уже более трех лет с момента выхода последнего издания этой книги, и за это время на свет появились два выпуска операционной системы Windows — очень значимые обновления клиентской и серверной систем.
Перед авторами стояли две задачи, которые постоянно усложняются: отслеживание эволюционного развития системы Microsoft Windows NT и документирование того, как менялась реализация ее компонентов в каждой версии. B этом смысле авторы проделали просто выдающуюся работу.
(Слева направо) Дэвид Соломон, Дэвид Катлер и Марк Руссинович
Впервые я познакомился с Дэвидом Соломоном, когда ему было всего 16 лет, а я работал в Digital Equipment Corporation над операционной системой VMS для VAX. C тех пор он участвовал в разработке операционных систем, а также преподавал в этой области. C Марком Руссиновичем я познакомился позже, но уже задолго до этого был немало наслышан о его глубоких познаниях в области операционных систем. B числе его заслуг версия файловой системы NTFS, которую он заставил работать в Microsoft Windows 98, и «живой» отладчик ядра Windows, позволяющий заглянуть внутрь системы Windows в процессе ее выполнения.
Истоки Windows NT восходят к октябрю 1988 года, когда было решено создать переносимую операционную систему, совместимую с OS/2, поддерживающую POSIX и многопроцессорную обработку, обладающую высокой защищенностью, надежностью и интегрированными средствами работы в сетях. C приходом Windows 3.0 и ее колоссальным успехом заявленные цели несколько изменились: совместимость с OS/2 была перенесена с уровня всей системы на уровень отдельной подсистемы.
Поначалу мы полагали, что сумеем создать Windows NT за пару лет, но в действительности ее первая версия вышла лишь через четыре с половиной года — летом 1993-го. Эта версия поддерживала процессоры Intel i386, Intel i486 и MIPS R4000. Шесть недель спустя мы ввели поддержку и для процессоров Digital Alpha.
Первая версия Windows NT получилась более громоздкой и медленной, чем ожидалось, так что следующей вехой стал проект Daytona (так называется автострада во Флориде). Главной целью в этой версии было уменьшение размера системы, повышение ее быстродействия и, разумеется, надежности. Через полгода после выпуска Windows NT 3.5 осенью 1994-го мы подготовили Windows NT 3.51, которая представляла собой обновленную версию с дополнительной поддержкой процессора IBM PowerPC.
Толчком к созданию следующей версии Windows NT стало желание сделать пользовательский интерфейс, совместимый с Windows 95, и включить технологии Cairo, уже находившиеся в разработке пару лет. Ha создание этой системы ушло еще два года, и летом 1996 года была представлена Windows NT 4.0.
Название следующей версии NT было изменено на Windows 2000. Она стала последней системой, для которой одновременно выпускались клиентская и серверная версии. Windows 2000 была построена на той же технологии Windows NT, что и предыдущие версии, но обладала новой важной функциональностью, поддерживая, в частности, Active Directory. Ha разработку Windows 2000 ушло три с половиной года, и на тот период она была самой оптимизированной и наиболее тщательно протестированной версией технологии Windows NT Windows 2000 стала кульминацией более чем одиннадцатилетних разработок, реализованных на четырех архитектурах.
B конце разработки Windows 2000 мы приступили к работе над амбициозным планом реализации новых версий клиентской и серверной систем, которые должны были предоставить новые, более совершенные возможности потребителям и улучшить характеристики серверов. Ho потом стало ясно, что реализация серверных средств привела бы к задержке в реализации клиентских, и поэтому было решено разделить выпуски. B августе 2001 года на свет появились Windows XP Professional и Windows XP Home Edition, a через год с небольшим, в марте 2003 года была выпущена Microsoft Windows Server 2003. Помимо архитектуры Intel x86, эти системы поддерживали Intel IA64, благодаря чему Windows NT впервые вышла на стезю 64-разрядных вычислений.
Эта книга единственная, где так глубоко и полно рассмотрены внутренние структуры и принципы функционирования Windows XP и Windows Server
2003. Кроме того, она предлагает заглянуть в будущее — перевод Windows на 64-разрядные «рельсы», т. е. на ее поддержку архитектур x64 (AMD64) и Intel EM64T, объявленных AMD в 2003 году и Intel в феврале 2004 года соответственно. Выпуск клиентской и серверной версий с полной поддержкой x64 запланирован на первую половину 2005 года, и в этой книге содержится масса информации о внутренних деталях реализации х64-системы.
Архитектура х64 — это начало новой эры для Windows NT в тот момент, когда время архитектуры x86 подходит к концу. Архитектура x64 обеспечивает совместимость с 32-разрядной х86-платформой и предоставляет 64-разрядную адресацию для наиболее требовательных, совершенно новых приложений. Это позволит сохранить инвестиции в 32-разрядное программное обеспечение, в то же время вдохнув новую жизнь в Windows NT на ближайшее десятилетие или даже на более длительный период.
Хотя название NT-системы за последние несколько лет неоднократно менялось, она по-прежнему полностью основана на исходной кодовой базе Windows NT. Ho время бежит, появляются новые технологии, и реализация многих внутренних компонентов и функций значительно изменилась. Авторы проделали внушительную работу, собрав столько детальной информации о кодовой базе Windows NT и ее реализациях в разных выпусках на разных платформах, а также создав примеры и утилиты, которые помогают читателю разобраться в том, как работают компоненты и подсистемы Windows. Экземпляр этой книги должен лежать на столе у каждого разработчика серьезного программного обеспечения.
Дэвид H. Катлер, заслуженный старший инженер корпорации Microsoft
Предисловие
Microsoft Windows была частью моей жизни целых 14 лет. За это время — от версии к версии — наша операционная система развивалась вширь и вглубь. Сегодня работа над Windows — один из самых важных и сложных проектов в мире. B выпуске Windows участвуют более 5000 инженеров. Среди пользователей Windows есть представители уже почти всех культур, она используется как на крупных предприятиях, так и маленькими детьми. Пользователи Windows постоянно требуют ее совершенствования практически во всех сферах — от эффективной работы на крупнейших серверах до применения в дошкольном обучении. Windows поставляется в самых разных ипостасях — от встраиваемых версий и выпусков для медиа-центров до редакций для центров обработки данных. Все эти продукты опираются на одни и те же базовые компоненты Windows, которые развиваются и совершенствуются в каждой новой версии.
Это фундаментальная книга о внутреннем устройстве базовых компонентов Windows. Если вы хотите как можно быстрее освоить принципы внутренней работы Windows, тогда эта книга для вас. Освоение всех частей столь основательного продукта — задача устрашающая. Ho если вы начнете с базовых концепций системы, сложить фрагменты головоломки воедино будет гораздо легче. C эволюцией самой Windows развивается и эта книга — сейчас публикуется ее четвертое издание. Мы уже давно используем ее для обучения новых сотрудников Microsoft, так что предлагаемые вам материалы проверены на практике.
Если вы вроде меня, значит, вам тоже нравится разбираться в том, как устроены вещи. Чтение книжек типа «как использовать то-то и то-то» меня никогда не удовлетворяло. Когда понимаешь, как именно устроена вещь, пользуешься ею гораздо эффективнее и, честно говоря, с большим удовольствием. Если вас интересует Windows «с изнанки», вы выбрали подходящую книгу.
Дэвид и Марк проделали превосходную работу, написав книгу о технической «изнанке» Windows. A инструменты, которые они предлагают вам, — отличное средство для самостоятельного обучения и диагностики. Прочитав эту книгу, вы будете гораздо лучше понимать, как взаимодействуют между собой различные компоненты и подсистемы, какие усовершенствования внесены в новую версию и как выжать из них максимум возможного.
Это был долгий путь — и он все еще продолжается. Так что открывайте книгу, а заодно и капот, под которым бьется сердце одной из самых потрясающих операционных систем.
Джим Олчин, вице-президент группы платформ корпорации Microsoft
Благодарности
B первую очередь мы хотим особо поблагодарить следующих людей.
• Дэйва Катлера (Dave Cutler), заслуженного старшего инженера и первого архитектора Microsoft Windows NT. Дэйв разрешил Дэвиду Соломону (David Solomon) доступ к исходному коду и всячески поддерживал его преподавательскую деятельность, посвященную объяснению деталей внутреннего устройства Windows NT, а также его работу над вторым и третьим изданием книги. Помимо рецензирования главы по процессам и потокам, Дэйв ответил на массу вопросов об архитектуре ядра и написал об истории создания Windows для нашей книги.
• Джима Олчина Jim Allchin), нашего главного спонсора, — за предисловие к этой книге и за отстаивание интересов нашего дела в Microsoft.
• Роба Шорта (Rob Short), вице-президента, который позаботился о том, чтобы нам предоставили ресурсы и доступ к нужным людям.
Мы также выражаем признательность двум разработчикам из отдела Windows за подготовку новых материалов, включенных в это издание:
• Адриану Маринеску (Adrian Marinescu), который написал заметно разросшийся раздел по диспетчеру куч в главе, где рассматривается диспетчер памяти.
• Самеру Арафеху (Samer Arafeh), который предоставил материалы по Wow64.
Спасибо нашему старому приятелю, Джеффри Рихтеру Jeffrey Richter), с которым мы часто вместе обедаем, за врезку «Как насчет. NET и WinFX?» в главе 1 и за постоянное напоминание о том, как мало людей, по-настоящему интересующихся тем, о чем мы говорим в своей книге.
B этой книге не было бы такой глубины и точности изложения технических сведений без поддержки, замечаний и предложений ключевых членов команды разработчиков Microsoft Windows. Вот эти люди:
Были и другие, кто отвечал на наши вопросы в коридорах или кафетериях, — если мы вас пропустили, пожалуйста, простите нас!
Мы также выражаем благодарность Джейми Ханрахан Jamie Hanrahan) из Azius Developer Training (www.azius.com), которая в соавторстве с Дэвидом подготовила учебный курс по внутренней архитектуре исходной версии Windows. Ha основе этого курса было написано второе издание этой книги. Джейми, у которой настоящий талант доходчиво объяснять сложнейшие вещи, предоставила нам отдельные материалы, а также ряд схем и иллюстраций.
Спасибо Дэйву Проберту (Dave Probert) за то, что разместил в сети наши черновые материалы для распространения среди рецензентов внутри Microsoft.
Благодарим Джонатана Славза (Jonathan Sloves) из AMD, с помощью которого нам предоставили тестовые системы AMD64; они очень помогли нам в написании материалов по 64-разрядной архитектуре и в переносе ряда утилит Sysinternals на платформу x64.
Наконец, мы хотим выразить благодарность следующим сотрудникам Microsoft Press за их вклад в эту книгу.
• Робину Ван-Штеенбергу (Robin van Steenburgh), рецензенту издательства, за терпение в работе с нами над этим проектом.
• Салли Стикни (Sally Stickney), которая на первых порах по-прежнему была редактором нашего проекта, но потом ее закрутил водоворот административных дел. Мы очень скучали без вас!
• Валери Вулли (Valerie Woolley), которая приняла бразды правления от Салли и стала нашим новым редактором проекта. Вы замечательная и не такая резкая, как Салли!
• Роджеру Лебланку (Roger LeBlanc), который одолел все главы и сумел сократить в них текст, найти несогласованности и вообще довести нашу рукопись до высоких стандартов Microsoft Press.
Дэвид Соломон и Марк Руссинович сентябрь 2004 г.
Введение
Четвертое издание этой книги ориентировано на квалифицированных специалистов (программистов, разработчиков и системных администраторов), желающих разобраться в принципах внутренней работы основных компонентов операционных систем Microsoft Windows 2000, Microsoft Windows XP и Microsoft Windows Server 2003. Зная их, разработчики смогут принимать более эффективные решения на этапах проектирования приложений для платформы Windows. Такие знания помогут программистам и в отладке — при устранении сложных проблем. Информация, изложенная в книге, будет также полезна системным администраторам: понимание того, как устроена и работает операционная система, упростит им оптимизацию своих систем и устранение неполадок в случае каких-либо сбоев. Прочитав эту книгу, вы лучше поймете, как функционирует Windows и почему она ведет себя именно так, а не как-то иначе.
Структура книги
Первые две главы закладывают фундамент, вводя термины и концепции, используемые во всей книге. Следующие три главы описывают ключевые механизмы операционной системы. B следующих восьми главах детально рассматриваются базовые компоненты Windows — процессы, потоки и задания, управление памятью, защита, подсистема ввода-вывода, управление внешней памятью, диспетчер кэша, файловые системы и поддержка сетей. Наконец, в последней главе поясняется, как проводить анализ аварийных дампов памяти.
История написания книги
Это четвертое издание книги, которая изначально называлась «Inside Windows NT» (Microsoft Press, 1992) и была написана Хелен Кастер (Helen Custer) еще до выпуска Microsoft Windows NT 3.1. Она стала первой книгой по Windows NT и представляла собой глубокий обзор архитектуры этой системы. Второе издание, «Inside Windows NT» (Microsoft Press, 1998), было написано Дэвидом Соломоном. B него вошла новая информация по Windows NT 4.0, а сама книга стала гораздо более глубокой. Третье издание, «Inside Windows 2000» (Microsoft Press, 2000), было подготовлено Дэвидом Соломоном и Марком Руссиновичем. B нем появилось много новых тематических разделов, в том числе по этапам загрузки и завершения работы системы, внутреннему устройству сервисов и реестра, по драйверам файловых систем, поддержке сетей, а также по новой функциональности ядра Windows 2000, например модели WDM, Plug and Play, WMI, шифрованию, Terminal Services и др.
Особенности четвертого издания
Новое издание дополнено информацией об изменениях в ядре, которые были внесены в Windows XP и Windows Server 2003, в том числе касающихся поддержки 64-разрядных систем. Материалы для экспериментов также были обновлены, чтобы отразить изменения в усовершенствованных утилитах и научить вас пользоваться новыми инструментами, которых не было на момент подготовки третьего издания.
Так как отличия новых версий Windows от Windows 2000 относительно невелики (по сравнению с различиями между Windows NT 4.0 и Windows 2000), основная часть книги равно применима к Windows 2000, Windows XP и Windows Server 2003. Поэтому, если не оговорено иное, все сказанное относится ко всем трем версиям.
Инструменты для проведения экспериментов
Даже без доступа к исходному коду существующие инструменты вроде отладчика ядра позволяют многое прояснить во внутреннем устройстве Windows. B том месте, где для демонстрации какого-либо аспекта поведения Windows используется тот или иной инструмент, во врезке «Эксперимент» даются инструкции по его применению. Такие врезки часто встречаются в книге, и мы рекомендуем вам проделывать эти эксперименты в процессе чтения: наглядно увидев, как ведет себя Windows в конкретной ситуации, вы гораздо лучше усвоите прочитанный материал.
Тематика, не рассматриваемая в книге
Windows — большая и сложная операционная система. Нельзя объять необъятное, и поэтому основное внимание в книге уделяется только базовым системным компонентам. Например, мы не рассматриваем COM+, инфраструктуру объектно-ориентированного программирования распределенных приложений для Windows, или. NET Framework, платформу для следующего поколения приложений с управляемым кодом.
Поскольку наша книга о внутреннем устройстве Windows, а не о том, как пользоваться этой операционной системой, программировать для нее или администрировать системы, созданные на ее основе, вы не найдете здесь никаких сведений об использовании, программировании и конфигурировании Windows.
Подводные камни
B книге описываются недокументированные внутренние структуры и функции ядра, архитектура и различные аспекты внутренней работы Windows, и часть таких структур и функций может измениться в следующем выпуске этой операционной системы. (Впрочем, внешние интерфейсы вроде Windows API всегда сохраняют совместимость с аналогичными интерфейсами в очередных выпусках.)
Говоря «может измениться», мы не имеем в виду, что детали устройства системы обязательно изменятся в следующем выпуске, а лишь обращаем внимание на то, что достоверность информации гарантируется исключительно для данных версий. Любое программное обеспечение, использующее недокументированные интерфейсы, может перестать работать в будущих версиях Windows. Более того, такое программное обеспечение, если оно работает в режиме ядра (как, например, драйверы устройств), может привести к краху более новых версий Windows.
Техническая поддержка
Мы приложили максимум усилий, чтобы не допустить неточностей и ошибок в книге. Если у вас возникнут какие-либо проблемы или вопросы, пожалуйста, обращайтесь по адресам, указанным в следующих двух разделах.
От авторов
Эта книга отнюдь не совершенна. Несомненно в ней есть какие-то неточности; может быть, мы упустили что-то важное. Если вы найдете то, что считаете ошибочным, или если вы сочтете, что в книгу следует включить дополнительный материал, пожалуйста, пошлите свое сообщение по адресу windowsinternals@sysinternals.com . Обновления и исправления будут выкладываться на страницу wwwsysinternals.com/windowsinternals*
От Microsoft Press
Microsoft публикует исправления к книгам по адресу http://www.microsoftcom/learning/support. Для прямого подключения к Microsoft Learning Knowledge Base и ввода запроса по проблеме, с которой вы столкнулись, заходите на страницу http://www.microsoft.comflearning/support/search.asp .
B переводе учтены исправления, опубликованные на этой Web-странице, по состоянию на 1 июля 2005 года. — Прим. перев.
ГЛABA 1 Концепции и инструменты
B этой главе мы познакомим вас с основными концепциями и терминами операционной системы Microsoft Windows, которые будут использоваться в последующих главах, в том числе с Windows API, процессами, потоками, виртуальной памятью, режимом ядра и пользовательским режимом, объектами, описателями (handles), защитой, реестром. Мы также расскажем об инструментах, с помощью которых вы сможете исследовать внутреннее устройство Windows. K ним относятся, например, отладчик ядра, оснастка Performance и важнейшие утилиты с сайта www.sysinternals.com . Кроме того, мы поясним, как пользоваться Windows Device Driver Kit (DDK) и Platform Software Development Kit (SDK) в качестве источника дополнительной информации о внутреннем устройстве Windows.
Вы должны хорошо понимать все, что написано в этой главе, — в остальной части книги мы предполагаем именно так.
Версии операционных систем Windows
Эта книга охватывает три последние версии операционной системы Microsoft Windows, основанные на кодовой базе Windows NT: Windows 2000, Windows XP (32- и 64-разрядные версии) и Windows Server 2003 (32- и 64-разрядные версии). Текст относится ко всем трем версиям, если не оговорено иное. B таблице 1–1 перечислены выпуски кодовой базы Windows NT, номера версий и названия продуктов.
Windows NT и Windows 95
При первом выпуске Windows NT компания Microsoft дала ясно понять, что это долгосрочная замена Windows 95 (и ее последующих выпусков — Windows 98 и Windows Millennium Edition). Вот список некоторых архитектурных различий и преимуществ Windows NT (и ее последующих выпусков) над Windows 95 (и ее последующими выпусками).
• Windows NT поддерживает многопроцессорные системы, a Windows 95 — нет.
• Файловая система Windows NT поддерживает средства защиты, например управление избирательным доступом (discretionary access control). B файловой системе Windows 95 этого нет.
• Windows NT — полностью 32-разрядная (а теперь и 64-разрядная) операционная система, в ней нет 16-разрядного кода, кроме того, который предназначен для выполнения 16-разрядных Windows-приложений. Windows 95 содержит большой объем старого 16-разрядного кода из предшествующих операционных систем — Windows 3.1 nMS-DOS.
• Windows NT полностью реентерабельна, а многие части Windows 95 нереентерабельны (в основном это касается 16-разрядного кода, взятого из Windows 3.1 ). Большинство функций, связанных с графикой и управлением окнами (GDI и USER), включают именно нереентерабельный код. Когда 32-разрядное приложение в Windows 95 пытается вызвать системный сервис, реализованный как нереентерабельный 16-разрядный код, оно должно сначала получить общесистемную блокировку (или мьютекс), чтобы предотвратить вход других потоков в нереентерабельную кодовую базу. Еще хуже, что 16-разрядное приложение удерживает такую блокировку в течение всего времени своего выполнения. B итоге, хотя ядро Windows 95 содержит 32-разрядный планировщик с поддержкой мно-гопоточности и вытесняющей многозадачности, приложения часто работают как однопоточные из-за того, что большая часть системы реализована как нереентерабельный код.
• Windows NT позволяет выполнять 16-разрядные Windows-приложения в выделенном адресном пространстве, a Windows 95 всегда выполняет такие приложения в общем адресном пространстве, в котором они могут навредить друг другу и привести к зависанию системы.
• Разделяемая (общая) память процесса в Windows NT видна только тем процессам, которые имеют проекцию на один и тот же блок разделяемой памяти. B Windows 95 вся общая память видна и доступна для записи всем процессам. Таким образом, любой процесс может что-то записать и повредить какие-то данные в общей памяти, используемые другими процессами.
• Некоторые критически важные страницы памяти, занимаемые операционной системой Windows 95, доступны для записи из пользовательского режима, а значит, обычное приложение может повредить содержимое этих страниц и привести к краху системы. Единственное, что умеет Windows 95 и чего никогда не смогут делать операционные системы на основе Windows NT, — выполнять все старые программы для MS-DOS и Windows 3.1 (а именно программы, требующие прямого доступа к оборудованию), а также 16-разрядные драйверы устройств MS-DOS. Если одной из основных целей разработки Windows 95 была 100 %-я совместимость с MS-DOS и Windows 3.1, то исходной целью разработки Windows NT — возможность выполнения большинства существующих 16-разрядных приложений при условии сохранения целостности и надежности системы.
Базовые концепции и термины
B книге будут часто встречаться ссылки на концепции и структуры, с которыми некоторые читатели, возможно, не знакомы. Здесь мы определимся с используемой в дальнейшем терминологией.
Windows API
Это системный интерфейс программирования в семействе операционных систем Microsoft Windows, включая Windows 2000, Windows XP, Windows Server 2003, Windows 95, Windows 98, Windows Millennium Edition (Me) и Windows CE. Каждая операционная система реализует разное подмножество Windows API. Windows 95, Windows 98, Windows Me и Windows CE в этой книге не рассматриваются.
ПРИМЕЧАНИЕ Windows API описывается в документации Platform Software Development Kit (SDK). (См. раздел «Platform Software Development Kit (SDK)» далее в этой главе.) Этудокументацию можно бесплатно просмотреть на сайте msdn.microsoft.com. Она также поставляется с Microsoft Developer Network (MSDN) всех уровней подписки. (MSDN — это программа Microsoft для поддержки разработчиков. Подробности см. на сайте msdn.microsqft.com.) Отличное описание того, как программировать с использованием базового Windows API, см. в четвертом издании книги Джеффри Рихтера Jeffrey Richter) «Microsoft Windows для профессионалов» (Русская Редакция, 2000).
До появления 64-разрядных версий Windows XP и Windows Server 2003 интерфейс программирования 32-разрядных версий операционных систем Windows назывался Win32 API, чтобы отличать его от исходного 16-разрядного Windows API. B этой книге термин «Windows API» относится к 32-разрядному интерфейсу программирования Windows 2000, а также к 32- и 64-разрядным интерфейсам программирования Windows XP и Windows Server 2003.
Windows API включает тысячи вызываемых функций, которые сгруппированы в следующие основные категории:
• базовые сервисы (Base Services);
• сервисы компонентов (Component Services);
• сервисы пользовательского интерфейса (User Interface Services);
• сервисы графики и мультимедиа (Graphics and Multimedia Services);
• коммуникационное взаимодействие и совместная работа (Messaging and Collaboration);
• сети (Networking);
• Web-сервисы (Web Services).
Основное внимание в нашей книге уделяется внутреннему устройству ключевых базовых сервисов, в частности поддержки процессов и потоков (threads), управления памятью, ввода-вывода и защиты.
Как насчет. NET и WinFX?
NET Framework состоит из библиотеки классов, называемой Framework Class Library (FCL), и общеязыковой исполняющей среды (Common Language Runtime, CLR), которая предоставляет среду для выполнения управляемого кода с такими возможностями, как компиляция по требованию (just-in-time compilation, JIT compilation), верификация типов, сбор мусора и защита по правам доступа кода (code access security). Благодаря этому CLR создает среду разработки, которая повышает продуктивность труда программистов и уменьшает вероятность появления распространенных ошибок программирования. Отличное описание. NET Framework и ее базовой архитектуры см. в книге Джеффри Рихтера «Программирование на платформе Microsoft.NET Frame-work» (Русская Редакция, 2003).
CLR реализована как классический СОМ-сервер, код которой хранится в стандартной Windows DLL пользовательского режима. Фактически все компоненты. NET Framework реализованы как стандартные Windows DLL пользовательского режима, занимающие уровень поверх неуправляемых функций Windows APL (Никакие компоненты. NET Framework не работают в режиме ядра.) Ha рис. 1–1 показаны взаимосвязи этих компонентов.
WinFX — «новый Windows API». Это результат эволюционного развития. NET Framework, которая будет поставляться с версией Windows под кодовым названием «Longhorn», следующим выпуском Windows. WinFX также можно установить в Windows XP и Windows Server 2003. WinFX образует фундамент для приложений следующего поколения, создаваемых для операционной системы Windows.
История создания Win32 API
Интересно, что поначалу Win32 не рассматривался как интерфейс программирования для Microsoft Windows NT. Поскольку проект Windows NT начинался как замена OS/2 версии 2, основным интерфейсом программирования был 32-разрядный OS/2 Presentation ManagerAPI. Однако год спустя на рынке появилась Microsoft Windows 3.0, быстро ставшая очень популярной. B результате Microsoft сменила курс и перенацелила проект Windows NT на будущую замену семейства продуктов Windows, а не OS/2. Вот на этом-то перепутье и встал вопрос о создании Windows API — до этого Windows API существовал только как 16-разрядный интерфейс.
Хотя в Windows API должно было появиться много новых функций, отсутствующих в Windows 3.1, Microsoft решила сделать новый API по возможности совместимым с именами функций, семантикой и типами данных в 16-разрядном Windows API, чтобы максимально облегчить бремя переноса существующих 16-разрядных Windows-приложений в Windows NT Поэтому тот, кто, впервые глядя на Windows API, удивляется, почему многие имена и интерфейсы функций кажутся противоречивыми, должен учитывать, что одной из причин такой противоречивости было стремление сделать Windows API совместимым со старым 16-разрядным Windows API.
Сервисы, функции и процедуры
Несколько терминов в документации Windows для пользователей и программистов имеет разный смысл в разных контекстах. Например, понятие «сервис» (service) может относиться к вызываемой функции операционной системы, драйверу устройства или серверному процессу (в последнем случае сервис часто называют службой). Ниже показано, что означают подобные термины в этой книге.
• Функции Windows API Документированные, вызываемые подпрограммы в Windows API, например CreateProcess, CreateFile и GetMessage.
• Неуправляемые («родные») системные сервисы (или исполняемые системные сервисы) Недокументированные низкоуровневые сервисы операционной системы, которые можно вызывать в пользовательском режиме. Так, NtCreateProcess — это внутрисистемный сервис, вызываемый Windows-функцией CreateProcess при создании нового процесса. (Определение неуправляемых функций см. в разделе «Диспетчеризация системных сервисов» главы 3.)
• Функции (или процедуры) ядра Подпрограммы внутри операционной системы Windows, которые можно вызывать только в режиме ядра (определение мы дадим чуть позже). Например, ExAllocatePool — процедура, вызываемая драйверами устройств для выделения памяти из системных куч (динамически распределяемых областей памяти) Windows.
• Windows-сервисы Процессы, запускаемые диспетчером управления сервисами в Windows. (Хотя в документации на реестр драйверы устройств Windows определяются как сервисы, мы не пользуемся таким термином в этой книге.) Например, сервис Task Scheduler выполняется в процессе пользовательского режима, который поддерживает команду at (аналогичную UNIX-команде at или cron).
• DLL (динамически подключаемая библиотека) Набор вызываемых подпрограмм, включенных в один двоичный файл, который приложения, использующие эти подпрограммы, могут динамически загружать во время своего выполнения. B качестве примера можно привести модули Msvcrt.dll (библиотека исполняющей подсистемы C) и Kernel32.dll (одна из библиотек подсистемы Windows API). DLL активно используются компонентами и приложениями Windows пользовательского режима. Преимущество DLL над статическими библиотеками в том, что приложения могут разделять DLL-модули, a Windows гарантирует, что в памяти будет находиться лишь по одному экземпляру используемых DLL.
Процессы, потоки и задания
Хотя на первый взгляд кажется, что программа и процесс — понятия практически одинаковые, они фундаментально отличаются друг от друга. Программа представляет собой статический набор команд, а процесс — это контейнер для набора ресурсов, используемых при выполнении экземпляра программы. Ha самом высоком уровне абстракции процесс в Windows включает следующее:
• закрытое виртуальное адресное пространство — диапазон адресов виртуальной памяти, которым может пользоваться процесс;
• исполняемую программу — начальный код и данные, проецируемые на виртуальное адресное пространство процесса;
• список открытых описателей (handles) различных системных ресурсов — семафоров, коммуникационных портов, файлов и других объектов, доступных всем потокам в данном процессе;
• контекст защиты (security context), называемый маркером доступа (access token) и идентифицирующий пользователя, группы безопасности и привилегии, сопоставленные с процессом;
• уникальный идентификатор процесса (во внутрисистемной терминологии называемый идентификатором клиента);
• минимум один поток.
Каждый процесс также указывает на свой родительский процесс (процесс-создатель). Однако, если родитель существует, эта информация не обновляется. Поэтому есть вероятность, что некий процесс указывает на уже несуществующего родителя. Это не создает никакой проблемы, поскольку никто не полагается на наличие такой информации. Следующий эксперимент иллюстрирует данный случай.
ЭКСПЕРИМЕНТ: просмотр дерева процессов
Большинство утилит не отображает такой уникальный атрибут, как идентификатор родительского процесса. Значение этого атрибута можно получить программно или с помощью оснастки Performance, запросив значение счетчика Creating Process ID [Код (ID) создавшего процесса]. Дерево процессов показывается утилитой Tlist.exe (из Windows Debugging Tools), если вы указываете ключ /t. Вот образец вывода этой команды:
Взаимоотношения процессов (дочерний-родительский) Tlist показывает отступами. Имена процессов, родительские процессы которых на данный момент завершились, выравниваются по левому краю, потому что установить их родственные связи невозможно — даже если процессы-прапредки еще существуют. Windows сохраняет идентификатор только родительского процесса, так что проследить его создателя нельзя. Чтобы убедиться в этом, выполните следующие операции.
1. Откройте окно командной строки.
2. Наберите start cmd для запуска второго окна командной строки.
3. Откройте диспетчер задач.
4. Переключитесь на второе окно командной строки.
5. Введите mspaint для запуска Microsoft Paint.
6. Щелкните второе окно командной строки.
7. Введите exit. (Заметьте, что окно Paint остается.)
8. Переключитесь в диспетчер задач.
9. Откройте его вкладку Applications (Приложения).
10.Щелкните правой кнопкой мыши задачу Command Prompt (Командная строка) и выберите Go To Process (Перейти к процессам).
11. Щелкните процесс Cmd.exe, выделенный серым цветом.
12. Щелкнув правой кнопкой мыши, выберите команду End Process Tree
(Завершить дерево процессов).
13. B окне Task Manager Warning (Предупреждение диспетчера задач) щелкните Yes (Да).
Первое окно командной строки исчезнет, но вы по-прежнему сможете наблюдать окно Paint, так как оно является внуком первого из завершенных процессов Command Prompt. A поскольку второй (родительский процесс Paint) тоже завершен, связь между родителем и внуком потеряна.
Для просмотра (и модификации) процессов и информации, связанной с ними, существует целый набор утилит. Следующие эксперименты демонстрируют, как получить ту или иную информацию о процессе с помощью некоторых из этих утилит. Они включаются непосредственно в саму Windows, а также в Windows Support Tools, Windows Debugging Tools, ресурсы Windows и Platform SDK. Многие из этих утилит выводят перекрывающиеся подмножества информации о базовых процессах и потоках, иногда
4 дня назад

Написать сообщение участнику Vetal123?

Сделай добро! Расскажи друзьям в соц.сети!
Привлекательный комментарий приветствуется :)

Создай свою текстовую игру онлайн на Apero.ru