Aracılığıyla paylaş


IRP Kaldırma Emrinin Ne Zaman Verileceğini Anlama

Aşağıdaki şekilde, bir cihazın sürücülerinin kaldırılmasıyla ilgili tipik IRP dizisi gösterilmektedir.

Tipik IRP kaldırma geçişlerini gösteren diyagram.

Aşağıdaki notlar, önceki şekildeki daire içine alınmış sayılara karşılık gelir:

  1. Sorguyu iptal et

    PnP yöneticisi, bir cihazın makineyi kesintiye uğratmadan kaldırılıp kaldırılamayacağını soran bir IRP_MN_QUERY_REMOVE_DEVICE yayımlar. Ayrıca, kullanıcı cihaz için sürücüleri güncelleştirme isteğinde bulunduğunda ve (Windows 2000 ve sonraki sürümlerde) Cihaz Yöneticisi cihazı devre dışı bırakdığında da bu IRP'yi gönderir. (Windows 98/Me'de, PnP yöneticisi bu durumda durdurma IRP'leri gönderir; ayrıntılar için bkz Cihazı Durdurma.)

    Cihaz yığınındaki tüm sürücüler STATUS_SUCCESS döndürürse, sürücüler cihazı kaldırma bekleme durumuna getirmiş olur. Bu durumda, sürücülerin cihazın kaldırılmasını engelleyen hiçbir işlem başlatmaması gerekir.

    Bu "temiz" kaldırma durumunda, PnP yöneticisi kaldırma IRP'sini göndermeden önce bir sorgu kaldırma IRP'sini gönderir. "Sürpriz" kaldırma açıklaması için 5. adıma bakın.

    Yukarıdaki diyagramda gösterilmese de, bir veri yolu sürücüsü başlatılmamış bir cihaz için bir IRP_MN_QUERY_REMOVE_DEVICE alabilir. Bu durum, kullanıcı makinede fiziksel olarak bulunan ancak devre dışı bırakılmış bir cihazı dinamik olarak kaldırmayı isterse oluşabilir.

  2. Başarılı sorgudan sonra kaldır

    PnP yöneticisi, bir cihazın sürücülerini kaldırmak için bir IRP_MN_REMOVE_DEVICE yayımlar.

    Sürücülerin bu isteği yerine getirmesi gerekir. Cihazın sürücüleri gerekli temizleme işlemlerini gerçekleştirir, cihaz yığınından ayrılır ve FDO'ları ve filtre DO'larını siler. Üst veri yolu sürücüsü, kullanıcı cihazı makineden fiziksel olarak kaldırana kadar PDO'yu korur.

    Sürücülerin IRP'yi kaldırmadan önce bir IRP_MN_STOP_DEVICE alabileceğini, ancak gerekli olmadığını unutmayın. Windows 2000 ve sonraki sürümlerde , IRP_MN_STOP_DEVICE yalnızca kaynağı yeniden dengelemek üzere bir cihazı duraklatmak için kullanılır; kaldırmaya yönelik bir adım değildir. Cihaz durdurulurken bir kullanıcı cihaz donanımını kaldırırsa, PnP yöneticisi durdurma IRP'sinden bir süre sonra bir kaldırma IRP'si gönderir, ancak durdurma, kaldırmanın bir önkoşulu değildir.

  3. Cihazı yeniden numaralandırma

    Sürücüler cihaz nesnelerini sildikten sonra cihaz yeniden numaralandırılırsa, PnP yöneticisi sürücülerin AddDevice yordamlarını çağırır ve cihazı yeniden devreye almak için bir IRP_MN_START_DEVICE verir. (Ayrıca PnP Perspektifi şeklindeki Cihaz Durumları'na da bakın.)

  4. Sorgu kaldırmayı iptal et

    PnP yöneticisi sorgu kaldırma isteğini iptal etmek için bir IRP_MN_CANCEL_REMOVE_DEVICE oluşturur.

    IRP_MN_CANCEL_REMOVE_DEVICE olduğunda, sürücüler cihazı başlatılmış durumuna döndürür.

  5. Sürpriz kaldırma (Windows 2000 ve sonraki Windows sürümleri)

    Windows 2000 ve sonraki sistemlerde, bir kullanıcı Donanımı Çıkar veya Çıkar programını kullanmadan cihazı makineden çıkarırsa PnP yöneticisi IRP_MN_SURPRISE_REMOVAL bir IRP gönderir.

    Sürücüler önceden uyarı almadığından bu durum "sürpriz" kaldırma olarak adlandırılır.

    IRP_MN_SURPRISE_REMOVAL IRP'ye yanıt olarak, cihazın sürücüleri tamamlanmamış G/Ç işlemlerini sonlandırır ve cihaz tarafından kullanılan donanım kaynaklarını serbest bırakır. Sürücüler, artık mevcut olmadığından hiçbir bileşenin cihaza erişmeye çalışmadığından emin olmalıdır.

    Tüm sürücülerin bir IRP_MN_SURPRISE_REMOVAL IRP işlemesi ve durumu STATUS_SUCCESS olarak ayarlaması gerekir.

    Bir IRP_MN_SURPRISE_REMOVAL iptal edilemez.

  6. Sürpriz kaldırma işleminden sonra kaldırma işlemi yap (Windows 2000 ve sonraki Windows sürümleri)

    Cihaz için tüm açık tanıtıcılar kapatıldığında, PnP yöneticisi cihazın sürücülerine bir IRP_MN_REMOVE_DEVICE isteği gönderir. Her sürücü, cihaz yığınından ayrılır ve cihaz nesnesini siler.

  7. Sürpriz kaldırma (Windows 98/Me)

    Windows 98/Me'de, bir cihaz uyarı olmadan kaldırıldığında sürücü IRP_MN_SURPRISE_REMOVAL almaz. PnP yöneticisi yalnızca bir IRP_MN_REMOVE_DEVICE gönderir. WDM sürücülerinde, hem bir IRP_MN_SURPRISE_REMOVAL hem de bunu takip eden bir IRP_MN_REMOVE_DEVICE (sürpriz kaldırma için Windows 2000 ve üzeri davranış) ve ayrıca önceki bir sürpriz kaldırma IRP'si olmaksızın bir IRP_MN_REMOVE_DEVICE (Windows 98/Me davranışı) işlemi için kod bulunmalıdır.

  8. Başarısız bir başlangıçtan sonra kaldır (Windows 2000 ve üzeri)

    Bir cihazın sürücülerinden biri IRP_MN_START_DEVICE başarısız olursa, PnP yöneticisi cihaz yığınına bir IRP_MN_REMOVE_DEVICE isteği gönderir. Böyle bir kaldırma IRP'si, cihaz için tüm sürücülerin cihazın başarıyla başlatılmadığının bildirilmesini sağlar. IRP_MN_REMOVE_DEVICE IRP'ye yanıt olarak, cihazın sürücüleri başlatma işlemlerini geri alır (IRP'yi başlatmayı başarırlarsa) ve AddDevice işlemlerini geri alır. PnP yöneticisi böyle bir cihazı "başarısız başlangıç" olarak işaretler.

    Bu davranış yalnızca Windows 2000 ve üzeri platformlar için geçerlidir. Windows 98/Me'de PnP yöneticisi başarısız bir başlatmaya yanıt olarak bir IRP_MN_STOP_DEVICE gönderir.

PnP cihazının sürücüsü, tipik IRP çıkarma geçişlerini gösteren şekilden daha fazla durumda bir IRP_MN_SURPRISE_REMOVAL alabilir. Örneğin, kullanıcı makineye bilgisayar kartı takabilir ve cihaz başlatılmadan önce kartı kaldırabilir. Bu durumda PnP yöneticisi, sürücülerin AddDevice yordamları çağrıldıktan sonra ancak IRP_MN_START_DEVICE isteği göndermeden önce bir sürpriz kaldırma IRP'si oluşturur. Bir PnP cihazının sürücüsü, sürücünün AddDevice yordamı çağrıldıktan sonra herhangi bir zamanda IRP'leri kaldırma işlemlerine karşı hazırlıklı olmalıdır.