Путь рыцаря - новый текстовый квест от Zander. Играть онлайн.

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

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

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

Путь рыцаря - новый текстовый квест от Zander. Играть онлайн.

Текстовая игра 'Путь рыцаря' обновлена 4 года назад. Пройди квест онлайн сейчас! Запуск в один клик. Бесплатно с любого мобильника или в браузере ПК.

Текстовый квест Путь рыцаря
Id:
787
Название:
Путь рыцаря
Рейтинг:
125.90
Авторы:
Описание:
Вы прибыли лишь как наемник, а впереди вас ожидает путь к становлению рыцарем. Развивайте персонажа, одевайте его, открывайте новые возможности и готовьте себя к тому, чтоб повести за собою собственное войско.
Тэги:
Жанр:
Интерактивная литература
Создана:
4 года назад
Опубликована:
4 года назад
Обновлена:
4 года назад
Язык:
Русский
Исходный код:
(~138Кб) Доступен только авторам.
Дружище, ты собираешься запустить игру?

Супер! Только вот автор, который усердно старался, создавая эту игру, может даже не узнать, что его труды не были напрасными. А все потому, что ты хочешь запустить игру, будучи не авторизованным. Хорошим тоном было бы с твоей стороны представиться или присоединиться к сообществу, если еще не сделал этого. В этом случае, автор будет знать как часто запускаются его игры и насколько его творчество востребовано.
Спасибо за понимание!

Статистика игры "Путь рыцаря"

Общее время: 7890.3 мин.
Средняя время хода: 3.7 сек.
Среднее время игры: 41.1 мин.

Эту игру проходили Андрей Недосеко(58мин), Koroll(11мин), Froda, Рашид Садреев, Ssejio(4мин), ViktoriaLove777(14мин), Денис Ильин(53мин), егорктулху(7мин), tailwind(115мин), Каин Блад(36мин), а также еще 10 участников и 238 гостей.

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

#

От кого:

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

Отправлен:

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окнадиспетчеразадачсовсейочевидностьюпо 1 месяц назад
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окнадиспетчеразадачсовсейочевидностьюпо 1 месяц назад
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,чтобыотличатьегоотисходного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окнадиспетчеразадачсовсейочевидностьюпо 1 месяц назад
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,чтобыотличатьегоотисходного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окнадиспетчеразадачсовсейочевидностьюпо 1 месяц назад
5 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окнадиспетчеразадачсовсейочевидностьюпо 1 месяц назад
6 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окнадиспетчеразадачсовсейочевидностьюпо 1 месяц назад
7 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окнадиспетчеразадачсовсейочевидностьюпо 1 месяц назад
8 PheniX +6.21 Все ок токо как сдать этот дибильный (извиняюсь) квест что надо сделать, больше репутации?? Нет репутацию дают за квесты, а они глючат. Бесконечная петля... И вот ещё кто прошел (если есть такие) скажите что вы делали чтобы сдать этот квест? Плиз 4 месяца назад
9 АлексАлекс Заглючило, не могу сдать квест
4 месяца назад
10 The Petross +2.23 В целом неплохо. Но я не понял, события развиваются после письма Анне? И задание про письмо Анне не заходит... 6 месяцев назад

Уже прошел игру? Как впечатления?

Напиши свой комментарий, это ведь так просто! А авторам будет приятно услышать любые мнения или вопросы по игре.

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

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