Aracılığıyla paylaş


Öğretici: Şablona dayalı bir Evrensel Windows sürücüsü (KMDF) yazma

Bu makalede, Kernel-Mode Driver Framework (KMDF) kullanarak Evrensel Windows sürücüsünün nasıl yazıldığı açıklanır. Bir Microsoft Visual Studio şablonuyla başlarsınız ve ardından sürücünüzü ayrı bir bilgisayara dağıtıp yüklersiniz.

Önkoşullar

  • Windows Driver Kit (WDK)yüklemek için adımları izleyin. WDK'yi yüklediğinizde Windows için Hata Ayıklama Araçları eklenir.

  • Visual Studio 2022yükleyin. Visual Studio 2022'yi yüklediğinizde, C++ ile Masaüstü geliştirme iş yükünü seçin, ardından Bireysel Bileşenler altında ekleyin:

    • MSVC v143 - VS 2022 C++ ARM64/ARM64EC Spectre etkilerine karşı güçlendirilmiş kütüphaneler (En son)
    • MSVC v143 - VS 2022 C++ x64/x86 Spectre azaltılmış kütüphaneler (En son sürüm)
    • En son v143 derleme araçları için Spectre Azaltmaları içeren C++ ATL (ARM64/ARM64EC)
    • Spectre Risk Azaltmaları ile en son v143 derleme araçları için C++ ATL (x86 & x64)
    • C++ MFC için Spectre Mitigasyonları ile en son v143 derleme araçları (ARM64/ARM64EC)
    • Spectre Risk Azaltmaları ile en son v143 derleme araçları için C++ MFC (x86 & x64)
    • Windows Sürücü Seti

Sürücü oluşturma ve inşa etme

  1. Microsoft Visual Studio'yu açın. Dosya menüsünde, Yeni > Projeseçin.

  2. Yeni proje oluştur iletişim kutusunda, soldaki açılan listeden C++ seçin, ortadaki açılan listeden Windows 'i seçin ve sağ açılan listeden Sürücü 'yi seçin.

  3. Proje türleri listesinden çekirdek modu sürücüsü (KMDF) seçin. Sonraki'ni seçin.

    Çekirdek modu sürücüsünün seçili olduğunu gösteren yeni proje iletişim kutusunun ekran görüntüsü.

    Bahşiş

    Visual Studio'da sürücü projesi şablonlarını bulamazsanız, WDK Visual Studio uzantısı düzgün yüklenmedi. Bu sorunu çözmek için Visual Studio Installerbaşlatın, Değiştirseçeneğini seçin, Bireysel Bileşen sekmesinde Windows Sürücü Setleri'ni ekleyin ve Değiştirseçeneğini seçin.

  4. Yeni proje yapılandır iletişim kutusunda, Proje adı alanına "KmdfDriver" yazın.

    Not

    Yeni bir KMDF veya UMDF sürücüsü oluşturduğunuzda, 32 karakter veya daha az karakter içeren bir sürücü adı seçmeniz gerekir. Bu uzunluk sınırı wdfglobals.h içinde tanımlanır.  

  5. Konum alanına yeni projeyi oluşturmak istediğiniz dizini girin.

  6. Çözümü ve projeyi aynı dizin yerleştir'i işaretleyin ve Oluşturöğesini seçin.

    Proje yapılandırması iletişim kutusunun ekran görüntüsü.

    Visual Studio bir proje ve bir çözüm oluşturur. Bunları Çözüm Gezgini penceresinde görebilirsiniz. (Çözüm Gezgini penceresi görünmüyorsa, Görünümmenüsünden Çözüm Gezgini'ni seçin.) Çözüm, KmdfDriver adlı bir sürücü projesine sahiptir. Sürücü kaynak kodunu görmek için, Kaynak Dosyalaraltındaki dosyalardan herhangi birini açın. Driver.c ve Device.c, başlamak için iyi yerlerdir.

    Sürücü projesindeki dosyaları gösteren çözüm gezgininin ekran görüntüsü.

  7. Çözüm Gezgini penceresinde KmdfDriver seçin ve basılı tutun (veya sağ tıklayın) ve Özellikler'ni seçin. Yapılandırma Özellikleri > Sürücü Ayarları > Genelbölümüne gidin ve hedef platform varsayılan olarak Evrensel olduğunu not edin.

  8. Sürücünüzü oluşturmak için, Derleme menüsünden Build Solution seçeneğini seçin. Microsoft Visual Studio, Çıktı penceresinde derleme ilerleme durumunu görüntüler. (Çıkış penceresi görünmüyorsa, Görünümmenüsünden Çıkış'ı seçin.)

    Derleme çıkışının şunları içerdiğini doğrulayın:

    >    Driver is 'Universal'.
    

    Çözümün başarıyla derlendiğini doğruladığınızda Visual Studio'yu kapatabilirsiniz.

  9. Yerleşik sürücüyü görmek için, Dosya Gezgini'nde KmdfDriver klasörünüze gidin ve ardından x64\Debug\KmdfDriver . Dizin aşağıdaki dosyaları içerir:

    • KmdfDriver.sys--çekirdek modu sürücü dosyası
    • KmdfDriver.inf--Sürücüyü yüklediğinizde Windows'un kullandığı bir bilgi dosyası

Sürücüyü yükle

Genellikle bir sürücüyü test edip hata ayıkladığınızda, hata ayıklayıcı ve sürücü ayrı bilgisayarlarda çalışır. Hata ayıklayıcısını çalıştıran bilgisayara ana bilgisayar adı verilir ve sürücüyü çalıştıran bilgisayara hedef bilgisayar adı verilir. Hedef bilgisayar, test bilgisayarıolarak da adlandırılır. Hata ayıklama sürücüleri hakkında daha fazla bilgi için bkz. windows için hata ayıklama araçları.

Şimdiye kadar, konak bilgisayarda bir sürücü oluşturmak için Visual Studio'yu kullandınız. Şimdi bir hedef bilgisayar yapılandırmanız gerekir.

  1. Sürücü dağıtımı ve testi için bilgisayar sağlama (WDK 10)yönergelerini izleyin.

    Bahşiş

    Hedef bilgisayarı bir ağ kablosu kullanarak otomatik olarak sağlama adımlarını izlediğinizde bağlantı noktasını ve anahtarı not edin. Bunları daha sonra hata ayıklama adımında kullanırsınız. Bu örnekte, bağlantı noktası olarak 50000 ve anahtar olarak 1.2.3.4 kullanırız.

    Gerçek sürücü hata ayıklama senaryolarında, KDNET tarafından oluşturulan bir anahtar kullanmanızı öneririz. Rastgele anahtar oluşturmak için KDNET kullanma hakkında daha fazla bilgi için Hata Ayıklama Sürücüleri - Adım Adım Laboratuvar (Sysvad Çekirdek Modu) makalesine bakın.

  2. Ana bilgisayarda çözümünüzü Visual Studio'da açın. KmdfDriver klasörünüzde KmdfDriver.sln çözüm dosyasına çift tıklayabilirsiniz.

  3. Çözüm Gezgini penceresinde, KmdfDriver projesini seçip basılı tutun (veya sağ tıklayın) ve Özelliklerseçeneğini belirleyin.

  4. KmdfDriver Paket Özellik Sayfaları penceresinde, sol bölmede Yapılandırma Özellikleri > Sürücü Yükleme > Dağıtım'ne gidin.

  5. Dağıtımdan önce önceki sürücü sürümlerini kaldırındenetleyin.

  6. Uzak Bilgisayar Adıiçin, test ve hata ayıklama için yapılandırdığınız bilgisayarın adını seçin. Bu alıştırmada MyTestComputer adlı bir bilgisayar kullanacağız.

  7. Donanım Kimliği Sürücü Güncelleştirmeöğesini seçin ve sürücünüzün donanım kimliğini girin. Bu alıştırmada donanım kimliği Root\KmdfDriver'dır. tamamseçin.

    kmdfdriver paketi özellik sayfaları penceresinin ekran görüntüsü, dağıtım sürücüsü yüklemesinin seçili olduğunu gösteriyor

    Not

    Bu alıştırmada donanım kimliği gerçek bir donanım parçasını tanımlamaz. Kök düğümün çocuğu olarak cihaz ağacında bir yer verilen hayali bir cihazı tanımlar. Gerçek donanım için Donanım Kimliği Sürücü Güncelleştirmesi'yi seçmeyin; bunun yerine Yükle ve Doğrula'yı seçin. Sürücünüzün bilgi (INF) dosyasında donanım kimliğini görürsünüz. Çözüm Gezgini penceresinde KmdfDriver > Sürücü Dosyaları gidin ve KmdfDriver.inf'ye çift tıklayın. Donanım kimliği [Standard.NT$ARCH$] altında bulunur.

    [Standard.NT$ARCH$]
    %KmdfDriver.DeviceDesc%=KmdfDriver_Device, Root\KmdfDriver
    
  8. Derleme menüsünde Çözümü Dağıtseçin. Visual Studio, sürücüyü yüklemek ve çalıştırmak için gereken dosyaları otomatik olarak hedef bilgisayara kopyalar.

    Bir sürücü dağıttığınızda, sürücü dosyaları test bilgisayarındaki %Systemdrive%\drivertest\drivers klasörüne kopyalanır. Dağıtım sırasında bir sorun olursa, dosyaların test bilgisayarına kopyalanmış olup olmadığını kontrol edebilirsiniz. .inf, .cat, test sertifikası ve .sys dosyalarının ve diğer tüm gerekli dosyaların %systemdrive%\drivertest\drivers klasöründe bulunduğunu doğrulayın.

    Sürücüleri dağıtma hakkında daha fazla bilgi için bkz. Test Bilgisayarına Sürücü Dağıtma.

Sürücüyü yükleme

KMDF sürücünüz hedef bilgisayara dağıtıldığında, şimdi sürücüyü yüklersiniz. Daha önce otomatik seçeneğini kullanarak hedef bilgisayarı Visual Studio ile sağladığınızda, Visual Studio sağlama işleminin bir parçası olarak test imzalı sürücüleri çalıştırmak için hedef bilgisayarı ayarlar. Şimdi DevCon aracını kullanarak sürücüyü yüklemeniz yeterlidir.

  1. Konak bilgisayarda, WDK yüklemenizde Araçlar klasörüne gidin ve DevCon aracını bulun. Örneğin, aşağıdaki klasöre bakın:

    C:\Program Files (x86)\Windows Kits\10\Tools\x64\devcon.exe

    DevCon aracını uzak bilgisayarınıza kopyalayın.

  2. Hedef bilgisayarda, sürücü dosyalarını içeren klasöre gidip DevCon aracını çalıştırarak sürücüyü yükleyin.

    1. Sürücüyü yüklemek için kullandığınız devcon aracının genel söz dizimi aşağıdadır:

      devcon yükleme <INF dosyası><donanım kimliği>

      Bu sürücüyü yüklemek için gereken INF dosyası KmdfDriver.inf dosyasıdır. INF dosyası, sürücü ikili dosyasını yüklemek için donanım kimliğini KmdfDriver.sysiçerir. INF dosyasında bulunan donanım kimliğinin Root\KmdfDriver olduğunu hatırlayın.

    2. Yönetici olarak bir Komut İstemi penceresi açın. Sürücü paketi klasörünüze gidin ve şu komutu girin:

      devcon install kmdfdriver.inf root\kmdfdriver

      devcon tanınmadığı hakkında bir hata mesajı alırsanız, devcon aracına yolu eklemeyi deneyin. Örneğin, hedef bilgisayardaki C:\Toolsadlı bir klasöre kopyaladıysanız aşağıdaki komutu kullanmayı deneyin:

      c:\tools\devcon install kmdfdriver.inf root\kmdfdriver

      Test sürücüsünün imzasız bir sürücü olduğunu belirten bir iletişim kutusu görüntülenir. Devam etmek için bu sürücüyü yine de yükle seçin.

      Sürücü yükleme uyarısının ekran görüntüsünü .

Sürücüde hata ayıklama

KMDF sürücünüzü hedef bilgisayara yüklediğinize göre, ana bilgisayardan uzaktan bir hata ayıklayıcı ekleyin.

  1. Ana bilgisayarda, Yönetici olarak bir Komut İstemi penceresi açın. WinDbg.exe dizinine geçin. Windows kiti yüklemesi kapsamında yüklenen Windows Sürücü Seti'nden (WDK) WinDbg.exe'nin x64 sürümünü kullanın. WinDbg.exeiçin varsayılan yol aşağıdadır:

    C:\Program Files (x86)\Windows Kits\10\Debuggers\x64

  2. Aşağıdaki komutu kullanarak hedef bilgisayarda bir çekirdek hata ayıklama oturumuna bağlanmak için WinDbg'yi başlatın. Bağlantı noktası ve anahtar değeri, hedef bilgisayarı sağlamak için kullandığınız değerle aynı olmalıdır. Dağıtım adımında kullandığımız değerler olan port için 50000 ve anahtar için 1.2.3.4 kullanırız. k bayrağı bunun bir çekirdek hata ayıklama oturumu olduğunu gösterir.

    WinDbg -k net:port=50000,key=1.2.3.4

  3. Hata Ayıklama menüsünde Boz veyaseçin. Ana bilgisayardaki hata ayıklayıcı, hedef bilgisayara müdahale eder. Hata Ayıklayıcısı Komut penceresinde, çekirdek hata ayıklama komut istemini görebilirsiniz: kd>.

  4. Bu noktada , kd> istemine komutlar girerek hata ayıklayıcıyla denemeler yapabilirsiniz. Örneğin, şu komutları deneyebilirsiniz:

  5. Hedef bilgisayarın tekrar çalışmasına izin vermek için, Hata Ayıkla menüsünden Git seçin veya "g" tuşuna basın, ardından "enter" tuşuna basın.

  6. Hata ayıklama oturumunu sonlandırmak için Hata Ayıklama menüsünden Debuggee'yi ayır seçin.

    Önemli

    Hata ayıklayıcıdan çıkmadan önce hedef bilgisayarın yeniden çalışmasına izin vermek için "git" komutunu kullandığınızdan emin olun veya hedef bilgisayar hala hata ayıklayıcıyla konuştuğundan fare ve klavye girişinize yanıt vermemeye devam eder.

Sürücü hata ayıklama işleminin ayrıntılı adım adım izlenecek yolu için bkz. Evrensel Sürücülerde Hata Ayıklama - Adım Adım Laboratuvar (Echo Kernel-Mode).

Uzaktan hata ayıklama hakkında daha fazla bilgi için bkz. WinDbg kullanarak uzaktan hata ayıklama .

Sürücü Modülü Çerçevesini (DMF) Kullanma

Driver Module Framework (DMF), WDF sürücü geliştiricisi için ek işlevsellik sağlayan bir WDF uzantısıdır. Geliştiricilerin her tür WDF sürücüsünü daha iyi ve hızlı yazmalarına yardımcı olur.

Çerçeve olarak DMF, DMF Modülleri olarak adlandırılan WDF nesnelerinin oluşturulmasına olanak tanır. Bu DMF Modüllerinin kodu farklı sürücüler arasında paylaşılabilir. Ayrıca DMF, sürücülerimiz için geliştirdiğimiz ve diğer sürücü geliştiricilerine değer sağlayacak DMF Modülleri kitaplığını paketlemektedir.

DMF, WDF'nin yerini almaz. DMF, WDF ile kullanılan ikinci bir çerçevedir. DMF kullanan geliştirici, cihaz sürücülerini yazmak için WDF'yi ve tüm temel öğelerini kullanmaya devam eder.

Daha fazla bilgi için bkz. Driver Module Framework (DMF).