ელექტრული კონტროლი Windows-ში. ელექტრული კონტროლი Windows-ში იძლევა საშუალებას წვდომას შუა მეხსიერებაზე; მძღოლს არ შეუძლია უშუალოდ ფიზიკური მეხსიერების მანიპულირება, მაგრამ მას შეუძლია ნებისმიერი ფიზიკური მეხსიერებისთვის ვირტუალური მისამართების ამოღება და მისი მანიპულირება

Microsoft კომპანია Windows 10 ოპერაციულ სისტემაში დიდ პატივს სცემს უსაფრთხოებას. სისტემის ერთ-ერთი მნიშვნელოვანი ელემენტია „Windows Security Manager“, მაგრამ ეს შეუძლებელია ყოველგვარი საფრთხის გარეშე. Zokrem, Ransomware ვირუსი მუდმივად იძენს პოპულარობას, განსაკუთრებით კი ზოგიერთი მავნე პროგრამის რეინკარნაცია Petya და. Microsoft-მა Windows 10-ში დანერგა ბირთვის იზოლაციისა და მეხსიერების მთლიანობის ფუნქციები, რომლებიც მიზნად ისახავს Ransomware ვირუსების წინააღმდეგ ბრძოლას. გაწმენდის შემდეგ სუნი ქრება.

ზმისტი:

რა არის ძირითადი იზოლაცია და მეხსიერების მთლიანობა?

ძირითადი იზოლაცია- ეს არის დამატებითი დაცვის პროცესი, რომელიც უზრუნველყოფილია ოპერაციული სისტემიდან და მოწყობილობიდან კომპიუტერული პროცესების შემოღობვით. ეს პროცესები შესაძლებელს ხდის ოპერაციული სისტემის გაშვებას, როდესაც თქვენს კომპიუტერში ვირუსი მოხვდება.

მეხსიერების მთლიანობა- ეს არის ძირითადი ფუნქციის მეორადი იზოლაცია, რომელიც მიზნად ისახავს უცნობი პოტენციურად სახიფათო პროგრამების მხრიდან წვდომის შეზღუდვას უსაფრთხოების მაღალი დონის მქონე პროცესებზე.

მნიშვნელოვანია: ძირითადი იზოლაციის ფუნქციის გამოყენება შესაძლებელია მხოლოდ იმდენად, რამდენადაც თქვენი კომპიუტერის აპარატურა საკმარისია. BIOS-ის რეგულირებისას, ვირტუალიზაციის ტექნოლოგია უნდა იყოს აქტიური, რათა Windows 10-ზე გაშვებულმა კომპიუტერმა შეძლოს სხვადასხვა აპლიკაციების გაშვება ვირტუალურ კონტეინერში, რაც მათ სისტემის ძირითად კომპონენტებზე წვდომის საშუალებას მისცემს.

როგორ ჩართოთ ბირთვის იზოლაცია და მეხსიერების მთლიანობა

Windows 10 ოპერაციული სისტემის პარამეტრები საშუალებას გაძლევთ მართოთ თქვენი კომპიუტერის უსაფრთხოების ფუნქციები მთელ მსოფლიოში. Windows 10-ის პარამეტრების საშუალებით შეგიძლიათ რაც შეიძლება მალე ჩართოთ ბირთვის იზოლაცია და მეხსიერების მთლიანობა:


იმის გამო, რომ ვარაუდობდნენ, რომ საწყობის კომპიუტერის აპარატურა არ უჭერს მხარს ვირტუალიზაციის შესაძლებლობებს, ეს ფუნქცია არ იმუშავებს. როდესაც სისტემა ჩართულია, ქვედა მარჯვენა კუთხეში აჩვენეთ შეტყობინება "შეუძლებელია მეხსიერების მთლიანობის უზრუნველყოფა. ეს შეიძლება იყოს შეუსაბამო." როგორც კი ეს შეტყობინება გამოჩნდება, რეკომენდირებულია გადახვიდეთ BIOS-ში და დარწმუნდით, რომ ჩართულია Secure Boot (ჩატვირთვის რეჟიმი) ფუნქცია.

როგორ ჩართოთ ბირთვის იზოლაცია და მეხსიერების მთლიანობა

ოპერაციული სისტემის ახალი ფუნქციები, რომლებიც სერიოზულად აისახება თქვენს მუშაობაზე, მალე თქვენს კომპიუტერთან დაკავშირებული პრობლემების გამოწვევის რისკის ქვეშ იქნება. ეს არ არის ძირითადი იზოლაციის ფუნქციის ბრალი. მომხმარებლები, რომლებმაც უკვე სცადეს ის, მიუთითებენ Microsoft-ის ფორუმებზე, რომ პრობლემები აქვთ თამაშისა და პროგრამის გაშვებისას. ამ პრობლემის გადაჭრის ერთადერთი გზა არის ბირთვის იზოლაციისა და მეხსიერების მთლიანობის ფუნქციების ჩართვა. შესაძლოა, მომავალ განახლებებში პროგრამული უზრუნველყოფის დისტრიბუტორები და Microsoft-ი გამოასწორებენ ამ სისულელეს.

Є 3 გზა ბირთვის იზოლაციისა და მეხსიერების მთლიანობის გასააქტიურებლად:


ენერგიის მენეჯერი აკვირდება ელექტრომომარაგების ინდიკატორებს მთელ სისტემაში. ისტორიულად, ენერგიის მენეჯმენტი მონიტორის დაკავშირებასა და დისკის დისკების შეფუთვას შეადგენდა. მაგრამ ეს პრობლემა სწრაფად ხდება უფრო რთული - ლეპტოპების და ბატარეების მზარდი ნარჩენების, ასევე დესკტოპის კომპიუტერებზე ენერგიის დაზოგვის შემცირებით (რომლებიც მუდმივ ჩართვას მოკლებულია) და ელექტროენერგიის ახალი სერვერული მეურნეობების ცხოვრების მაღალი ხარისხის გამო.

ელექტრომომარაგების კონტროლის ახალი მეთოდები მოიცავს კომპონენტების ენერგიის მოხმარების შეცვლას, როდესაც სისტემა არ არის ჩართული, რისთვისაც სხვა მოწყობილობები გადართულია სარეზერვო მდგომარეობაში ან მთლიანად ჩართული (ელექტრომომარაგების გადამრთველის დახმარებით). მრავალპროცესორული სისტემები მოიცავს მრავალ პროცესორს, თუ ეს არ არის საჭირო, და ასევე შეუძლიათ პროცესორების საათის სიხშირის შეცვლა (ენერგიის მოხმარების შესაცვლელად). თუ პროცესორი უმოქმედოა, მასში დაგროვილი ენერგიაც იცვლება, რაც მას არ სჭირდება რაიმეს გაწმენდისა და შეფერხების გარდა.

Windows მხარს უჭერს სპეციალურ რეჟიმს, სახელწოდებით ჰიბერნაცია, რომელიც აკოპირებს მთელ ფიზიკურ მეხსიერებას დისკზე, შემდეგ კი ამცირებს დაგროვილ ენერგიას მინიმუმამდე (at და ლეპტოპები შეიძლება გამოყენებულ იქნას ღრმა ძილის დროს, რომლის დროსაც ბატარეა მინიმალურად იტენება. სანამ მთელი მეხსიერება ჩაწერილია დისკზე, თქვენ შეგიძლიათ შეცვალოთ ლეპტოპის ბატარეა (სანამ ჰიბერნაციის მდგომარეობაში ხართ). როდესაც სისტემა განახლდება ღრმა ძილისგან გამოსვლის შემდეგ, ის განაახლებს მეხსიერების დაზოგვას (და განაახლებს მოწყობილობებს). ეს არის იმისათვის, რომ დააბრუნოს კომპიუტერი იმავე მდგომარეობაში, როგორც ძილის წინ (ყველა შენახული პროგრამისა და სერვისის ხელახალი რეგისტრაციისა და გაშვების საჭიროების გარეშე. Windows ცდილობს ამ პროცესის ოპტიმიზაციას, იგნორირებას უკეთებს შეუცვლელ გვერდებს (სარეზერვო ასლი დისკზე) და შეკუმშავს სხვა მეხსიერების ნაწილები არასაჭირო I/O ზედნადების შესამცირებლად. ღრმა ძილის ალგორითმი გადასცემს სისტემის გამტარუნარიანობის ავტომატურ დაბალანსებას I/O-ზე და პროცესორზე. I/O სისტემის გამტარუნარიანობაზე მოთხოვნის შესამცირებლად საჭიროა მეტი რესურსის მოხმარება, მაგრამ ამავდროულად მონაცემთა უფრო ეფექტური შეკუმშვა.შემავალი-გამომავალი სისტემის საკმარისი გამტარუნარიანობა საშუალებას გაძლევთ აღმოფხვრათ შეკუმშვა ჰიბერნაციის რეჟიმზე გადასვლისას. დარჩენილი თაობის მულტიპროცესორების ვიკორისტანით ღრმა ძილის მდგომარეობაში შესვლა და გამოსვლა შესაძლებელია ახალი რამ მოხდეს სულ რამდენიმე წამში, მხოლოდ იმიტომ, რომ მეხსიერება მუშაობს და სისტემის არსებობა დიდი სარგებელია.

ღრმა ძილის ალტერნატივა არის ლოდინის რეჟიმი, რომლის დროსაც ენერგიის მენეჯერი გადასცემს მთელ სისტემას რეგენერაციული ენერგიის დაბალ დონეზე (იგივე ენერგია იხარჯება, რამდენიც საჭიროა დინამიური მეხსიერების რეგენერაციისთვის). ვინაიდან მეხსიერების ფრაგმენტებს დისკზე კოპირება არ სჭირდება, ზოგიერთ სისტემაზე ამ ეტაპზე გადასვლა ხდება უფრო სწრაფად, ჰიბერნაციის გარეშე.

ღრმა ძილის ხელმისაწვდომობისა და სიფხიზლის უნარის მიუხედავად, ბევრ მუშაკს არ სურდა სამუშაოს დასრულების შემდეგ პერსონალური კომპიუტერის გამორთვა.

Hibernation გამოიყენება Windows-ში, რათა შეიქმნას ფსევდო-გაშვების გამორთვა სახელწოდებით HiberBoot, რომელსაც აქვს ძლიერი გავლენა გაშვებაზე. როდესაც მომხმარებელი ავალებს სისტემას გასვლას, HiberBoot აცილებს მომხმარებელს სისტემიდან და შემდეგ ათავსებს მათ ღრმა ძილს იმ მომენტში, სადაც მათ შეუძლიათ ისევ შევიდნენ სისტემაში ჩვეულებრივად. მოგვიანებით, როდესაც მომხმარებელი კვლავ ჩართავს სისტემას, HiberBoot განაახლებს სისტემის მუშაობას მომხმარებლის მასში შესვლის წერტილიდან. მომხმარებლისთვის ყველაფერი იგივეა, თუნდაც ის დახურული იყოს, რადგან სისტემის ინიციალიზაციის დროის უმეტესი ნაწილი გამოტოვებულია. როგორც ჩანს, ნებისმიერი სისტემა სათანადოდ უნდა შეიცვალოს პრობლემების გადასაჭრელად ან განახლებული ბირთვის დასაყენებლად. ვინაიდან სისტემა უარყოფს ბრძანებას გადატვირთვაზე და არა გამორთვაზე, აუცილებელია კომპიუტერიდან მონაცემების გადატანა და საწყისი შეფერხების შენახვა.

ნათელია, რომ ტელეფონებსა და პლანშეტ კომპიუტერებზე გამოთვლითი მოწყობილობები, ისევე როგორც ახალი თაობის ლეპტოპებზე, ამიერიდან მხოლოდ მცირე რაოდენობით ელექტროენერგიას მოითხოვენ. ამ რეჟიმის უზრუნველსაყოფად, მიმდინარე Windows ახორციელებს ელექტრული კონტროლის სპეციალურ ვერსიას, რომელსაც ეწოდება CS (დაკავშირებული ლოდინი). CS შესაძლებელია სისტემებზე, რომლებსაც აქვთ სპეციალურად აღჭურვილი კავშირები ლიმიტამდე, რაც საშუალებას აძლევს ტრაფიკს დაუკავშირდეს კავშირების მცირე კომპლექტს, მაღალი სიმძლავრის სისტემის გამოყენებით და ნაკლები ენერგიის გამოყენებით, ცენტრალური პროცესორის გამოყენების გარეშე. თუ CS სისტემა უკვე ჩართულია, შეგიძლიათ გამოხვიდეთ CS-დან ეკრანის ჩართვისთანავე. კავშირის რეჟიმში აღმოჩენა დიფერენცირებულია ძირითადი გამოვლენის რეჟიმისგან, ასე რომ, CS სისტემა ასევე გამოვა აღმოჩენის რეჟიმიდან, თუ ის აიღებს პაკეტს კავშირის მონიტორინგიდან. როგორც კი ბატარეა იწყებს დაცლას, CS სისტემა გადადის ღრმა ძილს, რათა თავიდან აიცილოს ბატარეის სრულად დაცლა და, შესაძლოა, მონაცემების დაკარგვა.

ბატარეის ხანგრძლივობა დამოკიდებულია მხოლოდ პროცესორის ხშირ უკმარისობაზე. ასევე მნიშვნელოვანია პროცესორის ადგილზე შენარჩუნება. CS სისტემის შეზღუდული ხელმისაწვდომობა საშუალებას აძლევს პროცესორებს გამორთოთ სანამ მონაცემები არ მოიძებნება, წინააღმდეგ შემთხვევაში პროცესორი შეიძლება ხელახლა ჩართოთ სხვა საშუალებებით. NT-ზე დაფუძნებული Windows მოწყობილობის დრაივერები, სისტემური სერვისები და თავად დანამატები ხშირად იწყებენ რაიმე განსაკუთრებული მიზეზის გარეშე, მხოლოდ დახმარების სისტემის შესამოწმებლად. ამ ტიპის ტესტირების აქტივობა ეფუძნება სისტემაში ან დანართში კოდის პერიოდული გაშვების ტაიმერების პარამეტრებს. ტაიმერის სიგნალებზე დაყრდნობით, ამან შეიძლება გამოიწვიოს დაბნეულობა პროცესორის ჩართვისას. დღეს Windows-დან ასეთი ტაიმერების გამოსარიცხად, თქვენ უნდა მიუთითოთ kill პარამეტრი, რომელიც საშუალებას აძლევს ოპერაციულ სისტემას დააკავშიროს ტაიმერის მოვლენები და შეამციროს რიგი სხვა მოვლენები პროცესორის ჩართვისთვის. Windows-ში სისტემა ასევე შექმნილია, ნებისმიერი დამატებით, რომელიც არ არის აქტიურ რედაქტირების ეტაპზე, შეგიძლიათ შეინახოთ კოდი ფონზე. ოპერაციები, როგორიცაა განახლებების შემოწმება ან ერთად განახლება, ვერ დასრულდება, თუ არ დაიწყება ტაიმერის ვადის გასვლის შემდეგ. დამატება შეიძლება იკვებებოდეს ოპერაციულ სისტემაზე მსგავსი ფონური აქტივობის საპასუხოდ. მაგალითად, განახლებების შემოწმება საჭიროა მხოლოდ დღეში ერთხელ ან როცა მოწყობილობა იტენება ბატარეას. სისტემური შუამავლების კომპლექტი უზრუნველყოფს სხვადასხვა სახის გონებას, რომელიც შეიძლება გამოყენებულ იქნას სხვადასხვა ფონურ აქტივობებთან ურთიერთობისთვის. ვინაიდან ფონური ამოცანები მოითხოვს დაბალფასიან ქსელზე წვდომას ან ითვლება ახალი მნიშვნელობის მქონედ მომხმარებლისთვის, შუამავლები არ დაიწყებენ სამუშაოს დატოვებას მანამ, სანამ საჭირო გონება არ დაიკარგება.

დღეს უამრავი დანამატი დანერგილია როგორც ლოკალური კოდით, ისე სერვისებით, რომლებიც ბნელშია. Windows უზრუნველყოფს Windows შეტყობინებების სერვისს (WNS), რომელიც საშუალებას აძლევს მესამე მხარის სერვისებს, შეტყობინებები გადაიყვანონ Windows აპლიკაციებში CS-ში, ისე, რომ არ მოითხოვონ CS-მ კონკრეტულად მოუსმინოს პაკეტებს მესამე მხარის სერვერებიდან. WNS შეტყობინებებს შეუძლია შეგატყობინოთ დროის კრიტიკული მოთხოვნების შესახებ, როგორიცაა ტექსტური შეტყობინებების ან VoIP-ის ზარების საჭიროება. თუ WNS პაკეტი მიიღება, პროცესორი უნდა ჩართოს მისი დამუშავებისთვის, ხოლო თუ CS გამოიყენება, შესაძლოა შესაძლებელი იყოს სხვადასხვა კავშირის ტრაფიკის გამოყოფა, რაც ნიშნავს, რომ პროცესორს არ მოუწევს ჩართვა პასუხი იმავე პაკეტზე.

ჩემს მთავარ ლეპტოპს ხშირად აქვს სხვადასხვა ელექტრული პრობლემები, რაც შეიძლება აიხსნას ინსაიდერის ანგარიშებში მუშაობით. თუმცა, სტაბილურ ვერსიაში 1803, შევამჩნიე, რომ ჩემმა სისტემამ შეწყვიტა დაძინება. ამ შემთხვევაში, მონიტორი აციმციმდა ერთი საათის შემდეგ, რამაც გამოიწვია უმოქმედობა, როდესაც სისტემა სწორად იყო კონფიგურირებული.

ძილში გადასასვლელად დავნიშნე მოკლე პერიოდი, 1-2 კვირა და დავიწყე დიაგნოზამდე.

სიცოცხლის ქვესისტემაში შეყვანის შემოწმება დანამატებიდან და დრაივერებიდან

ჯერ უნდა გაგვიკვირდეს powercfg, რას ატარებს OS ძილის მდგომარეობაში გადასვლისას. პროცესებსა და დრაივერებზე, რომლებიც მუშაობს ელექტრო ქვესისტემამდე, შესაძლებელია წვდომა ბრძანების სტრიქონში, როგორც ადმინისტრატორი:

Powercfg-მოთხოვნები

თქვენ ნათლად ხედავთ, რომ ის დაწერილია SYSTEM-ზე DRIVER-დან - ამ ვარიანტში Realtek vikoristovuyu აუდიო ნაკადი.

სიაში შეიძლება ასევე იყოს WebRTC წარმოდგენილი Chrome-ში და სისტემის გადატვირთვისთანავე შეგიძლიათ მოითხოვოთ ძიების ოპტიმიზაცია, ძიების ინდექსი და სხვა ყველაფერი. თქვენ შეგიძლიათ დაამატოთ პროცესი ან დრაივერი გამორთვის სიაში და ეს ხელს არ შეუშლის დაძინებას.

Powercfg - requestsoverride DRIVER "Realtek High Definition Audio (HDAUDIO\FUNC_01&VEN_10EC&DEV_0269&SUBSYS_17AA2204&REV_1002\4&d00657&0&0001)" SYSTEM

ბრძანება ნათქვამია: „იგნორირება მოთხოვნის DRIVER-ისგან [დრაივერის სახელის გარეთ] SYSTEM-ზე“.

ხარვეზების სია ინახება რეესტრის განყოფილებაში

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Power\PowerRequestOverride

და ნაჩვენებია ბრძანებით

Powercfg -მოთხოვნის გადაფარვა

მე ხელახლა ჩავრთე, რომ დარწმუნებულიყო, მაგრამ სისტემა თითქოს გაყინული იყო. გამორთვებისა და მოთხოვნების სიის შემოწმების შემდეგ აღმოვაჩინე, რომ Realtek-ის დრაივერი აგრძელებდა აუდიო ნაკადის არჩევას და სურდა ცვლილებების შეტანა გამორთვაში.

ღვინოების გარშემო ტამბურით რამდენიმე პენი ვიცეკვე, მაგრამ უშედეგოდ. შვედისთვის გუგლინგმა დაადასტურა, რომ ასეთ სიტუაციებში სუნი არ არის. ეს დამახასიათებელია მემკვიდრეობითი მოთხოვნებისთვის, მაგრამ აქ იყო კიდევ ერთი შედეგი და მე არ ვარ პირველი, ვინც ამაზე ვსაუბრობ.

ჩემს ჩანთაში დავინახე Realtek სიაში. თქვენ შეგიძლიათ წაშალოთ ჩანაწერები რეესტრის რედაქტორში ან კონსოლში. mayhe ბრძანება იგივეა, რაც დამატებისას, ის უბრალოდ არ მიუთითებს სად მიდის, ასე რომ, ამ შემთხვევაში ბრძანების ბოლოს არ არის SYSTEM:

Powercfg -მოთხოვნის უგულებელყოფა DRIVER "Realtek High Definition Audio (HDAUDIO\FUNC_01&VEN_10EC&DEV_0269&SUBSYS_17AA2204&REV_1002\4&d00657&0&0001)"

ჩვენ განსხვავებულ გზას გავალთ

პროცესის გაანგარიშება, რომელიც ხელს უწყობს ხმის ქვესისტემას

როგორც ჩანს, შავ მარჯვენა ნაწილებს ამუშავებს Realtek-ის მძღოლი. ცხადია, ის გააქტიურდება სისტემის დაწყებისას, ამიტომ ფაილის სახელი არ იქნება ადვილად ასოცირებული Autoruns-ის დახმარებით.

სამი ჩანაწერი კეთდება ორ ფაილში, რომელთაგან ერთი არის მართვის პანელი, სახელის მიხედვით. ინტერესის ობიექტი გახდა ravbg64.exe.

ბირთვის რეჟიმის დრაივერები: ნაწილი 1: ძირითადი ცნებები - არქივები WASM.RU

შეხედეთ არქიტექტურას

Windows 2000-ის შიდა განათება დაყოფილია ორ ნაწილად, მკაფიოდ განსაზღვრული საზღვრებით, როგორც მისამართების სივრცის თვალსაზრისით, ასევე იმ კოდის უფლებებისა და ვალდებულებების თვალსაზრისით, რომელშიც მისამართების სივრცე შეესაბამება.

მისამართების სივრცის ქვემოთ ყველაფერი სრულიად მარტივია. 32-ბიტიან არქიტექტურაში არსებული ყველა მონაცემი, გიგაბაიტი, დაყოფილია ორ თანაბარ ნაწილად (4GT RAM Tuning და Physical Address Extension, მე გამოვტოვებ როგორც ეგზოტიკურ). ქვედა ნახევარი მიეკუთვნება კორისტუვაცის რეჟიმის პროცესებს, ზედა ნახევარი ეკუთვნის ბირთვს.

უფლებებისა და მოვალეობების გროვასთან ერთად, წვრილმანები უფრო რთულია.

კორისტუვაჩისთვის საჭიროა შემდეგი პროცედურები:

  • სისტემის მხარდაჭერის პროცესები - მაგალითად, Winlogon შესვლის პროცესი (დანერგილი \%SystemRoot%\System32\Winlogon.exe);
  • სერვისის პროცესები - მაგალითად, სპულერი;
  • შექმნილია მომხმარებლის აპლიკაციებისთვის - არსებობს ხუთი ტიპი: Win32, Windows 3.1, MS-DOS, POSIX და OS / 2;
  • გარემოს ქვესისტემები - მხარდაჭერილია სამი გარემოს ქვესისტემა: Win32 (დანერგილი \%SystemRoot%\System32\Csrss.exe-ში), POSIX (დანერგილი \%SystemRoot%\System32\Psxss.exe), OS/2 (დანერგილი \%SystemRoot-ში). %\System32\os2ss.exe).

ბირთვი შედგება შემდეგი კომპონენტებისგან:

    ვიკონავჩას სისტემა (აღმასრულებელი) - მეხსიერების მართვა, პროცესები და ძაფები და ა.შ.;
  • ბირთვი - ძაფების დაგეგმვა, შეფერხების და გამორთვის გაგზავნა და ა.შ. (განხორციელებული \%SystemRoot%\System32\Ntoskrnl.exe-ში);
  • მოწყობილობის დრაივერები - ტექნიკის მოწყობილობების დრაივერები, edge დრაივერები, ფაილური სისტემის დრაივერები;
  • Hardware Abstraction Layer (HAL) - იზოლირებს ტექნიკის არქიტექტურებს შორის განსხვავებების სამ ძირითად კომპონენტს (განხორციელებები \%SystemRoot%\System32\Hal.dll-ში);
  • Windowing And Graphics System - მომხმარებლის გრაფიკული ინტერფეისის (GUI) ფუნქციები (განხორციელებული \% SystemRoot% \ System32 \ Win32k.sys).

Პატარა 1-1. Windows 2000 არქიტექტურა გამარტივებულია

კორისტუვაჩის რეჟიმი და ბირთვის რეჟიმი

მიუხედავად იმისა, რომ Intel x86 ოჯახის პროცესორები მხარს უჭერენ რამდენიმე დონის პრივილეგიას (ე.წ. დაცვის რგოლები), Windows-ში მხოლოდ ორია შერჩეული: 0 ბირთვის რეჟიმში და 3 ძირითადი რეჟიმისთვის. ეს გამოწვეულია სხვა პროცესორების (ალფა, mips) მხარდაჭერით, რომლებიც ახორციელებენ მხოლოდ ორი დონის პრივილეგიას. Windows NT-ის წინა გამოშვებები მხარს უჭერდა ამ არქიტექტურას, მაგრამ Windows 2000-მა დაკარგა x86 მხარდაჭერა.

კორისტუვაჩის რეჟიმის კომპონენტებს აქვთ საკუთარი დაცული მისამართების სივრცეები, ამ პროცესების ძაფები გადადის არასასურველ პროცესორის რეჟიმში (ე.წ. koristuvach-ის დანიშნულება), არ შეიძლება იყოს დაკავშირებული პროცესორის პრივილეგირებულ ბრძანებებთან, იკარგება ურთიერთკავშირები და შუამავლების წვდომა სისტემის მონაცემებზე. და სისტემის მისამართების სივრცეში, არ გადახვიდეთ პირდაპირ საკუთრებაში. მართალია, მათი რობოტების, ამ პროცესების ძაფების და სხვა სისტემური სერვისების პროცესში გადადიან ბირთვის რეჟიმში, ამ შემთხვევაში ისინი კარგავენ კონტროლს თავიანთ მუშაობაზე, სანამ არ დაუბრუნდებიან ძირითად რეჟიმში.

რეჟიმზე მინიჭებული პროცესები განიხილება პოტენციურად სახიფათო სისტემის სტაბილურობის თვალსაზრისით. მათი უფლებები მოლაპარაკებას ექვემდებარება. და ვინც შეეცდება საზღვრების გადალახვას, სასტიკად შეხვდება მათ.

ბირთვის კომპონენტები იზიარებენ ერთი მისამართის სივრცეს, შედგენილია პროცესორის სასურველ რეჟიმში (ე.წ. ბირთვის რეჟიმში), შეუძლიათ მიიღონ ყველა, მათ შორის პრივილეგირებული, პროცესორის ბრძანებები, შეიძლება არ ჰქონდეთ ჩარევა და პირდაპირი წვდომა სისტემის მონაცემებსა და კოდზე, შეიძლება იყოს პირდაპირი ან მეშვეობით HAL, წვდომა მფლობელობამდე.

როგორც ჩანს, ბირთვის კოდი (მათ შორის თავად სისტემა) სრულიად საიმედოა. ამრიგად, სისტემის მისამართების სივრცეში ჩართვით, დრაივერი ხდება სისტემის ნაწილი და არ ექვემდებარება რაიმე ჩარევას.

ეს აღნიშვნა არის ოპერაციულ სისტემაში წყლის დამატების მიზნით. თუ აირჩევთ რამდენიმე სერიოზული დამატებების დაწერას, რომლებიც საჭიროებენ წვდომას სისტემის შიდა ფუნქციებზე ან მონაცემთა სტრუქტურებზე, მაშინ შეგექმნებათ ბრმა გაცვლა, რომლის მიღწევა შესაძლებელია მხოლოდ თქვენი კოდის სისტემის მისამართების სივრცეში განთავსებით. დოკუმენტაციის მიხედვით, ამის გაკეთების მხოლოდ ერთი გზა არსებობს - მოწყობილობის დრაივერის დაყენება. ეს მეთოდი აშკარად მარტივი, საიმედო და, რაც მთავარია, უსაფრთხოა თავად ოპერაციული სისტემის მხრიდან.

Windows 2000 დრაივერები

Windows 2000 მხარს უჭერს მოწყობილობის დრაივერის სხვადასხვა ტიპს.

არსებობს ორი ძირითადი პრინციპი, რომელიც ხელმძღვანელობს მათ წარმომადგენლებს:

  • დრაივერები koristuvach რეჟიმისთვის (მომხმარებლის რეჟიმის დრაივერები):
    • ვირტუალური მოწყობილობის დრაივერები (VDD) - გამოიყენება MS-DOS პროგრამების მხარდასაჭერად (არ აურიოთ VxD დრაივერები Windows 95/98 - ყველა განსხვავებული სიტყვა, თუმცა მათ ერთი და იგივე სახელი აქვთ);
    • პრინტერის დრაივერები.
  • ბირთვის რეჟიმის დრაივერები:
    • ფაილური სისტემის დრაივერები (File System Drivers) - შეყვანის და გამოსვლის განხორციელება ლოკალურ და პერიფერიულ დისკებზე;
    • Legacy Drivers - დაწერილი Windows NT-ის ადრინდელი ვერსიებისთვის;
    • ვიდეო ადაპტერის დრაივერები (ვიდეო დრაივერები) - გრაფიკული ოპერაციების განხორციელება;
    • სტრიმინგ მოწყობილობების დრაივერები (Streaming Drivers) - ვიდეო და ხმის შეყვანა და გამომავალი დანერგვა;
    • WDM დრაივერები (Windows Driver Model, WDM) - მხარს უჭერს Plug and Play ტექნოლოგიას და ელექტრო კონტროლს. მისი აღსანიშნავი მახასიათებელია მისი თანმიმდევრულობა პროგრამის კოდთან Windows 98, Windows ME და Windows 2000-ს შორის.

სხვადასხვა ქვეყანაში შეგიძლიათ ამოიცნოთ რამდენიმე წუთის კლასიფიკაცია ინდუცირებული ზონიდან, მაგრამ ეს არ არის მნიშვნელოვანი. მნიშვნელოვანია, რომ დრაივერები, რომლებსაც ჩვენ დავწერთ, არ მოხვდეს ამ კლასიფიკაციის არცერთ პუნქტში. არ არსებობს ფაილური სისტემის დრაივერები, არ არის გამორთული დრაივერები, არც ვიდეო ადაპტერი ან ხმის ბარათის დრაივერი, არც WDM დრაივერები, რომლებიც არ უჭერენ მხარს Plag "n" Play-ს და ელექტრო კონტროლს. ნუ მართავთ კორისტუვალნის რეჟიმს (არ ინერვიულოთ). ფაქტობრივად, ეს უბრალოდ წყევლაა, რადგან თავად სისტემა საშუალებას გაძლევთ მარტივად და მარტივად დაამატოთ კოდი საკუთარ თავს ნებისმიერი მოწყობილობისთვის და მასთან მუშაობა მარტივია! თითქოს ღამით კარზე სრულიად უცნობმა ადამიანმა დააკაკუნა და სიტყვის თქმის გარეშეც ტყუილად შეუშვებდი და უბრალოდ ძირს დააგდებდი! თუმცა, ეს არ არის უსაფრთხოების სისტემის ხარვეზი ან ხარვეზი. სისტემა უბრალოდ მუშაობს ისე, როგორც მუშაობს. წინააღმდეგ შემთხვევაში, ჩვენ არ შეგვიძლია, რადგან კავშირებთან ურთიერთქმედებისას სისტემა ვერ ახერხებს საკუთარ თავზე წვდომის მინიჭებას. და ეს ასე რომ არ იყოს, მაშინ ის მთლიანად დაიხურება, რაც ნიშნავს, რომ სისტემა არავის დასჭირდება.

როგორც სახელი გვთავაზობს, მოწყობილობის დრაივერი არის პროგრამა, რომელიც შექმნილია კონკრეტული მოწყობილობის გასაკონტროლებლად და მოწყობილობა სულაც არ არის ფიზიკური. ეს შეიძლება იყოს ლოგიკური ან, როგორც ჩვენს შემთხვევაში, ვირტუალური.

მისი სტრუქტურის მიღმა, დრაივერი არ იქნება მიმაგრებული PE ფორმატის ფაილის გარდა (Portable Executable, PE). იგივეა რაც ორიგინალი exe და dll. მხოლოდ ადამიანები დაინტერესდებიან და სხვა წესებს იცავენ. დრაივერები შეიძლება განიხილებოდეს როგორც DLL-ები ბირთვის რეჟიმში, რომლებიც განკუთვნილია ბირთვის რეჟიმში მინიჭებული არა დამოუკიდებელი რეჟიმის კონტროლისთვის. მთავარი განსხვავება აქ (აუცილებლად არ არის პრივილეგიების დონე) არის ის, რომ ჩვენ არ შეგვიძლია უშუალოდ წვდომა დრაივერზე, არც რაიმე კოდზე, არც რაიმე მონაცემზე, მაგრამ დაგვჭირდება სპეციალური მექანიზმის გამოყენება I/O მენეჯერის მიერ (შეყვანის / გამომავალი მენეჯერი) . შეყვანის-გამომავალი მენეჯერი უზრუნველყოფს შუალედს დრაივერების ფუნქციონირებისთვის და ასევე უზრუნველყოფს მექანიზმებს მათი შეძენის, მანიპულირებისა და მართვისთვის.

ბირთვის რეჟიმში დრაივერების შემუშავების დაწყებით, თავს სრულ დამწყებად გრძნობთ, რადგან ვიკი API-ის ყველა მოწინავე ცოდნა აქ არ დაგვეხმარება - ბირთვი უზრუნველყოფს სრულიად განსხვავებულ ფუნქციებს. ასევე შეიძლება დასრულდეს ცუდად დოკუმენტირებული ფუნქციები და მონაცემთა სტრუქტურები.

ერთი და რამდენიმე მძღოლი

ფიზიკური მოწყობილობების დრაივერების უმეტესობა ფენიანი დრაივერებია. I/O დამუშავება გაზიარებულია რამდენიმე დრაივერს შორის. კოჟენი თავის წილს იღებს სამუშაოდან. მაგალითად, ფაილის წაკითხვის მოთხოვნა ეგზავნება ფაილური სისტემის დრაივერს, რომელიც ოპერაციის დასრულების შემდეგ (მაგალითად, მოთხოვნის რამდენიმე ნაწილად დაყოფა), გადასცემს "ქვედა" დისკის დრაივერს, ხოლო ეს უკანასკნელი, თავის მხრივ თხოვნას უგზავნის ავტობუსის მძღოლს. გარდა ამისა, ამ დრაივერებს შორის შეგიძლიათ დაამატოთ ნებისმიერი რაოდენობის ფილტრის დრაივერი (მაგალითად, მონაცემთა დაშიფვრა). კონტროლერი ამუშავებს ქვედა დონის დრაივერს და მის შედეგებს გადასცემს უფრო მაღალი დონის დრაივერს. ალე, საბედნიეროდ, ჩვენთვის ყველაფერი გაცილებით მარტივი იქნება. ჩვენი მძღოლები ახლა იქნებიან მონოლითური მძღოლები, რაც მნიშვნელოვნად გაამარტივებს მათი წერისა და განვითარების მთელ პროცესს.

თემის კონტექსტი

ფრაგმენტები, უმეტეს შემთხვევაში, გვაქვს მხოლოდ ერთი პროცესორი და არის უამრავი დამატება, რომელიც უნდა დაემატოს, ბუნებრივია, რომ ერთსაათიანი ამოღების ილუზიის შესაქმნელად, თანმიმდევრულად უნდა დააკავშიროთ ყველა დანამატი. -ის პროცესორზე.ცესორა და კიდევ უფრო შვიდკო. ამ პროცედურას ეწოდება ძაფების კონტექსტის გადართვა. თუ სისტემა ერთსა და იმავე პროცესს მიეკუთვნება ძაფების კონტექსტს, აუცილებელია შეინახოს პროცესორის რეგისტრის მნიშვნელობები ძაფის დაკავშირებამდე და უზრუნველყოს, რომ პროცესორის რეგისტრის მნიშვნელობები შენახული იყოს ძაფის დაკავშირებამდე. ვაახლებ მონაცემთა სტრუქტურას. თუ თემა დაკავშირებულია სხვა პროცესთან, მაშინ აუცილებელია პროცესორის CR3 რეესტრში ინდიკატორის დაყენება პროცესის გვერდის დირექტორიაში. ვინაიდან კომპიუტერზე მინიჭებული კანის პროცესი ენიჭება მისამართების სივრცის დახურვას, მაშინ სხვადასხვა პროცესს აქვს მისამართების სივრცის განსხვავებული პროგნოზები და, შესაბამისად, გვერდების სხვადასხვა დირექტორიები და გვერდების ცხრილების ნაკრები, რომელთათვისაც პროცესორი თარგმნის ვირტუალურ მისამართებს ფიზიკაში. ამ ყველაფერს პირდაპირი კავშირი არ აქვს დრაივერის პროგრამირებასთან. კარგად, მე გეტყვით ღერძის შესახებ და როგორ არის დაკავშირებული. ვინაიდან კონტექსტის შერევის ოპერაცია არ არის გავრცელებული, მაშინ მძღოლები, შესანიშნავი პროდუქტიულობის დაკარგვის გამო, როგორც წესი, არ ქმნიან თავიანთ ნაკადებს. თუმცა, დრაივერის კოდი მაინც უნდა წაიშალოს. ამიტომ, კონტექსტების შერევაზე საათის დაზოგვის მიზნით, დრაივერები შედგენილია ბირთვის რეჟიმში სამი კონტექსტში ერთ-ერთში:

  • koristuvatskogo ნაკადის კონტექსტში, initsiyuv გამოყენებული იქნება შეყვანა-გამომავალზე;
  • სისტემური ძაფების კონტექსტში ბირთვის რეჟიმში (ძაფები მიეკუთვნება სისტემის პროცესს);
  • შეფერხების შედეგად (და ეს ნიშნავს, არა რაიმე პროცესის კონტექსტში, არამედ ნაკადს, რომელსაც ჩვენ დავაკონკრეტებთ შეწყვეტის დროს).

მე არ მესმის, როგორ არის შესაძლებელი რაიმეს დაწერა „არა რაიმე პროცესის ან ნაკადის კონტექსტში“, მაგრამ შევხედოთ იმ ადამიანების ავტორიტეტს, ვინც ეს დაწერა (დ. სოლომონი და მ. რუსინოვიჩი), ასევე მათ, ვინც ჩვენ. არ სჭირდება, რადგან. ჩვენ არ გვექნება საქმე არავითარ პროგრამულ უზრუნველყოფასთან, მით უმეტეს, ტექნიკის შეფერხებებთან; შეგიძლიათ დაუყოვნებლივ დაივიწყოთ მესამე ტიპი. პირველი ორი ვარიანტი დაიკარგება. თუ შეყვანა-გამომავალი ინიცირებულია, მაშინ თემის კონტექსტში ეს შეყვანა ინიცირებულია, რაც ნიშნავს, რომ ჩვენ შეგვიძლია დაუყოვნებლივ გადავიდეთ პროცესის მისამართების სივრცეში, რომელსაც ეს თემა ექვემდებარება. თუ ჩვენ ვართ სისტემური ნაკადის კონტექსტში, მაშინ ვერც ერთ პროცესზე ვერ გადავალთ საშუალო გზის გარეშე, მაგრამ ყოველთვის შეგვიძლია სისტემურ ნაკადზე გადასვლა. თუ თქვენ გჭირდებათ დრაივერისგან გაინტერესებთ, რომ ამა თუ იმ მისამართის მიღმა არის გარკვეული პროცესი, მაშინ თქვენ ან თავად თარგმნით კონტექსტს, ან თარგმნით მისამართებს გვერდითი მაგიდების უკან.

შეწყვიტე სასმელები

შეფერხება ნებისმიერი ოპერაციული სისტემის უცნობი ნაწილია. დამუშავება იღებს დამუშავებას, შემდეგ ენიჭება ნაკადის კოდი და დამუშავება გადადის გადამამუშავებელ პროცესორზე. არის როგორც აპარატურის, ასევე პროგრამული უზრუნველყოფის შეფერხებები. შეფერხებები ემსახურება მათი პრიორიტეტის მიხედვით. Windows 2000 იყენებს შეფერხების პრიორიტეტულ სქემას, რომელსაც ეწოდება შეფერხების მოთხოვნის დონეები (IRQL). სულ არის 32 დონე, 0-დან (პასიური), რომელსაც აქვს ყველაზე დაბალი პრიორიტეტი, 31-მდე (მაღალი), რომელსაც აქვს უმაღლესი პრიორიტეტი. გარდა ამისა, მონაცვლეობა IRQL = 0 (პასიური) IRQL = 2 (DPC \ dispatch) არის პროგრამული უზრუნველყოფა, ხოლო მონაცვლეობა IRQL = 3 (მოწყობილობა 1) IRQL = 31 (მაღალი) არის აპარატურა. არ აურიოთ პრიორიტეტების თანაბარი ნაკადის პრიორიტეტები - სრულიად განსხვავებული გამოსვლები. შეფერხება დონე IRQL = 0, მკაცრად აშკარაა, არ არის შეფერხება, რადგან თქვენ არ შეგიძლიათ შეწყვიტოთ ნებისმიერი კოდის მუშაობა (თუნდაც ეს კოდი გადაკეთდეს შეფერხების კიდევ უფრო დაბალ დონეზე და არ არსებობს ასეთი დონე). ამ IRQL-ზე განისაზღვრება კორისტუვალნიცკის რეჟიმის ნაკადები. და ჩვენი დრაივერების კოდი ასევე იქნება დაკავშირებული ამ IRQL-თან. ეს არანაირად არ ნიშნავს, რომ ნებისმიერი მძღოლის კოდი ყოველთვის ჩაითვლება "პასიურად". ჩვენ უბრალოდ არ შევიწუხებთ რაიმე პროგრამული ან აპარატურის შეფერხებით. და სულ მცირე ორი ძალიან მნიშვნელოვანი ნიშანი გამოდის.

პირველი: ჩვენი მძღოლების მუშაობა ნებისმიერ დროს შეიძლება შეწყდეს, რათა შეფერხება უფრო მაღალი პრიორიტეტით დამუშავდეს (მაგალითად, ტაიმერის სახით, თუ გრაფიკი მნიშვნელოვანია, რათა ჩვენი ნაკადი გაგრძელდეს დიდი ხნის განმავლობაში. და დროა გადაწყვიტო). ამიტომ, ამ თვალსაზრისით, ჩვენი დრაივერების კოდი წყდება და შეჩერებულია (პროცესორი გადაეცემა სხვა ძაფს), ისევე, როგორც ნებისმიერი სხვა თემის კოდი. ძირითადი ფუნქციები საშუალებას გაძლევთ განსაზღვროთ გადინების მიმდინარე დონე, ასევე გაზარდოთ ან შეამციროთ იგი.

კიდევ ერთი მნიშვნელოვანი პუნქტი: პასიურ დონეზე შეგიძლიათ დარეკოთ ბირთვის ნებისმიერი ფუნქცია (DDK-ში კანის ფუნქციის აღწერილობაში ნათლად არის მითითებული, რომელ დონეზე შეგიძლიათ დარეკვა), ასევე გადადით მეხსიერების მხარეებზე და ჩვენ ჩადეთ იგი swap ფაილში. კორუფციის უფრო მაღალ დონეზე (DPC/dispath და უფრო მაღალი), ფიზიკური მეხსიერების ყოველი დღის წაშლის მცდელობა გამოიწვევს სისტემის ავარიას, ასე რომ მეხსიერების მენეჯერი ვერ დაამუშავებს მეხსიერების წაშლას.

"სიკვდილის შავი ეკრანი"

ვფიქრობ, მსურს მხოლოდ ერთხელ დავხატო ეს მახინჯი სურათი, სახელწოდებით "სიკვდილის ლურჯი ეკრანი" (BSOD). რა თქმა უნდა, არ არის საჭირო იმის ახსნა, თუ რა არის ეს და რატომ არის ამის ბრალი. აქ მნიშვნელოვანია, რომ როდესაც დაიწყებთ დრაივერების შემუშავებას ბირთვის რეჟიმში, მოემზადეთ იმისთვის, რომ BSOD საკმაოდ ხშირად გამოჩნდება თქვენი მონიტორის ეკრანზე.

მესამე რგოლისთვის ყველაფერი მარტივი იყო: მიახლოებითი კოდის აკრეფით, საჭიროებისამებრ int3-ის მოთავსებით, გამართვის კომპიუტერში i... ახლა შეგიძლიათ გაიგოთ, რაზეა საუბარი. თუ ეს ასე არ არის - დასრულების შემდეგ, შესწორებების გასწორება, ხელახალი კომპილაცია... და ასე შემდეგ, სანამ კოდი მოითხოვება საჭიროებისამებრ. დრაივერების დაპროგრამებისას შეგიძლიათ დაივიწყოთ ეს ტექნოლოგია. აი, "სუფრე" ერთხელ მოწყალება. ერთი არასწორი ნაბიჯი... და შეგიძლია სავარძელს დაეყრდნო და ცოტა დაისვენო.

BSOD-ის გამოსასწორებლად, ჯერ ერთი ძალიან მარტივი წესი უნდა დაიცვან: „ერთხელ შეამოწმე, ერთხელ გაუშვი“... ამ გაგებით „ერთხელ შეამოწმე, ერთხელ გაუშვი“. ძალიან მარტივია იმის თქმა, რომ ეს ბევრად უფრო მნიშვნელოვანია, ვიდრე ფულის გამომუშავება. მაგრამ, როგორც წესი, იმ დრაივერების სტრუქტურა, რომელსაც თქვენ დაწერთ (ამ სტატიების წაკითხვის შემდეგ) საკმაოდ მარტივია, თქვენ შეგიძლიათ უპრობლემოდ გააკეთოთ ის, სანამ BSOD გამოჩნდება. ვინაიდან აშკარად თვალწინ დგახართ და ვერ ხვდებით მიზეზს, სიტუაციის გარკვევის საუკეთესო გზა ავარიის ნაგავსაყრელის ანალიზია. მისი გენერირებისა და ანალიზის შესახებ შეგიძლიათ წაიკითხოთ მარკ რუსინოვიჩის სტატიაში „ავარიული მეხსიერების ნაგავსაყრელების ანალიზი“ http://www.osp.ru/win2000/2001/03/025.htm. მარჯვნივ, ეს (ანალიზი) სულაც არ არის ადვილი, მაგრამ მაინც მგონია, რომ იქამდე ვერ მივა.

თეორეტიკოსი არ არის ცუდი, ასე რომ თქვენ შეგიძლიათ ნახოთ ყველაფერი, რაც ითქვა, როგორც მხოლოდ ძირითადი ფაქტები ამ პრინციპების შესახებ, რომელთა გაგება აბსოლუტურად აუცილებელია. შეუძლებელია დრაივერების ინსტალაციის დაწყება ბირთვის რეჟიმში, ძაფების კონტექსტის მკაფიო გაგების გარეშე, ძაფების შეწყვეტისა და პრიორიტეტის, ბირთვის / ბირთვის რეჟიმის და ა.შ. და ა.შ. თუ გრძნობთ, რომ არ ხართ კმაყოფილი რაიმე კვებით - ლიტერატურის სია ქვემოთ მოცემულია.

ახლა ჩვენ ვიხილავთ კიდევ რამდენიმე პრაქტიკულ გამოსვლებს (ისინი ძალიან პრაქტიკული გახდება მომდევნო სტატიებში) და რაც გვჭირდება არის მთელი ამ თეორიის პრაქტიკაში გადაქცევა.

დრაივერის განვითარების ნაკრები

უპირველეს ყოვლისა, Device Driver Development Kit (Windows 2000 Driver Development Kit, 2KDDK), რომლის თავისუფლად ჩამოტვირთვა შესაძლებელია Microsoft-ის ვებსაიტიდან (ნებისმიერ შემთხვევაში, მე გადმოვწერ სრულიად უფასოდ: http://www.microsoft.com /ddk/). ეს პაკეტი მოიცავს დოკუმენტაციას, რომელიც წარმოადგენს უამრავ ინფორმაციას დრაივერების მიერ გამოყენებული მოწყობილობების შიდა მონაცემთა სტრუქტურებისა და შიდა სისტემის ფუნქციების შესახებ.

DDK-ში დოკუმენტაციის გარდა, არის ბიბლიოთეკის ფაილების ნაკრები (* .lib), რომელიც უკიდურესად საჭირო იქნება დაკავშირებისას. DDK მოიცავს ფაილების ორ კომპლექტს: Windows-ის ნარჩენი ვერსიისთვის (ე.წ. უფასო build); და განვითარებისთვის (ე.წ. checked build). ეს ფაილები განლაგებულია დირექტორიაში %ddk%\libfre\i386 და %ddk%\libchk\i386 აშკარად. გამართვის ვერსია უფრო მეტად შეფერხებულია შესწორებების უფრო საფუძვლიანი გადახედვით. თქვენ უნდა ჩამოტვირთოთ ფაილები სისტემის თქვენი ვერსიიდან და განათავსოთ ისინი \masm32\lib\w2k დირექტორიაში.

ფაილები ჩასართავად

ჩვენ ასევე უნდა შევიტანოთ (*.inc) ფაილები დანიშნული ფუნქციის პროტოტიპებით. ჩვენც (უფრო ზუსტად, მე) თავად მოგვიწევს სამუშაოს შესრულება. მე ვცადე ბევრი სხვადასხვა კომუნალური პროგრამა * .lib -> * .inc-ის გადასაყვანად, რომლებიც შედის masm32 by hutch პაკეტში და რომლებიც სხვადასხვა დროს ჩამოვტვირთე ინტერნეტის უკიდეგანო ხარჯებიდან. ყველაფერთან ერთად, ჩემთვის ცხადია, რომ მხოლოდ protoize.exe by f0dder ჩაეჭიდა თავის ამოცანებს და მე პრაქტიკულად არ მქონდა შანსი ხელებით რაიმეს რედაქტირება. ეს სასწაული ინსტრუმენტი იქნება კატალოგში \tools\protoize. ავტორის ვებგვერდი: http://f0dder.didjitalyphrozen.com/. იქ ვერავის იპოვით. f0dder-მა რამდენჯერმე გამოაქვეყნა ეს პროგრამა კონფერენციაზე http://board.win32asmcommunity.net/. ჩართვა განთავსდება კატალოგში \include\w2k. განათავსეთ ეს კვალი \masm32\include\w2k დირექტორიაში. კონვერტაციისთვის ჩვენ გამოვიყენეთ *.lib Windows 2000-ის უფასო ვერსიისთვის, რადგან მე მაქვს ეს ვარიანტი (და თქვენც გაქვთ იგივე ვარიანტი).

სერიოზული პრობლემა მოდის. ეს პრაქტიკულად მოიცავს ფაილს საჭირო სტრუქტურებით, სიმბოლური მუდმივებითა და მაკროებით. ნაკლებად სავარაუდოა, რომ თქვენ შეძლებთ გაარკვიოთ რა ხდება აქ - ეს ისეთი ეგზოტიკური სამუშაოა - დაწეროთ ბირთვის რეჟიმის დრაივერები ასამბლეის ენაზე. მეტი შეგიძლიათ გაიგოთ EliCZ-დან http://www.anticracking.sk/EliCZ/. დამზადებულია Y0da-ს მიერ http://mitglied.lycos.de/yoda2k/index.htm (ნაწილობრივ მის მიერ შექმნილი, ნაწილობრივ იგივე EliCZ-ისგან). მაგრამ ცუდია ხელიდან გასვლა (მთელი ჩემი ღრმა პატივისცემით ჩვენი სლოვაკი და გერმანელი კოლეგების მიმართ): მრავალი სტრუქტურის წევრების სახელები განსხვავდება DDK-ის თავდაპირველი სათაურის ფაილებისგან; სტრუქტურისა და ინტეგრაციის შენატანებს სახელები არ აქვთ; თუმცა ორიგინალში დასახელებული იყო. და უცებ ყველა აჯანყებულ მდგომარეობაშია და როცა მათ უყურებ, მჩაგვრელი მტრობით აყვირებ. ეს ამაზრზენია მხოლოდ ntstatus.inc-სთვის. ეს ნაწილობრივ აიხსნება იმით, რომ EliCZ-მ დაიწყო საკუთარი ჩანართების შექმნა ახალ DDK-ზე ყოფნის საათამდეც (როგორც თავად თქვა). თუ ვინმეს პრობლემა შეგექმნებათ, არ მოგცემ უფლებას შეურაცხყოფა მიაყენოს, დაიქირაოს ისინი ფრთხილად გადამოწმების გარეშე. დადგა დრო, რომ ის გაჩნდა კონფერენციაზე http://board.win32asmcommunity.net/, მაგრამ ბრწყინვალება არ არის განსაკუთრებით შთამბეჭდავი. მოკლედ, ერთადერთი სწორი გამოსავალი ამ სიტუაციაში არის ყველაფრის გაკეთება საკუთარი ხელით და ხელით, რადგან არ არსებობს ინსტრუმენტები, რომლებიც საშუალებას მოგცემთ ამ პროცესის ავტომატიზირება. თუ თქვენ, რაპტომ, პატივს სცემთ ამის მიმართ, პატივს არ მცემთ ჩემი საქმისთვის - შემატყობინეთ.

მძღოლის გაუმჯობესება

ასევე გვჭირდება დისპეტჩერი და, როგორც კი კოდი გადავა ბირთვის რეჟიმში, გვჭირდება ცალკე დისპეჩერიც. საუკეთესო არჩევანი იქნება SoftICE. ან შეგიძლიათ სწრაფად შეხვიდეთ Kernel Debugger-ზე DDK საწყობში. ეს კონტროლერი შეიცავს ორ კომპიუტერს - სადენიანი და დისტანციური, რომელსაც ვერ ახერხებთ. მარკ რუსინოვიჩმა (http://www.sysinternals.com/) დაწერა LiveKd პროგრამა, რომელიც საშუალებას გაძლევთ გამოიყენოთ Kernel Debugger სხვა კომპიუტერთან დაკავშირების გარეშე. არ ვიცი რა არის საიტზე (შემოწმების გარეშე), მაგრამ დისკზე არის წიგნი სახელწოდებით "Microsoft Windows 2000-ის შიდა მოწყობილობები". ასევე, ეს რედაქტორი შექმნილია თქვენი სისტემის შიდა სისტემის მონიტორინგისთვის, რომელშიც დაინსტალირებულია სასარგებლო სიმბოლოები, რომელთა უფასო ჩამოტვირთვა შესაძლებელია (ან შეიძლება) Microsoft-ის ვებსაიტიდან.

  • დევიდ სოლომონი, მარკ რუსინოვიჩი, "მაიკროსოფტი Windows 2000-ის შიდა მოწყობილობები", ხედი. "პეტრე", 2001 წ.

    მიუხედავად იმისა, რომ ეს წიგნი არ შეიცავს ბევრ გამომავალ კოდს, ის პირველ რიგში პროგრამისტებისთვისაა.

  • სვენ შრაიბერი, "Windows 2000-ის დაუსაბუთებელი თვისებები", ხედი. "პეტრე", 2002 წ.

    ეს არის პრაქტიკული წიგნი, რომელიც ავლენს Windows 2000-ის ბრმა საიდუმლოებებს.

  • უოლტერ ონი, "Microsoft Driver Model-ის პროგრამირება", Microsoft Press, 1999 წ.

    ეს წიგნი ყურადღებას ამახვილებს Plag "n" Play დრაივერებზე, მაგრამ არ აქვს უპირატესობა, რადგან მძღოლების განვითარების ძირითადი პრინციპები უნივერსალურია.

  • ჯეფრი რიხტერი, „Windows პროფესიონალებისთვის: ძლიერი Win32 დანამატების შექმნა 64-ბიტიანი Windows-ის სპეციფიკაციებით“, რედ. "პეტრე", 2000 წ.

    ამ წიგნს არაფერი აქვს საერთო პროგრამირების დრაივერებთან და მით უმეტეს ;-)

    ეს სია არავითარ შემთხვევაში არ არის ამომწურავი. ინტერნეტში შეგიძლიათ იპოვოთ ბევრი რამ, განსაკუთრებით ინგლისურად (შრაიბერის წიგნი, ყველა წიგნი ელექტრონული ვერსიაა). ყველა წიგნში მინდა ვთქვა, რომ ყველაფერი არის „უნდა ჰქონდეს“ კატეგორიაში. გაერთეთ - იყიდეთ, არ გაგიკვირდეთ. ყველაფერი ვალტერის გარდა „და ონეის“ ითარგმნება ჩვენს „დიდი და ძლევამოსილი“.

    Დავრჩები. მე არ ვარ დიდი ექსპერტი დრაივერების განვითარების სფეროში, ამიტომ გთხოვთ, გაიგოთ უზუსტობები, როგორც აქ, ასევე ყველა წინა სტატიაში. თუ გაიგებთ, ღიმილით აწიეთ ცხვირი. მადლობას ვიტყვი.