Windows'ta elektrik kontrolü. Windows'taki elektrik kontrolü orta belleğe erişime izin verir; Sürücü, fiziksel belleği doğrudan yönetemez ancak herhangi bir fiziksel belleğin sanal adreslerini kaldırabilir ve onu işleyebilir

Microsoft şirketi Windows 10 işletim sisteminde güvenliğe büyük önem veriyor. Sistemin önemli unsurlarından biri de “Windows Güvenlik Yöneticisi”dir ancak herhangi bir tehdit olmadan bu mümkün değildir. Fidye Yazılımı virüsü Zokrem, özellikle Petya ve bazı yaramaz programların reenkarnasyonları olmak üzere sürekli olarak popülerlik kazanmaktadır. Microsoft, Ransomware virüsleriyle mücadeleyi amaçlayan Windows 10'da çekirdek izolasyonu ve bellek bütünlüğü özellikleri sunmuştur. Temizledikten sonra koku kapatılır.

:

Çekirdek yalıtımı ve bellek bütünlüğü nedir?

Çekirdek izolasyonu- bu, bilgisayar işlemlerinin işletim sisteminden ve cihazdan çitlenmesi yoluyla sağlanan ek bir koruma işlemidir. Bu işlemler, bilgisayarınıza bir virüs bulaştığında işletim sisteminin çalışmasını engellemeyi mümkün kılar.

hafıza bütünlüğü- Bu, bilinmeyen potansiyel olarak güvenli olmayan programların yüksek güvenlik düzeyine sahip süreçlere erişimini sınırlamayı amaçlayan temel işlevin ikincil izolasyonudur.

Önemli: Çekirdek izolasyon işlevi yalnızca bilgisayarınızın donanımının yeterli olduğu ölçüde kullanılabilir. BIOS'u ayarlarken, Windows 10 çalıştıran bir bilgisayarın çeşitli uygulamaları sanal bir kapta çalıştırabilmesi ve temel sistem bileşenlerine erişmesine olanak tanıyabilmesi için sanallaştırma teknolojisinin etkin olması gerekir.

Çekirdek yalıtımı ve bellek bütünlüğü nasıl etkinleştirilir

Windows 10 işletim sistemi ayarları, dünya çapında bilgisayarınızdaki güvenlik özelliklerini yönetmenize olanak tanır. Windows 10 ayarları aracılığıyla çekirdek yalıtımını ve bellek bütünlüğünü mümkün olan en kısa sürede etkinleştirebilirsiniz:


Depo bilgisayarının donanımının sanallaştırma yeteneklerini desteklemediği varsayıldığından bu işlev çalışmayacaktır. Sistem açıldığında sağ alt köşede "Bellek bütünlüğünü sağlamak mümkün değil, uygunsuz olabilir" mesajı görüntülenir. Bu bildirim görünür görünmez BIOS'a gitmeniz ve Güvenli Önyükleme (Önyükleme Modu) işlevinin etkinleştirildiğinden emin olmanız önerilir.

Çekirdek yalıtımı ve bellek bütünlüğü nasıl etkinleştirilir

İşletim sisteminizde çalışmanızı ciddi şekilde etkileyen yeni işlevler, kısa süre içinde bilgisayarınızda sorunlara yol açma riskiyle karşı karşıya kalacaktır. Çekirdek izolasyon fonksiyonunun hatası değil. Bunu zaten denemiş olan kullanıcılar, Microsoft forumlarında bir dizi oyun ve programı başlatırken sorun yaşadıklarını belirtiyorlar. Bu sorunu çözmenin tek yolu çekirdek yalıtımı ve bellek bütünlüğü işlevlerini etkinleştirmektir. Belki gelecek güncellemelerde yazılım dağıtıcıları ve Microsoft bu saçmalığı düzeltecektir.

Є Çekirdek izolasyonunu ve bellek bütünlüğünü etkinleştirmenin 3 yolu:


Güç yöneticisi tüm sistemdeki güç kaynağı göstergelerini takip eder. Geçmişte enerji yönetimi, monitörün bağlanması ve disk sürücülerinin sarılmasından ibaretti. Ancak bu sorun, artan dizüstü bilgisayar ve pil israfının yanı sıra (sürekli açılmaktan yoksun olan) masaüstü bilgisayarlarda enerji tasarrufundaki düşüş ve yeni sunucu elektrik çiftliklerinin yüksek yaşam kalitesi nedeniyle hızla daha karmaşık hale geliyor.

Yeni güç kaynağı kontrolü yöntemleri arasında, sisteme güç verilmediğinde bileşenlerin enerji tüketiminin değiştirilmesi, bunun için diğer cihazların yedek duruma getirilmesi veya tamamen açılması (bir güç kaynağı anahtarı yardımıyla) yer alır. Çok işlemcili sistemler gerekmedikçe birden fazla işlemci içerir ve ayrıca işlemcilerin saat frekansını da değiştirebilir (enerji tüketimini değiştirmek için). İşlemci boşta kalırsa depoladığı enerji de değişir, temizlik ve kesinti dışında hiçbir şey yapmasına gerek kalmaz.

Windows, tüm fiziksel belleği diske kopyalayan ve ardından biriken enerjiyi en aza indiren, hazırda bekletme adı verilen özel bir modu destekler (Ve dizüstü bilgisayarlar, pilin minimum düzeyde boşaldığı derin uyku sırasında kullanılabilir. Belleğin tamamı diske yazıldığı sürece dizüstü bilgisayarın pilini değiştirebilirsiniz (hazırda bekletme durumundayken). Sistem derin uykudan çıktıktan sonra kendini yenilediğinde hafıza tasarruflarını tazeler (ve cihazları yeniden başlatır). Bunun amacı, bilgisayarı uykudan önceki durumuna döndürmek içindir (kaydedilen tüm programları ve hizmetleri yeniden kaydetmeye ve başlatmaya gerek kalmadan). Windows, değiştirilmemiş sayfaları (diskte yedekleme) yok sayarak bu işlemi optimize etmeye çalışır ve diğer sayfaları sıkıştırır. Gereksiz G/Ç yükünü azaltmak için belleğin bazı bölümleri. Derin uyku algoritması, sistem veriminin otomatik olarak G/Ç ve işlemciye dengelenmesini sağlar. G/Ç sistem verimi talebini azaltmak için daha fazla kaynak tüketimi gerekir, ancak aynı zamanda daha etkili veri sıkıştırma.Giriş-çıkış sisteminin yeterli verimi, hazırda bekletme moduna geçerken sıkıştırmayı ortadan kaldırmanıza olanak tanır.Geri kalan nesil çoklu işlemcilerin vicoristan'ı ile derin uyku durumuna girme ve çıkma Yeni şeyler olabilir Sadece birkaç saniye içinde, hafızanın çalışır durumda olması nedeniyle & Sistemin varlığı büyük bir faydadır.

Derin uykuya bir alternatif, güç yöneticisinin tüm sistemi daha düşük bir rejeneratif enerji seviyesine aktardığı bekleme modudur (dinamik hafızanın yenilenmesi için ihtiyaç duyulan enerji miktarıyla aynı miktarda enerji tüketilir). Bellek parçalarının diske kopyalanmasına gerek olmadığından, bazı sistemlerde bu aşamaya geçiş, hazırda bekletme modu olmadan daha hızlı gerçekleşir.

Derin uyku ve uyanık olma yeteneğinin mevcut olmasına rağmen, birçok işçi işlerini bitirdikten sonra kişisel bilgisayarlarını kapatmak istemiyordu.

Hazırda Bekletme, Windows'ta HiberBoot adı verilen ve başlatma üzerinde güçlü bir etkiye sahip olan sahte bir başlatma kapatma işlemi oluşturmak için kullanılır. Bir kullanıcı sisteme çıkma talimatını verdiğinde, HiberBoot kullanıcının sistemdeki oturumunu kapatır ve ardından sisteme tekrar normal şekilde giriş yapabilecekleri noktada onları derin uyku moduna geçirir. Daha sonra kullanıcı sistemi tekrar açtığında HiberBoot, kullanıcının giriş noktasından sistemin çalışmasına devam edecektir. Müşteri için sistem başlatma süresinin çoğu atlandığı için kapalı olsa bile her şey aynıdır. Görünüşe göre, sorunları çözmek veya güncellenmiş bir çekirdeği yüklemek için herhangi bir sistemin uygun şekilde değiştirilmesi gerekiyor. Sistem yeniden başlatma ve kapatma komutunu reddettiği için bilgisayardan veri aktarmak ve ilk gecikmeyi kaydetmek gerekir.

Telefon ve tablet bilgisayarlardaki bilgi işlem cihazlarının yanı sıra yeni nesil dizüstü bilgisayarların da bundan böyle çok az miktarda elektriğe ihtiyaç duyacağı açıktır. Bu modu sağlamak için mevcut Windows, CS (bağlı bekleme) adı verilen özel bir elektrik kontrolü sürümünü uygular. CS, trafiğin küçük bir bağlantı kümesine bağlanmasına izin veren, yüksek kapasiteli bir sistem kullanan ve daha az enerji harcayan, merkezi işlemciyi kullanmadan, sınıra kadar özel donanımlı bağlantılara sahip sistemlerde mümkündür. CS sistemi zaten açıksa ekranı açar açmaz CS'den çıkış yapabilirsiniz. Bağlantı modundaki algılama, temel algılama modundan farklıdır, böylece CS sistemi, bağlantı izlemeden bir paket alırsa algılama modundan da çıkacaktır. Pil boşalmaya başladığında CS sistemi, pilin tamamen boşalmasını ve muhtemelen veri israfını önlemek için derin uyku moduna geçer.

Pilin ömrü yalnızca işlemcinin sık sık arızalanmasına bağlıdır. İşlemciyi yerinde tutmak da önemlidir. CS sisteminin sınırlı kullanılabilirliği, veri bulunana kadar işlemcilerin kapatılmasına izin verir, aksi takdirde işlemci başka yollarla tekrar açılabilir. NT tabanlı Windows aygıt sürücüleri, sistem hizmetleri ve eklentileri genellikle belirli bir neden olmaksızın, yalnızca yardım sistemini kontrol etmek için başlatılır. Bu tür test etkinliği, sistemdeki veya ekteki kodun periyodik olarak çalıştırılması için zamanlayıcıların ayarlarına dayanır. Zamanlayıcı sinyallerine bağlı olarak işlemciyi açarken karışıklığa neden olabilir. Bu tür zamanlayıcıları bugün Windows'tan hariç tutmak için, işletim sisteminin zamanlayıcı olaylarını birleştirmesine ve işlemciyi açmak için bir dizi diğer olayı kısaltmasına olanak tanıyan kill parametresini belirtmeniz gerekir. Windows'ta da sistem tasarlanmıştır, aktif düzenleme aşamasında olmayan herhangi bir ekleme ile kodu arka planda kaydedebilirsiniz. Güncellemelerin kontrol edilmesi veya birlikte yenilenmesi gibi işlemler, zamanlayıcının süresi dolduktan sonra başlatılmadığı sürece tamamlanamaz. Ekleme, benzer arka plan etkinliklerine yanıt olarak işletim sisteminden beslenebilir. Örneğin, güncellemelerin kontrol edilmesinin yalnızca günde bir kez veya cihazın pili şarj ettiği zamanlarda yapılması gerekir. Sistem aracıları seti, farklı arka plan etkinlikleriyle etkileşimde bulunmak için kullanılabilecek çeşitli zihinler sağlar. Arka plan görevleri düşük maliyetli bir ağa erişim gerektirdiğinden veya müşteri için yeni bir önem taşıdığı düşünüldüğünden, aracılar gerekli akıllar kaybedilene kadar işi bırakmaya başlamayacak.

Günümüzde hem yerel kodla hem de karanlıkta kalan hizmetlerle pek çok eklenti hayata geçiriliyor. Windows, üçüncü taraf hizmetlerinin, CS'nin üçüncü taraf sunuculardan gelen paketleri özel olarak dinlemesini gerektirmeden bildirimleri Windows uygulamalarına CS'ye göndermesine olanak tanıyan Windows Bildirim Hizmeti'ni (WNS) sağlar. WNS bildirimleri, metin bildirimleri veya VoIP üzerinden yapılan aramalar gibi zaman açısından kritik istekler hakkında sizi bilgilendirebilir. Bir WNS paketi alınırsa, işlemcinin işlenmesi için açılması gerekecektir ve CS kullanımdaysa, farklı bağlantıların trafiğini ayırmak mümkün olabilir; bu, işlemcinin daha sonra açılmasına gerek kalmayacağı anlamına gelir. aynı pakete yanıt Edge arayüzüyle ne yapılmalı?

Ana dizüstü bilgisayarımda sıklıkla çeşitli elektrik sorunları yaşanıyor ve bu sorunlar içeriden öğrenilen raporlarla açıklanabilir. Ancak kararlı sürüm 1803'te sistemimin uyku moduna geçmeyi bıraktığını fark ettim. Bu durumda monitör bir saatlik bir sürenin ardından yanıp sönüyordu ve bu da sistem doğru şekilde yapılandırıldığında işlem yapılmamasına neden oluyordu.

Uykuya geçiş için 1-2 hafta gibi kısa bir süre belirledim ve tanı konulmadan önce başladım.

Eklentilerden ve sürücülerden yaşam alt sistemine yapılan girişlerin kontrol edilmesi

Önce hayret etmeliyiz güçcfg, Uyku moduna geçiş sırasında işletim sisteminin yıprandığı şey. Elektrik alt sisteminden önce çalışan işlemlere ve sürücülere komut satırından yönetici olarak erişilebilir:

Powercfg istekleri

DRIVER'dan SİSTEM'e yazıldığını açıkça görebilirsiniz - bu seçenekte Realtek vikoristovuyu ses akışı.

Listede ayrıca Chrome'da WebRTC mevcut olabilir ve sistemi yeniden başlattıktan hemen sonra arama optimizasyonu, arama dizini ve başka herhangi bir şey isteyebilirsiniz. Devre dışı bırakma listesine bir işlem veya sürücü ekleyebilirsiniz; bu, uyku moduna geçmenizi engellemez.

Powercfg -requestsoverride SÜRÜCÜ "Realtek Yüksek Tanımlı Ses (HDAUDIO\FUNC_01&VEN_10EC&DEV_0269&SUBSYS_17AA2204&REV_1002\4&d00657&0&0001)" SİSTEMİ

Komutta "DRIVER'dan [sürücü adı dışında] SYSTEM'e gelen isteği dikkate almayın." ifadesi yer alır.

Arızaların listesi kayıt defteri bölümüne kaydedilir.

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Power\PowerRequestOverride

ve komut tarafından görüntülenir

Powercfg -requestsoverride

Emin olmak için yeniden devreye girdim ama sistem donmuş gibiydi. Devre dışı bırakmaları ve istek listesini kontrol ettikten sonra Realtek sürücüsünün devre dışı bırakmalarda değişiklik yapmak isteyerek ses akışını seçmeye devam ettiğini keşfettim.

Şarapların etrafında tefle birkaç kuruş dans ettim ama başarılı olamadım. İsveçli için Google'da yapılan araştırmalar bu tür durumlarda herhangi bir koku olmadığını doğruladı. Bu, eski sorgular için tipik bir durumdur, ancak burada başka bir sonuç daha vardı ve bunun hakkında konuşan ilk kişi ben değilim.

Çantamda listede Realtek'i gördüm. Kayıt defteri düzenleyicisindeki veya konsolundaki girişleri silebilirsiniz. Mayhe komutu eklendiğindekiyle aynıdır, yalnızca nereye gittiğini göstermez, dolayısıyla bu durumda komutun sonunda SİSTEM yoktur:

Powercfg -requestsoverride DRIVER "Realtek Yüksek Tanımlı Ses (HDAUDIO\FUNC_01&VEN_10EC&DEV_0269&SUBSYS_17AA2204&REV_1002\4&d00657&0&0001)"

Farklı bir rota izleyeceğiz

Ses alt sistemine katkı sağlayan sürecin hesaplanması

Görünüşe göre siyah sağ kısımlar Realtek sürücüsü tarafından işleniyor. Açıkçası, sistem başlatıldığında etkinleştirilecektir, bu nedenle dosya adı Otomatik Çalıştırmaların yardımıyla kolayca ilişkilendirilmeyecektir.

Adına bakılırsa biri kontrol paneli olmak üzere iki dosyaya üç giriş yapılır. İlgi odağı haline geldi ravbg64.exe.

Çekirdek modu sürücüleri: Bölüm 1: Temel kavramlar - Arşivler WASM.RU

mimariye bak

Windows 2000'in iç ışığı, hem adres alanı hem de adres alanının tutarlı olduğu koda ilişkin haklar ve yükümlülükler açısından açıkça tanımlanmış sınırları olan iki bölüme ayrılmıştır.

Adres alanının altında her şey tamamen basittir. 32 bit mimaride mevcut olan tüm veriler, gigabaytlar, iki eşit parçaya bölünmüştür (4GT RAM Ayarlama ve Fiziksel Adres Uzantısı, egzotik olduğu için çıkarmıyorum). Alt yarısı Koristuvac rejiminin süreçlerine veriliyor, üst yarısı ise çekirdeğe ait.

Haklar ve yükümlülükler yığınıyla birlikte önemsiz şeyler daha karmaşık hale gelir.

Koristuvach için aşağıdaki işlemler gereklidir:

  • Sistem Destek Süreçleri - örneğin, Winlogon oturum açma işlemi (\%SystemRoot%\System32\Winlogon.exe'de uygulanır);
  • Hizmet Süreçleri - örneğin biriktirici;
  • Kullanıcı uygulamaları için tasarlanmıştır - beş türü vardır: Win32, Windows 3.1, MS-DOS, POSIX ve OS / 2;
  • Ortam Alt Sistemleri - üç ortam alt sistemi desteklenir: Win32 (\%SystemRoot%\System32\Csrss.exe'de uygulanır), POSIX (\%SystemRoot%\System32\Psxss.exe'de uygulanır), OS/2 (\%SystemRoot'ta uygulanır) %\System32\os2ss.exe).

Çekirdek aşağıdaki bileşenlerden oluşur:

    Vikonavcha sistemi (Yönetici) - bellek yönetimi, süreçler ve iş parçacıkları vb.;
  • Çekirdek - iş parçacıklarının planlanması, kesinti ve kapatmanın gönderilmesi vb. (\%SystemRoot%\System32\Ntoskrnl.exe'de uygulanmıştır);
  • Aygıt Sürücüleri - donanım aygıt sürücüleri, uç sürücüler, dosya sistemi sürücüleri;
  • Donanım Soyutlama Katmanı (HAL) - donanım mimarileri arasındaki farkların üç ana bileşenini izole eder (\%SystemRoot%\System32\Hal.dll dosyasındaki uygulamalar);
  • Pencereleme ve Grafik Sistemi - Grafik Kullanıcı Arayüzünün (GUI) işlevleri (\% SystemRoot% \ System32 \ Win32k.sys'de uygulanır).

Küçük 1-1. Windows 2000 mimarisi basitleştirildi

Koristuvach modu ve çekirdek modu

Intel x86 ailesindeki işlemciler çeşitli ayrıcalık düzeylerini (koruma halkaları olarak adlandırılır) desteklese de, Windows'ta yalnızca ikisi seçilmiştir: çekirdek modu için 0 ve çekirdek modu için 3. Bunun nedeni, yalnızca iki düzeyde ayrıcalık uygulayan diğer işlemcilerin (alfa, mips) desteklenmesidir. Windows NT'nin önceki sürümleri bu mimariyi destekliyordu ancak Windows 2000 x86 desteğini kaybetmişti.

Koristuvach modu bileşenlerinin kendi korumalı adres alanları vardır, bu işlemlerin iş parçacıkları tercih edilmeyen işlemci moduna (koristuvach'ın amacı olarak adlandırılır) tahsis edilir, ayrıcalıklı işlemci komutlarıyla birleştirilemez, ara bağlantılar ve aracıların sistem verilerine erişimi kaybolur. , ve sistem adres alanına doğrudan erişim özelliğine gitmeyin. Doğru, robotları, bu süreçlerin iş parçacıkları ve diğer sistem hizmetleri sürecinde çekirdek moduna geçerler, bu durumda çekirdek moduna dönene kadar işleri üzerindeki kontrolü kaybederler.

Rejime atanan süreçlerin sistemin istikrarı açısından potansiyel olarak güvensiz olduğu değerlendirilmektedir. Hakları müzakereye tabidir. Ve sınırları aşmaya çalışan herkes onlarla sert bir şekilde karşılaşacaktır.

Çekirdek bileşenleri tek bir adres alanını paylaşır, tercih edilen işlemci modunda (çekirdek modu olarak adlandırılır) derlenir, ayrıcalıklı işlemci komutları dahil tümünü kabul edebilir, herhangi bir müdahaleye sahip olmayabilir ve sistem verilerine ve koduna doğrudan erişime sahip olabilir, doğrudan veya aracılığıyla olabilir HAL, sahipliğe kadar erişim.

Çekirdek kodu (sistemin kendisi dahil) tamamen güvenilir görünmektedir. Dolayısıyla sürücü, sistem adres alanına dahil edilerek sistemin bir parçası haline gelir ve herhangi bir müdahaleye maruz kalmaz.

Bu atama işletim sistemine su ekleme amacına yöneliktir. Sistemin dahili işlevlerine veya veri yapılarına erişim gerektiren bazı ciddi eklemeler yazmayı seçerseniz, o zaman kör bir değişimle karşı karşıya kalırsınız ve bu da ancak kodunuzu sistem adres alanına yerleştirerek gerçekleştirilebilir. Belgelere göre bunu yapmanın tek yolu var - aygıtın sürücüsünü yükleyin. Bu yöntem açıkça basit, güvenilir ve en önemlisi işletim sistemi açısından güvenlidir.

Windows 2000 Sürücüleri

Windows 2000 çeşitli aygıt sürücüsü türlerini destekler.

Temsilcilerine rehberlik eden iki temel ilke vardır:

  • Koristuvach modu sürücüleri (Kullanıcı Modu Sürücüleri):
    • Sanal Aygıt Sürücüleri (VDD) - MS-DOS programlarını desteklemek için kullanılır (Windows 95/98'deki VxD sürücüleriyle karıştırmayın - hepsi farklı sözcüklerdir, ancak aynı adı taşırlar);
    • Yazıcı Sürücüleri.
  • Çekirdek Modu Sürücüleri:
    • Dosya sistemi sürücüleri (Dosya Sistemi Sürücüleri) - yerel ve çevresel disklere giriş ve çıkış uygular;
    • Eski Sürücüler - Windows NT'nin önceki sürümleri için yazılmıştır;
    • Video bağdaştırıcısı sürücüleri (Video Sürücüleri) - grafik işlemlerini uygular;
    • Akış aygıtları için sürücüler (Akış Sürücüleri) - video ve ses giriş ve çıkışını uygular;
    • WDM sürücüleri (Windows Sürücü Modeli, WDM) - Tak ve Çalıştır teknolojisini ve elektrik kontrolünü destekler. Dikkate değer özelliği, Windows 98, Windows ME ve Windows 2000 arasındaki program koduyla aynı tutarlılıktır.

Farklı ülkelerde, indüklenen alandan birkaç dakika sonra sınıflandırmayı tanıyabilirsiniz, ancak bu önemli değildir. Yazacağımız sürücülerin bu sınıflandırmanın hiçbir noktasına girmemesi önemlidir. Plag "n" Play'i ve elektrik kontrolünü desteklemeyen hiçbir dosya sistemi sürücüsü, hizmet dışı bırakılmış sürücü, video bağdaştırıcısı veya ses kartı sürücüsü, WDM sürücüsü yoktur. Koristuvalny rejimini sürmeyin (endişelenmeyin). Aslında, bu sadece lanet bir şey, çünkü sistemin kendisi herhangi bir cihaz için kendisine kolayca ve basit bir şekilde kod eklemenize izin veriyor ve onunla çalışmak çok kolay! Sanki gece hiç tanımadığınız biri kapınızı çalmış ve siz tek kelime bile etmeden onu bir hiç uğruna içeri almış ve onu yere sermişsiniz gibi! Ancak bu güvenlik sistemindeki bir hata veya kusur değildir. Sistem nasıl çalışıyorsa öyle çalışır. Aksi takdirde yapamayız çünkü bağlantılarla etkileşime giren sistem kendisine erişim izni veremez. Eğer öyle olmasaydı tamamen kapalı olurdu, bu da kimsenin sisteme ihtiyacı olmayacağı anlamına geliyordu.

Adından da anlaşılacağı gibi aygıt sürücüsü, belirli bir aygıtı kontrol etmek için tasarlanmış bir programdır ve aygıtın mutlaka fiziksel olması gerekmez. Bu mantıksal da olabilir, bizim durumumuzda olduğu gibi sanal da olabilir.

Yapısının arkasında sürücü, PE formatındaki bir dosyadan (Taşınabilir Yürütülebilir, PE) başka hiçbir şeye eklenmez. Orijinal exe ve dll ile aynı. Yalnızca insanlar ilgilenir ve diğer kurallara uyar. Sürücüler, çekirdek moduna atanan bağımsız olmayan mod üzerinde kontrol amacıyla çekirdek modundaki DLL'ler olarak görüntülenebilir. Buradaki ana fark (ayrıcalık düzeyi olması şart değil), sürücüye, herhangi bir koda veya herhangi bir veriye doğrudan erişemeyeceğimiz, ancak G/Ç yöneticisi (Giriş / Çıkış Yöneticisi) tarafından sağlanan özel bir mekanizmayı kullanmamızın gerekmesidir. . Girdi-çıktı yöneticisi, sürücülerin işleyişi için orta yolu sağlar ve aynı zamanda bunların edinimi, manipülasyonu ve yönetimi için mekanizmalar sağlar.

Çekirdek modunda sürücüleri geliştirmeye başladığınızda, kendinizi tam bir acemi gibi hissedersiniz, çünkü wiki API'sinin tüm gelişmiş bilgileri burada yardımcı olmayacaktır - çekirdek tamamen farklı bir işlevler kümesi sağlar. Ayrıca yetersiz belgelenmiş işlevler ve veri yapılarıyla da karşılaşabilirsiniz.

Tek ve çoklu sürücüler

Fiziksel aygıtlara yönelik sürücülerin çoğu katmanlı sürücülerdir. G/Ç işlemleri bir dizi sürücü arasında paylaşılır. Kozhen işlerden payını alıyor. Örneğin, bir dosyayı okuma isteği, işlemi tamamladıktan sonra (örneğin, isteği birkaç parçaya bölerek) "alt" sürücüyü disk sürücüsüne ileten dosya sistemi sürücüsüne gönderilir ve ikincisini sıra kendisine geldiğinde talebi otobüs şoförüne iletir. Ayrıca bu sürücülerin arasına istediğiniz sayıda filtre sürücüsü ekleyebilirsiniz (örneğin, verileri şifreleme). Denetleyici alt düzey sürücüye güç verir ve sonuçlarını "yukarı" üst düzey sürücüye iletir. Ale, neyse ki bizim için her şey çok daha basit olacak. Sürücülerimiz artık yekpare sürücüler olacak ve bu da tüm yazma ve geliştirme sürecini büyük ölçüde basitleştirecek.

konunun bağlamı

Parçalar, çoğu durumda, yalnızca bir işlemcimiz var ve eklenmesi gereken çok sayıda eklenti var; bir saatlik kaldırma yanılsamasını yaratmak için tüm eklentileri sırayla bağlamanız doğaldır. -işlemciye.cesora ve daha da fazlası shvidko. Bu prosedüre iş parçacığı bağlamı değiştirme adı verilir. Sistem aynı prosese ait iş parçacıklarının bağlamını yeniden karıştırırsa, iş parçacığı bağlanmadan önce işlemci kayıt değerlerinin kaydedilmesi ve iş parçacığı bağlanmadan önce işlemci kayıt değerlerinin kaydedildiğinden emin olunması gerekir. Veri yapısını güncelliyorum. Bir iş parçacığı başka bir işleme bağlıysa, işlemcinin CR3 kaydındaki işlemin sayfa dizini için göstergeyi ayarlamak gerekir. Bilgisayara atanan dış görünüm süreci adres alanını kapatmak için atandığından, farklı süreçler adres alanlarının farklı projeksiyonlarına ve dolayısıyla işlemcinin fizikte sanal adresleri çevirdiği farklı sayfa dizinlerine ve sayfa tablo kümelerine sahiptir. Bütün bunların sürücü programlamayla doğrudan bir ilişkisi yoktur. Peki, size eksenden ve onun nasıl bağlantılı olduğundan bahsedeceğim. Bağlamı karıştırma işlemi yaygın olmadığından, mükemmel verimlilik kaybı nedeniyle sürücüler kural olarak akışlarını yaratmazlar. Ancak sürücü kodunun yine de kaldırılması gerekiyor. Bu nedenle, bağlamların karıştırılmasından bir saat tasarruf etmek için sürücüler, üç bağlamdan birinde çekirdek modunda derlenir:

  • koristuvatskogo akışı bağlamında, giriş-çıkışa initsiyuv uygulanacaktır;
  • çekirdek modundaki bir sistem iş parçacığı bağlamında (iş parçacıkları Sistem işlemine aittir);
  • kesintinin bir sonucu olarak (ve bu, herhangi bir süreç bağlamında değil, kesinti anında belirleyeceğimiz bir akış anlamına gelir).

"Herhangi bir süreç veya akış bağlamında değil" bir şeyi yazmanın nasıl mümkün olduğunu tam olarak anlamıyorum, ancak bunu yazan kişilerin (D. Solomon ve M. Russinovich) ve ayrıca bizim de yazdıklarımızın otoritesine bakarak. gerek yok çünkü. Herhangi bir yazılımla, çok daha az donanım kesintisiyle uğraşmayacağız, üçüncü türü hemen unutabilirsiniz. İlk iki seçenek kaybolacak. Eğer giriş-çıkış başlatılırsa, iş parçacığı bağlamında bu giriş başlatılır, bu da bu iş parçacığının tabi olduğu sürecin adres alanına hemen gidebileceğimiz anlamına gelir. Eğer sistemsel bir akış bağlamındaysak o zaman ortası olmayan hiçbir sürece gidemeyiz ama her zaman sistemik akışa gidebiliriz. Eğer sürücüden falan adresin arkasında belli bir süreç olduğunu merak ediyorsanız, o zaman ya bağlamı kendiniz tercüme edersiniz ya da yan tabloların arkasındaki adresleri tercüme edersiniz.

İçeceklere ara verin

Kesinti, herhangi bir işletim sisteminin bilinmeyen bir parçasıdır. İşleme işlemi alır, ardından akış kodu atanır ve işlem, işlem işlemcisine aktarılır. Hem donanım hem de yazılım kesintileri var. Kesintiler önceliklerine göre hizmet verir. Windows 2000, kesme isteği düzeyleri (IRQL) adı verilen özel bir kesme öncelik şeması kullanır. En düşük önceliğe sahip olan 0'dan (pasif) en yüksek önceliğe sahip olan 31'e (yüksek) kadar toplam 32 seviye vardır. Ayrıca, IRQL = 0'dan (pasif) IRQL = 2'ye (DPC \ sevkıyat) geçiş yazılımdır ve IRQL = 3'ten (cihaz 1) IRQL = 31'e (yüksek) geçiş donanımdır. Öncelik eşitlerini akış önceliklerinin eşitleriyle karıştırmayın - tamamen farklı konuşmalar. IRQL = 0 düzeyinde kesinti, kesinlikle açıktır, herhangi bir kodun çalışmasını kesintiye uğratamayacağınız için herhangi bir kesinti yoktur (hatta bu kodun daha da düşük bir kesinti düzeyine dönüştürülmesi gerekir ve böyle bir düzey yoktur). Bu IRQL'de Koristuvalnitsky rejiminin akışları belirlenir. Ve sürücülerimizin kodları da bu IRQL'e bağlanacak. Bu hiçbir şekilde herhangi bir sürücünün kodunun her zaman "pasif" olarak değerlendirileceği anlamına gelmez. Herhangi bir yazılım veya donanım kesintisiyle uğraşmayacağız. Ve en az iki çok önemli işaret ortaya çıkıyor.

Birincisi: kesintiyi daha yüksek bir öncelik ile işlemek için sürücülerimizin çalışmaları her an kesintiye uğrayabilir (örneğin, zamanlayıcı önemliyse bir zamanlayıcı şeklinde, böylece akışımız uzun süre devam eder) ve artık karar vermenizin zamanı geldi). Dolayısıyla bu anlamda sürücülerimizin kodu da herhangi bir thread'in kodu gibi kesintiye uğrar ve askıya alınır (işlemci başka bir thread'e verilir). Temel işlevler, mevcut taşma seviyesini belirlemenize, artırmanıza veya azaltmanıza olanak tanır.

Bir diğer önemli nokta: pasif seviyede çekirdeğin herhangi bir fonksiyonunu çağırabilirsiniz (DDK'da dış görünüm fonksiyonunun açıklamasında hangi seviyede arayabileceğiniz açıkça belirtilmiştir) ve ayrıca hafıza taraflarına da gidebilirsiniz. takas dosyasına koyun. Daha yüksek bozulma düzeylerinde (DPC / dispath ve daha yüksek), fiziksel belleğin her gün silinmeye çalışılması sistemin çökmesine neden olur, böylece Bellek Yöneticisi belleğin silinmesini işleyemez.

"Ölümün kara ekranı"

Sanırım “Ölümün Mavi Ekranı” (BSOD) adı verilen bu zayıf resmi bir kez olsun çizmek isterim. Chantly, bunun ne olduğunu ve neden suçlanacağını açıklamaya gerek yok. Burada, çekirdek modunda sürücüleri geliştirmeye başladığınızda, BSOD'un monitör ekranınızda oldukça sık görüneceği gerçeğine hazırlıklı olmanız önemlidir.

Üçüncü çalışta her şey basitti: yaklaşık kodu yazarak, int3'ü gerektiği gibi yerleştirerek, hata ayıklayıcıda i... çalıştırarak artık bunun neyle ilgili olduğunu anlayabilirsiniz. Durum böyle değilse - bitirdikten sonra düzeltmeleri düzeltin, yeniden derleyin... vb. kod gerektiği şekilde talep edilene kadar. Sürücüleri programlarken bu teknolojiyi unutabilirsiniz. Burada "kazıcı" bir kez merhamet eder. Tek bir yanlış hareket... ve sandalyenize yaslanıp biraz rahatlayabilirsiniz.

BSOD'yi düzeltmek için önce çok basit bir kurala uymalısınız: "Bir kez kontrol edin, bir kez çalıştırın" ... "Bir kez kontrol edin, bir kez çalıştırın" anlamında. Para kazanmaktan çok daha önemli olduğunu söylemek aslında çok basit. Ancak kural olarak bunlara baktığınızda (bu yazıları okuduktan sonra) yazacağınız sürücülerin yapısı oldukça basittir, BSOD ortaya çıkmadan önce bile bunu sorunsuz bir şekilde halledebilirsiniz. Açıkça gözünüzün önünde olduğunuz ve nedenini anlayamadığınız için durumu netleştirmenin en iyi yolu kaza dökümünü analiz etmektir. Bunun nasıl oluşturulacağını ve analiz edileceğini Mark Russinovich'in "Çökme belleği dökümlerinin analizi" http://www.osp.ru/win2000/2001/03/025.htm makalesinde okuyabilirsiniz. Sağ tarafta bu (analiz) hiç de kolay değil ama yine de oraya varamayacağını düşünüyorum.

Teorisyen kötü bir teorisyen değildir, dolayısıyla söylenen her şeyi, anlaşılması kesinlikle gerekli olan bu ilkelerle ilgili temel gerçekler olarak görebilirsiniz. İş parçacığı bağlamı, iş parçacıklarının kesintisi ve önceliği, çekirdek/çekirdek modu vb. hakkında net bir anlayışa sahip olmadan, çekirdek modunda sürücüleri yüklemeye başlamak mümkün değildir. vesaire. Herhangi bir beslenmeden memnun olmadığınızı düşünüyorsanız - literatür listesi aşağıdadır.

Şimdi biraz daha pratik konuşmalar göreceğiz (sonraki makalelerde çok pratik olacaklar) ve ihtiyacımız olan şey tüm bu teoriyi pratiğe dönüştürmek.

Sürücü Geliştirme Kiti

Öncelikle Microsoft web sitesinden ücretsiz olarak indirilebilen Aygıt Sürücüsü Geliştirme Kiti (Windows 2000 Sürücü Geliştirme Kiti, 2KDDK) (her durumda, tamamen ücretsiz olarak indiriyorum: http://www.microsoft.com) /ddk/). Bu paket, sürücüler tarafından kullanılan cihazların dahili veri yapıları ve dahili sistem işlevleri hakkında zengin bilgiler içeren belgeleri içerir.

DDK'daki belgelere ek olarak, bağlantı sırasında son derece gerekli olacak bir dizi kitaplık dosyası (* .lib) vardır. DDK iki dosya kümesi içerir: Windows'un kalan sürümü için (ücretsiz sürüm olarak adlandırılır); ve geliştirme için (kontrol edilen yapı olarak adlandırılır). Bu dosyalar açıkça %ddk%\libfre\i386 ve %ddk%\libchk\i386 dizinlerinde bulunur. Hata ayıklama sürümü, düzeltmelerin daha kapsamlı bir şekilde gözden geçirilmesiyle daha da bozulur. Dosyaları sistem sürümünüzden indirip \masm32\lib\w2k dizinine yerleştirmeniz gerekiyor.

etkinleştirilecek dosyalar

Ayrıca belirlenmiş işlev prototiplerine sahip (*.inc) dosyalarını da eklememiz gerekir. Biz (daha doğrusu ben) de işi kendimiz yapmak zorunda kalacağız. * .lib -> * .inc'yi dönüştürmek için masm32 by hutch paketine dahil olan ve İnternet'in geniş alanlarından çeşitli zamanlarda indirdiğim birçok farklı yardımcı programı denedim. Her şeyden öte, benim için sadece f0dder'ın protoize.exe'sinin görevlerine kapıldığı aşikar ve pratikte ellerimle hiçbir şeyi düzenleme şansım olmadı. Bu mucize araç, katalog \tools\protoize'da olacak. Yazarın web sitesi: http://f0dder.didjitalyphrozen.com/. Orada kimseyi bulamazsınız. f0dder bu yardımcı programı http://board.win32asmcommunity.net/ konferansında birkaç kez yayınladı. Dahil etme, \include\w2k kataloğunda yer alacaktır. Bu izlemeyi \masm32\include\w2k dizinine yerleştirin. Dönüştürme için, Windows 2000'in ücretsiz sürümü için *.lib'i kullandık, çünkü bu seçeneğe sahibim (ve siz de aynı seçeneğe sahipsiniz).

Ciddi bir sorun yaklaşıyor. Bu pratik olarak gerekli yapıları, sembolik sabitleri ve makroları içeren bir dosyayı içerir. Montaj dilinde çekirdek modu sürücüleri yazmak çok egzotik bir iştir, burada neler olup bittiğini bulmanız pek olası değildir. EliCZ http://www.anticracking.sk/EliCZ/ adresinden daha fazla bilgi edinebilirsiniz. Y0da tarafından yapılmıştır http://mitglied.lycos.de/yoda2k/index.htm (kısmen kendisi tarafından, kısmen aynı EliCZ'den yaratılmıştır). Ancak kontrolden çıkmak kötüdür (Slovak ve Alman meslektaşlarımıza olan derin saygımla): birçok yapının üyelerinin isimleri DDK'nın orijinal başlık dosyalarındaki isimlerden farklıdır; Yapının ve entegrasyonun katkılarının isimleri yoktur; orijinalinde isimleri olmasına rağmen. Ve birdenbire herkes darmadağın oluyor ve onlara baktığınızda baskıcı bir düşmanlıkla haykırıyorsunuz. Sadece ntstatus.inc için iğrenç. Bu kısmen EliCZ'nin (kendisinin de söylediği gibi) yeni DDK'da bulunma saatinden önce bile kendi katkılarını yaratmaya başlamasıyla açıklanıyor. Herhangi birinin bir sorunu varsa, onu kötülemenize, dikkatli bir doğrulama olmadan onu işe almanıza izin vermeyeceğim. http://board.win32asmcommunity.net/ konferansında parlamasının zamanı geldi, ancak parlaklık pek etkileyici değil. Kısacası bu durumda tek doğru çözüm her şeyi kendiniz ve manuel olarak yapmaktır çünkü bu süreci otomatikleştirmenize izin veren hiçbir araç yoktur. Raptom, buna saygı gösterirsen, işime saygı duymazsan bana haber ver.

sürücü iyileştirmesi

Ayrıca bir dağıtıcıya ihtiyacımız var ve kod çekirdek moduna aktarılır aktarılmaz ayrı bir dağıtıcıya da ihtiyacımız var. En iyi seçim SoftICE olacaktır. Veya Çekirdek Hata Ayıklayıcısına hızlı bir şekilde DDK deposuna erişebilirsiniz. Bu denetleyici iki bilgisayar içeriyor; biri kablolu, diğeri ise paranızın yetmeyeceği uzak bir bilgisayar. Mark Russinovich (http://www.sysinternals.com/), başka bir bilgisayara bağlanmadan Çekirdek Hata Ayıklayıcısını kullanmanıza olanak tanıyan LiveKd yardımcı programını yazdı. Sitede ne olduğunu bilmiyorum (kontrol etmeden), ancak diskte "Microsoft Windows 2000'in Dahili Aygıtları" adlı bir kitap var. Ayrıca bu düzenleyici, Microsoft web sitesinden ücretsiz olarak indirilebilen (veya indirilebilen) faydalı sembollerin yüklü olduğu sisteminizin dahili sistemini izlemek için tasarlanmıştır.

  • David Solomon, Mark Russinovich, "Microsoft Windows 2000'in dahili aygıtları", görünüm. "Peter", 2001.

    Bu kitap çok fazla çıktı kodu içermese de öncelikle programcılar içindir.

  • Sven Schreiber, "Windows 2000'in Belgelenmemiş Özellikleri", görünüm. "Peter", 2002.

    Bu, Windows 2000'in kör sırlarını ortaya çıkaran pratik bir kitaptır.

  • Walter Öney, "Microsoft Sürücü Modelini Programlamak", Microsoft Press, 1999.

    Bu kitap Plag "n" Play sürücülerine odaklanmaktadır ancak sürücü geliştirmenin temel ilkeleri evrensel olduğundan hiçbir avantajı yoktur.

  • Jeffrey Richter, "Profesyoneller için Windows: 64-Bit Windows'un Özellikleriyle Güçlü Win32 Eklentileri Oluşturmak", ed. "Peter", 2000.

    Bu kitabın sürücülerin programlanmasıyla hiçbir ilgisi yoktur, hatta daha da fazlası ;-)

    Bu liste hiçbir şekilde kapsamlı olma iddiasında değildir. İnternette özellikle İngilizce olmak üzere pek çok şey bulabilirsiniz (Schreiber'in kitabı, tüm kitaplar elektronik versiyondadır). Tüm kitaplarda her şeyin “olmazsa olmaz” kategorisinde olduğunu söylemek isterim. İyi eğlenceler - satın alın, şaşırmayın. Walter "ve Oney" dışındaki her şey bizim "büyük ve kudretli" dilimize çevrilmiştir.

    Kalacağım. Sürücü geliştirme alanında büyük bir uzman değilim, bu yüzden lütfen hem buradaki hem de önceki tüm makalelerdeki yanlışlıkları anlayın. Öğrenirseniz, gülümseyerek burnunuzu işaretleyin. Teşekkür ederim diyeceğim.