Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Sürücünün DispatchPnP yordamı, IRP_MJ_PNP G/Ç işlev kodu için IRP'leri işleyerek Tak Çalıştır'ı destekler. IRP_MJ_PNP işlev koduyla ilişkilendirilmiş olan ve bazıları tüm sürücüler tarafından işlenmesi gereken, bazıları ise isteğe bağlı olarak işlenebilen birkaç küçük G/Ç işlev kodu vardır (bkz. Tak ve Çalıştır Alt IRP'leri). PnP yöneticisi, sürücüleri cihazları başlatmaya, durdurmaya ve kaldırmaya ve sürücüleri cihazları hakkında sorgulamaya yönlendirmek için bu küçük işlev kodlarını kullanır.
Cihaz için, bir işlev veya filtre sürücüsünün IRP'yi reddetmesine izin verilen birkaç durum dışında, tüm sürücülerin PnP IRP'lerini işleme fırsatına sahip olması gerekir.
Her sürücünün DispatchPnP yordamı şu kurallara uymalıdır:
İşlev veya filtre sürücüsü IRP'yi işlemediği ve bir hatayla karşılaşmadığı sürece (örneğin, yetersiz kaynaklardan dolayı) bir işlev veya filtre sürücüsünün PnP IRP'lerini cihaz yığınındaki bir sonraki sürücüye geçirmesi gerekir.
Sürücülerden biri hatayla karşılaşmadığı sürece bir cihazın tüm sürücüleri, cihaz için PnP IP'lerini işleme fırsatına sahip olmalıdır. PnP yöneticisi IRP'leri bir cihaz yığınındaki en üst sürücüye gönderir. İşlev ve filtre sürücüleri IRP'yi bir sonraki sürücüye geçirir ve ana veri yolu sürücüsü IRP'yi tamamlar. Daha fazla bilgi için bkz. PnP IRP'lerini Cihaz Yığınından Aşağı Geçirme .
Bir sürücü, IRP'yi işlemeye çalışırsa ve bir hatayla (yetersiz kaynaklar gibi) karşılaşırsa IRP'de başarısız olabilir. Bir sürücü, işleyemediği bir kod içeren bir IRP alırsa, IRP'yi başarısız kılmamalıdır. Bu tür bir IRP'yi, durumunu değiştirmeden, sonraki sürücüye geçirmelidir.
Bir sürücü belirli PnP IP'lerini işlemelidir ve isteğe bağlı olarak diğerlerini işleyebilir.
Her PnP sürücüsü, IRP_MN_REMOVE_DEVICE gibi belirli IP'leri işlemek için gereklidir ve isteğe bağlı olarak diğerlerini işleyebilir. Her sürücü türü (işlev sürücüleri, filtre sürücüleri ve veri yolu sürücüleri) için hangi IRP'lerin gerekli ve isteğe bağlı olduğunu öğrenmek için Tak ve Çalıştır Küçük IRP'ler bölümüne bakın.
Bir sürücü gerekli bir PnP IRP'sini uygun bir hata durumuyla başarısız olabilir, ancak bir sürücü bu tür bir IRP için STATUS_NOT_SUPPORTED döndürmemelidir.
Bir sürücü bir PnP IRP'sini başarıyla işlerse, sürücü IRP durumunu başarılı olarak ayarlar. Durumu ayarlamak için yığındaki başka bir sürücüye bağımlı değildir.
Bir sürücü, PnP yöneticisine sürücünün IRP'yi başarıyla işlediğini bildirmek için Irp-IoStatus.Status> değerini STATUS_SUCCESS olarak ayarlar. Bazı IRP'ler için, veri yolu dışı bir sürücü, durumu başarıyla ayarlamak için üst veri yolu sürücüsüne güvenebilir. Ancak bu riskli bir uygulamadır. Tutarlılık ve sağlamlık için, bir sürücünün başarıyla işlediği her PnP IRP için IRP durumunu başarılı olarak ayarlaması gerekir.
Bir sürücü IRP'yi başarısız olursa, sürücü IRP'yi bir hata durumuyla tamamlar ve IRP'yi bir sonraki sürücüye geçirmez.
IRP_MN_QUERY_STOP_DEVICE gibi bir IRP'nin başarısız olması için bir sürücü Irp-IoStatus.Status> değerini STATUS_UNSUCCESSFUL olarak ayarlar. Diğer IRP'ler için ek hata durumu değerleri STATUS_INSUFFICIENT_RESOURCES ve STATUS_INVALID_DEVICE_STATE içerir.
Sürücüler, işledikleri IP'ler için STATUS_NOT_SUPPORTED ayarlamaz. Bu, PnP yöneticisi tarafından ayarlanan ilk durumdur. Bir IRP bu durumla tamamlanırsa, yığındaki hiçbir sürücünün IRP'yi işlemediğini gösterir; tüm sürücüler IRP'yi bir sonraki sürücüye geçti.
Bir sürücü, bir PnP IRP'sini dağıtım yordamında (IRP'nin cihaz yığınının aşağısına doğru), IoCompletion yordamında (IRP'nin cihaz yığınına geri dönme yolunda) veya her ikisini de IRP başvuru sayfasında belirtildiği şekilde işlemelidir.
IRP_MN_REMOVE_DEVICE gibi bazı PnP IRP'leri önce cihaz yığınının üst kısmındaki sürücü tarafından, sonra da sonraki her alt sürücü tarafından işlenmelidir. IRP_MN_START_DEVICE gibi diğerlerinin önce ebeveyn veri yolu sürücüsü tarafından işlenmesi gerekir. Yine de IRP_MN_QUERY_CAPABILITIES gibi diğerleri hem cihaz yığını boyunca aşağı inip yukarı çıkarken işlenebilir. PnP IRP'lerine uygulanan kurallar için bkz. Tak Çalıştır Daha Küçük IRP'ler. Öncelikle üst veri yolu sürücüsü tarafından işlenmesi gereken PnP IRP'leri nasıl ele alınacağı hakkında bilgi için, Alt Sürücüler İşlemlerini Tamamlayana Kadar PnP IRP İşlemesini Erteleme bölümüne bakın.
Bir sürücü, IRP'nin cihaz yığınının aşağısına doğru hareketinde IRP'ye bilgi eklemeli ve cihaz yığınına geri dönerken İRP'deki bilgileri değiştirmeli veya kaldırmalıdır.
Bir PnP sorgusu IRP'sine yanıt olarak bilgi döndürürken, bir sürücünün bir cihaz için katmanlı sürücüler tarafından geçen düzenli bilgileri etkinleştirmek için bu kuralı izlemesi gerekir.
Açıkça belgelendiği durumlar dışında, bir sürücü PnP IRP'lerinin belirli bir sırada gönderilmesine bağımlı olmamalıdır.
Bir sürücü bir PnP IRP gönderdiğinde, IRP'yi cihaz yığınındaki en üst sürücüye göndermelidir.
PnP IRP'lerinin çoğu PnP yöneticisi tarafından gönderilir, ancak bazıları sürücüler tarafından gönderilebilir (örneğin, IRP_MN_QUERY_INTERFACE). Bir sürücü, cihaz yığınının üst kısmındaki sürücüye bir PnP IRP göndermelidir. Cihaz yığınının en üstündeki sürücünün cihaz nesnesine bir işaretçi elde etmek için IoGetAttachedDeviceReference'ı çağırın.