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.
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 IRP'leri kullanır. Tüm PnP IP'leri IRP_MJ_PNPana işlev koduna sahiptir ve tüm PnP sürücülerinin bu işlev koduna hizmet vermek için bir DispatchPnP yordamı sağlaması gerekir. PnP yöneticisi, IRP gönderdiğinde Irp->IoStatus.Status'yi STATUS_NOT_SUPPORTED olarak başlatır. Daha fazla bilgi için bkz. DispatchPnP Yordamları.
PnP (Tak ve Çalıştır) küçük IRP'lerin listesi için bkz. Tak ve Çalıştır küçük IRP'ler.
Yığındaki bir sürücü IRP'yi başarısız etmediği sürece, bir cihazın tüm sürücüleri PnP IRP'sine yanıt verme fırsatına sahip olmalıdır. Aşağıdaki şekle bakın.
Hiçbir cihaz sürücüsü, PnP IRP'sine yanıt veren tek sürücü olduğunu varsayamaz. Örneğin, bir IRP_MN_QUERY_CAPABILITIES isteğine yanıt veren ve IRP'yi sonraki alt sürücüye geçirmeden tamamlayan bir işlev sürücüsü düşünün. Daha alt düzey sürücüler tarafından desteklenen özelliklerin hiçbiri, benzersiz bir örnek kimliği ya da üst veri yolu sürücüsü tarafından desteklenen güç yönetimi özellikleri gibi, rapor edilmiyor.
Üst veri yolu sürücüsü IoCompleteRequestçağırdığında ve G/Ç yöneticisi işlev sürücüsü veya filtre sürücüleri tarafından kaydedilen IoCompletion rutinlerini çalıştırdığında, bir PnP IRP cihaz yığını boyunca yukarı doğru hareket eder.
Bir işlev veya filtre sürücüsü PnP IRP'sini aldığında aşağıdakileri yapmalıdır:
- Sürücü IRP'ye yanıt olarak eylemler gerçekleştiriyorsa:
- Uygun eylemleri gerçekleştirin.
- Irp->IoStatus.Status STATUS_SUCCESS gibi uygun bir duruma ayarlayın. Uygun olduğu takdirde, IRP için Irp->IoStatus.Informationayarlayın.
- ile IoSkipCurrentIrpStackLocation veya ile IoCopyCurrentIrpStackLocationToNextkullanarak sonraki yığın konumunu ayarlayın. Sonuncu yordamı çağırın, eğer bir IoCompletion yordamı ayarladıysanız.
- Gerekirse bir IoCompletion rutin ayarlayın.
- IRP'yi tamamlamayın. (IoCompleteRequest çağırmayın.) Ana veri yolu sürücüsü IRP'yi tamamlayacaktır.
- Sürücü bu IRP için eylem gerçekleştirmezse, IRP'yi sonraki sürücüye geçirmeye hazırlanır:
- IRP'den yığın konumunu kaldırmak için IoSkipCurrentIrpStackLocation çağırın.
- Irp->IoStatusiçinde hiçbir alan ayarlamayın.
- IoCompletion yordamını ayarlamayın.
- IRP'yi tamamlamayın. (IoCompleteRequest çağırmayın.) Üst veri yolu sürücüsü IRP'yi tamamlar.
Bir işlev veya filtre sürücüsü IRP'yi başarısız olmadığında, IRP'yi IoCallDriverile bir sonraki alt sürücüye geçirir. Bir sürücünün sonraki alt sürücüye bir işaretçisi vardır; bu işaretçi, üstteki sürücünün AddDevice yordamındaki IoAttachDeviceToDeviceStack çağrısından döndürüldü.
Ana veri yolu sürücüsü, IRP'ye yanıt vermek için herhangi bir görev gerçekleştirdikten sonra IRP'yi tamamlar. Otobüs şoförü IoCompleteRequestçağırdıktan sonra, G/Ç yöneticisi, cihaz için işlev veya filtre sürücüleri tarafından kaydedilen IoCompletion rutinlerini çağırır.