Aracılığıyla paylaş


DDI kullanım kuralı kümesi (KMDF)

Sürücünüzün KMDF DDI'lerini doğru kullandığını doğrulamak için bu kuralları kullanın.

Bu bölümde

Konu Açıklama

BufAfterReqCompletedIoctl

BufAfterReqCompletedIoctl kuralı, EvtIoDeviceControl geri çağırma işlevinde G/Ç isteği tamamlandıktan sonra alınan G/Ç isteği arabelleğine erişilemeyeceğini belirtir.

BufAfterReqCompletedIntIoctl

BufAfterReqCompletedIntIoctl kuralı, istek tamamlandıktan sonra arabelleğe erişilemeyeceğini belirtir (yalnızca EvtIoInternalDeviceControl geri çağırma işlevinin içinde). Arabellek, WdfRequestRetrieveOutputBuffer, WdfRequestRetrieveUnsafeUserOutputBuffer, WdfRequestRetrieveInputBuffer veya WdfRequestRetrieveUnsafeUserInputBuffer fonksiyonlarından biri çağrılarak alınır.

BufAfterReqCompletedIntIoctlA

BufAfterReqCompletedIntIoctlA kuralı, istek tamamlandıktan sonra arabelleğe erişilemeyeceğini doğrular (yalnızca EvtIoInternalDeviceControl geri çağırma içinde). Arabellek, WdfRequestRetrieveInputBuffer veya WdfRequestRetrieveOutputBuffer veya WdfRequestRetrieveUnsafeUserInputBuffer veya WdfRequestRetrieveUnsafeUserOutputBuffer çağrıları yapılarak alındı.

BufAfterReqCompletedIoctlA

BufAfterReqCompletedIoctlA kuralı, EvtIoDeviceControl geri çağırma işlevinde G/Ç isteği tamamlandıktan sonra alınan G/Ç isteği arabelleğine erişilemeyeceğini belirtir.

BufAfterReqCompletedRead

BufAfterReqCompletedRead kuralı, EvtIoRead geri çağırma işlevinde G/Ç isteği tamamlandıktan sonra alınan G/Ç isteği arabelleğine erişilemeyeceğini belirtir. Olası arabellek erişim yöntemleri olarak kullanılan 14 DDI vardır.

BufAfterReqCompletedReadA

BufAfterReqCompletedReadA kuralı, EvtIoRead geri çağırma işlevinde G/Ç isteği tamamlandıktan sonra alınan G/Ç isteği arabelleğine erişilemeyeceğini belirtir. Olası arabellek erişim yöntemleri olarak kullanılan 14 DDI vardır.

BufAfterReqCompletedWrite

BufAfterReqCompletedWrite kuralı, EvtIoWrite geri çağırma işlevinde G/Ç isteği tamamlandıktan sonra alınan G/Ç isteği arabelleğine erişilemeyeceğini belirtir.

BufAfterReqCompletedWriteA

BufAfterReqCompletedWriteA kuralı, EvtIoWrite geri çağırma işlevinde G/Ç isteği tamamlandıktan sonra alınan G/Ç isteği arabelleğine erişilemeyeceğini belirtir.

ChildDeviceInitApi

ChildDeviceInitApi kuralı, bir alt cihaz için, sürücü alt cihaz nesnesi için WdfDeviceCreate yöntemini çağırmadan önce çerçeve cihaz nesnesi başlatma yöntemlerinin çağrılması gerektiğini belirtir.

Kontrol Cihazı Silindi

ControDeviceDeleted kuralı, bir PnP sürücüsü bir kontrol cihazı nesnesi oluşturursa, sürücü kaldırılmadan önce temizleme geri çağırma işlevlerinden birinde bu kontrol cihazı nesnesini silmesi gerektiğini belirtir.

ControlDeviceInitAPI

ControlDeviceInitAPI kuralı, denetim cihazı için WDFDEVICE_INIT bir yapı ayarlayan WdfControlDeviceInitAllocate ve diğer tüm cihaz nesne başlatma DDI'lerinin, denetim cihazı için WdfDeviceCreate öncesinde çağrılması gerektiğini belirtir.

CtlDeviceFinishInitDeviceAdd

CtlDeviceFinishInitDeviceAdd kuralı, bir sürücü EvtDriverDeviceAdd geri çağırma işlevinde denetim cihazı nesnesi oluşturursa, cihaz oluşturulduktan sonra ve EvtDriverDeviceAdd geri çağırma işlevinden çıkmadan önce WdfControlFinishInitializing'ı çağırması gerektiğini belirtir. Bu kural PnP olmayan sürücüler için geçerli değildir.

CtlDeviceFinishInitDrEntry

CtlDeviceFinishInitDrEntry kuralı, bir sürücü DriverEntry geri çağırma işlevinde bir denetim cihazı nesnesi oluşturursa, cihaz oluşturulduktan sonra ve EvtDriverDeviceAdd geri çağırma işlevinden çıkmadan önce WdfControlFinishInitializing'ı çağırması gerektiğini belirtir. Bu kural PnP olmayan sürücüler için geçerli değildir.

CihazOluşturmaBaşarısız

DeviceCreateFail kuralı, WdfDeviceCreate çağrısı başarısız olduğunda EVT_WDF_DRIVER_DEVICE_ADD hata durumunu döndürdüğünü belirtir.

DeviceInitAllocate

DeviceInitAllocate kuralı, bir PDO cihazı veya denetim cihazı nesnesi için, sürücü WdfDeviceCreate'ı çağırmadan önce WdfPdoInitAllocate veya WdfControlDeviceInitAllocate çerçeve cihaz nesnesi başlatma yöntemlerinin çağrılması gerektiğini belirtir.

DeviceInitAPI

Bir FDO cihazı için, sürücü cihaz nesnesi için WdfDeviceCreate yöntemini çağırmadan önce çerçeve cihaz nesnesi başlatma yöntemleri ve çerçeve FDO başlatma yöntemleri çağrılmalıdır.

DoubleDeviceInitFree

DoubleDeviceInitFree kuralı, sürücülerin cihaz başlatma yapısını iki kez boşaltmaması gerektiğini belirtir.

SürücüOluştur

DriverCreate kuralı, Çekirdek Modu Sürücü Çerçevesi (KMDF) kullanan bir sürücünün DriverEntry yordamı içinden bir çerçeve sürücüsü nesnesi oluşturmak için WdfDriverCreate yöntemini çağırması gerektiğini belirtir.

InitFreeDeviceCallback

InitFreeDeviceCallback kuralı, sürücü yeni bir çerçeve cihaz nesnesi başlatırken bir hatayla karşılaşırsa ve sürücü WdfControlDeviceInitAllocate çağrısından WDFDEVICE_INIT yapısını aldıysa WdfDeviceInitFree çağrısı yapması gerektiğini belirtir.

InitFreeDeviceCreate

InitFreeDeviceCreate kuralı, bir sürücünün WdfDeviceCreate yerine WdfDeviceInitFree çağrısı yapması gerektiğini belirtir. Cihaz nesnesi başlatma yöntemlerinden birinde hata oluşursa ve sürücü WdfControlDeviceInitAllocate çağrısından WDFDEVICE_INIT yapısını aldıysa.

InitFreeDeviceCreateType2

InitFreeDeviceCreateType2 kuralı, WdfDeviceInitFree'yi çağırdıktan sonra bir sürücünün WdfDeviceCreate çağrısı yapmaması gerektiğini belirtir.

InitFreeDeviceCreateType4

InitFreeDeviceCreateType4 kuralı, sürücü WdfDeviceCreate çağırırken bir hatayla karşılaşırsa ve sürücü WdfControlDeviceInitAllocate çağrısından WDFDEVICE_INIT yapısını aldıysa WdfDeviceInitFree çağrısı yapması gerektiğini belirtir.

InitFreeNull

InitFreeNull kuralı, parametre olarak PWDFDEVICE_INIT alan DDI'lerin WDFDEVICE_INIT yapısına yönelik NULL işaretçisi kullanılarak çağrılaamayacağını belirtir.

MdlAfterReqCompletedIntIoctl

MdlAfterReqCompletedIntIoctl kuralı , EvtIoInternalDeviceControl geri çağırma işlevinde G/Ç isteği tamamlandıktan sonra bellek tanımlayıcı listesine (MDL) erişilemeyeceğini belirtir.

MdlAfterReqCompletedIntIoctlA

MdlAfterReqCompletedIntIoctlA kuralı, EvtIoInternalDeviceControl geri çağırma işlevinde G/Ç isteği tamamlandıktan sonra bellek tanımlayıcı listesine (MDL) erişilemeyeceğini belirtir.

MdlAfterReqCompletedIoctl

MdlAfterReqCompletedIoctl kuralı, EvtIoDeviceControl geri çağırma işlevinde G/Ç isteği tamamlandıktan sonra bellek tanımlayıcı listesine (MDL) erişilemeyeceğini belirtir.

MdlAfterReqCompletedIoctlA

MdlAfterReqCompletedIoctlA kuralı, EvtIoDeviceControl geri çağırma işlevinde G/Ç isteği tamamlandıktan sonra bellek tanımlayıcı listesine (MDL) erişilemeyeceğini belirtir.

MdlAfterReqCompletedRead

MdlAfterReqCompletedRead kuralı, EvtIoRead geri çağırma işlevinde G/Ç isteği tamamlandıktan sonra alınan bellek tanımlayıcısı listesine (MDL) erişilemeyeceğini belirtir.

MdlAfterReqCompletedReadA

MdlAfterReqCompletedReadA kuralı, EvtIoRead geri çağırma işlevinde G/Ç isteği tamamlandıktan sonra alınan bellek tanımlayıcı listesi (MDL) nesnesine erişilemeyeceğini belirtir.

MdlAfterReqCompletedWrite

MdlAfterReqCompletedWrite kuralı, EvtIoWrite geri çağırma işlevinde G/Ç isteği tamamlandıktan sonra alınan bellek tanımlayıcısı listesine (MDL) erişilemeyeceğini belirtir.

MdlAfterReqCompletedWriteA

MdlAfterReqCompletedWriteA kuralı, EvtIoWrite geri çağırma işlevinde G/Ç isteği tamamlandıktan sonra alınan bellek tanımlayıcı listesine (MDL) erişilemeyeceğini belirtir.

MemAfterReqCompletedIntIoctl

MemAfterReqCompletedIntIoctl kuralı, EvtIoInternalDeviceControl geri çağırma işlevinde, G/Ç isteği tamamlandıktan sonra çerçeve bellek nesnesine erişilemeyeceğini belirtir.

MemAfterReqCompletedIntIoctlA

MemAfterReqCompletedIntIoctlA kuralı, EvtIoInternalDeviceControl geri çağırma işlevinde, G/Ç isteği tamamlandıktan sonra çerçeve bellek nesnesine erişilemeyeceğini belirtir.

MemAfterReqCompletedIoctl

MemAfterReqCompletedIoctl kuralı, EvtIoDeviceControl geri çağırma işlevinde, G/Ç isteği tamamlandıktan sonra çerçeve bellek nesnesine erişilemeyeceğini belirtir.

MemAfterReqCompletedIoctlA

MemAfterReqCompletedIoctlA kuralı, EvtIoDeviceControl geri çağırma işlevinde, G/Ç isteği tamamlandıktan sonra çerçeve bellek nesnesine erişilemeyeceğini belirtir.

MemAfterReqCompletedRead

MemAfterReqCompletedRead kuralı, EvtIoRead geri çağırma işlevinde, G/Ç isteği tamamlandıktan sonra çerçeve bellek nesnesine erişilemeyeceğini belirtir.

MemAfterReqCompletedReadA

MemAfterReqCompletedReadA kuralı, EvtIoRead geri çağırma işlevinde, G/Ç isteği tamamlandıktan sonra çerçeve bellek nesnesine erişilemeyeceğini belirtir.

MemAfterReqCompletedWrite

MemAfterReqCompletedWrite kuralı, EvtIoWrite geri çağırma işlevinde, G/Ç isteği tamamlandıktan sonra çerçeve bellek nesnesine erişilemeyeceğini belirtir.

MemAfterReqCompletedWriteA

MemAfterReqCompletedWriteA kuralı, EvtIoWrite geri çağırma işlevinde, G/Ç isteği tamamlandıktan sonra çerçeve bellek nesnesine erişilemeyeceğini belirtir.

NullCheck

NullCheck kuralı, sürücü kodunda bir NULL değerin daha sonra sürücüde dereference edilmediğini doğrular. Bu kural, bu koşullardan biri doğruysa bir hata bildirir:

  • Daha sonra başvurulan bir NULL ataması vardır.
  • Sürücüde, NULL olabilecek ve daha sonra değeri çözümlenecek bir yordam için global bir değişken/parametre vardır ve sürücüde işaretçinin ilk değerinin NULL olabileceğini belirten açık bir denetleme bulunmaktadır.

NullCheck kuralı ihlalleriyle, en ilgili kod deyimleri izleme ağacı bölmesinde vurgulanır. Rapor çıkışıyla çalışma hakkında daha fazla bilgi için bkz. Statik Sürücü Doğrulayıcı Raporu ve İzleme Görüntüleyicisi'ni Anlama.

PdoDeviceInitAPI

PdoDeviceInitAPI kuralı, sürücü PDO için WdfDeviceCreate'ı çağırmadan önce, fiziksel cihaz nesnesi (PDO) için WDFDEVICE_INIT yapısı ayarlayan WdfPdoInitAllocate ve diğer tüm cihaz nesnesi başlatma DDI'lerinin çağrılması gerektiğini belirtir.

PdoInitFreeDeviceCallback

PdoInitFreeDeviceCallback kuralı, sürücü herhangi bir çerçeve cihazı nesnesi başlatma işlevini çağırdığında bir hata oluşursa sürücünün WdfDeviceInitFree çağrısı yapması gerektiğini belirtir.

PdoInitFreeDeviceCreate

PdoInitFreeDeviceCreate kuralı, bir sürücünün WdfDeviceCreate yerine WdfDeviceInitFree çağrısı yapması gerektiğini belirtir. Cihaz nesnesi başlatma işlevlerinden birinde hata oluşursa ve sürücü WdfPdoInitAllocate çağrısından WDFDEVICE_INIT yapısını aldıysa.

PdoInitFreeDeviceCreateType2

PdoInitFreeDeviceCreateType2 kuralı, bir sürücünün WdfDeviceInitFree'yi çağırdıktan sonra WdfDeviceCreate çağrısı yapmaması gerektiğini belirtir.

PdoInitFreeDeviceCreateType4

PdoInitFreeDeviceCreateType4 kuralı, sürücü WdfDeviceCreate çağırdığında bir hata oluşursa sürücünün WdfDeviceInitFree çağrısı yapması gerektiğini belirtir.

ControlDeviceInitAllocate

ControlDeviceInitAllocate kuralı, bir denetim cihazı nesnesi için sürücünün WdfControlDeviceInitAllocate çerçeve cihaz nesnesi başlatma yöntemini çağırarak WdfDeviceCreate'ı çağırması gerektiğini belirtir.

InputBufferAPI

InputBufferAPI kuralı, EvtIoReadgeri çağırma işlevinde arabellek alma için doğru DDI'lerin kullanıldığını belirtir. EvtIoRead geri çağırma işlevinde arabellek okuma için aşağıdaki DDI'lere çağrı yapılamaz.

DDI kullanım kuralı kümesini seçmek için

  1. Microsoft Visual Studio'da sürücü projenizi (.vcxProj) seçin. Sürücüsü menüsünde tıklayın, Statik Sürücü Doğrulayıcıyı Başlat....

  2. Kurallar sekmesine tıklayın. Kural Kümeleri'nin altında DDIUsage'ı seçin.

    Visual Studio geliştirici komut istemi penceresinden varsayılan kural kümesini seçmek için /check seçeneğiyle DDIUsage.sdv belirtin. Örneğin:

    msbuild /t:sdv /p:Inputs="/check:DDIUsage.sdv" mydriver.VcxProj /p:Configuration="Win8 Release" /p:Platform=Win32
    

    Daha fazla bilgi için Sürücülerdeki Hataları Bulmak için Statik Sürücü Doğrulayıcı Kullanma ve Statik Sürücü Doğrulayıcı Komutları (MSBuild)bölümüne bakın.