Windows Vista Service Pack 1 (SP1) desteği 12 Temmuz 2011'de sona erer. Windows güvenlik güncelleştirmelerini almaya devam etmek için Windows Vista Service Pack 2'yi (SP2) çalıştırdığınızdan emin olun. Daha fazla bilgi için bu Microsoft web sayfasına bakın: Bazı Windows sürümleri için destek sona eriyor.

Kaynak: Microsoft Desteği

HIZLI YAYINLAMA

HıZLı YAYıMLAMA MAKALELERI DOĞRUDAN MICROSOFT DESTEK KURULUŞUNDAN BILGI SAĞLAR. BURADA YER ALAN BILGILER, ORTAYA ÇıKAN VEYA BENZERSIZ KONULARA YANıT OLARAK OLUŞTURULUR VEYA DIĞER BILGI BANKASı BILGILERINE EK OLARAK TASARLANMıŞTıR.

Belirti

Şu anda Boşta olan bir USB cihazını devre dışı bıraktığınızda, mavi ekranda "0x44 Durdur" hata iletisi alabilirsiniz. Bu hata iletisi aşağıdakine benzer: STOP 0x00000044 ( parametre1 , parametre2 , parametre3 , parametre4 ) MULTIPLE_IRP_COMPLETE_REQUESTS

Neden

USB cihazı Çekirdek Modu Sürücü Çerçevesi (KMDF) 1.7 veya önceki bir sürümü kullanılarak yazılmış bir sürücü kullanıyorsa bu sorun oluşabilir.Usb cihazı Boşta (USB Seçmeli Askıya Alma) durumundayken ve cihaz devre dışı bırakıldığında (örneğin, Aygıt Yöneticisi'da cihaza sağ tıklayıp Devre Dışı Bırak'a tıklayarak) sorun oluşur.Bu koşullar altında, KMDF çerçevesi sürüm 1.7 (veya öncesi) USB Seçmeli Askıya Alma Irp'lerinin tamamlanmasını beklemez, böylece USB Seçmeli Askıya Alma Irp'leri tamamlanmadan önce cihaz yığınının kaldırılmasına izin verir (örneğin, Usbhub sürücüsü tarafından).

Çözüm

Bu sorun Çekirdek Modu Sürücü Çerçevesi (KMDF) sürüm 1.9 ve sonraki sürümlerde çözülür.  Çekirdek Modu Sürücü Çerçevesi (KMDF) sürüm 1.9, Windows Sürücü Seti'nin (WDK) Windows 7 sürümünde kullanılabilir.KMDF tabanlı bir USB cihaz sürücüsü geliştiricisi aşağıdaki eylemleri gerçekleştirerek bu sorunu geçici olarak çözebilir:

  1. Sürücünün EvtDriverDeviceAdd geri çağırma yordamına bir EvtDeviceReleaseHardware geri çağırma yordamı kaydedin.

  2. Sürücünün EvtDriverDeviceAdd geri çağırma yordamında bir WDFWORKITEM nesnesi ayırın.

  3. Bir KEVENT nesnesi ayırıp başlatın, sürücünün EvtDeviceReleaseHardware geri çağırma yordamındaki iş öğesini kuyruğa alın, bu olayı Context parametresi olarak geçirin ve olayın sinyallemesini bekleyin.

  4. İş öğesi geri çağırma yordamında, iş parçacığını yaklaşık 2 saniye geciktirin ve ardından olayı ayarlayın.  Gereken tam gecikme değeri sistemler arasında farklılık gösterebilir ve son uygulamadan önce test edilmelidir.

Açıklanan geçici çözümün iki ana etkisi vardır:

  • İş öğesi kuyruğu bu iş öğesine kadar boşaltılana kadar cihaz yığınının yıkılmasında gecikmeye yardımcı olan bir iş öğesini kuyruğa alır (ÇÜNKÜ USB çekirdek yığını bir iş öğesi aracılığıyla USB Seçmeli Askıya Alma Irp'sini tamamlayabilir).

  • USB çekirdek yığınının iş öğesinin ve sürücünün iş öğesinin çok işlemcili/çok çekirdekli sistemlerde aynı anda yürütülmesi durumunda bir gecikmeye neden olur.

NOT: Bu kapsamlı bir çözüm değildir.  Yalnızca sorunun azaltılmasına yardımcı olur.

Ek Bilgi

Aşağıdaki örnek kod parçacıkları şu geçici çözümün nasıl uygulandığını göstermektedir: EvtDriverDeviceAdd( IN WDFDRIVER Driver, IN PWDFDEVICE_INIT DeviceInit ) { PWORKER_ITEM_CONTEXT bağlam;    WDF_OBJECT_ATTRIBUTES öznitelikleri;    WDF_WORKITEM_CONFIG workitemConfig;    WDFWORKITEM workItem;    ...    // Set EvtDeviceReleaseHardware callback // ...    pnpPowerCallbacks.EvtDeviceReleaseHardware = EvtDeviceReleaseHardware;    WdfDeviceInitSetPnpPowerEventCallbacks(DeviceInit, &pnpPowerCallbacks);    ...    // WDFWORKITEM // WDF_OBJECT_ATTRIBUTES_INIT(&özniteliklerini ayırma);    WDF_OBJECT_ATTRIBUTES_SET_CONTEXT_TYPE(&öznitelikleri,WORKER_ITEM_CONTEXT);    Öznitelik. ParentObject = cihaz;    WDF_WORKITEM_CONFIG_INIT(&workitemConfig, EvtWorkItem);    status = WdfWorkItemCreate(&workitemConfig, &öznitelikleri, &workItem);    if (! NT_SUCCESS(durum)) { dönüş durumu;    } devContext->WorkItem = workItem;    ...}NTSTATUSEvtDeviceReleaseHardware( IN WDFDEVICE Device, IN WDFCMRESLIST ResourcesTranslated ){ KEVENT olayı;    bağlamı PWORKER_ITEM_CONTEXT;    WDFWORKITEM workItem;     UNREFERENCED_PARAMETER(Kaynaklar Çevrildi);    workItem = GetDeviceContext(Device)->WorkItem;    context = GetWorkItemContext(workItem);        KeInitializeEvent(&olayı, NotificationEvent, FALSE);    context->Olayı = &olay;    // Workitem // WdfWorkItemEnqueue(workItem) kuyruğuna alın;      // Workitem'in // KeWaitForSingleObject(&olayı, Executive, KernelMode, FALSE, NULL) olayını işaretlemesini bekleyin;    return STATUS_SUCCESS;}VOIDEvtWorkItem( IN WDFWORKITEM WorkItem ){ PWORKER_ITEM_CONTEXT bağlam;    LARGE_INTEGER aralığı;    context = GetWorkItemContext(WorkItem);    // İş parçacığını 2 saniye // aralığı boyunca geciktirin. QuadPart = -2 * 10 * 1000 * 1000;    KeDelayExecutionThread(KernelMode, FALSE, &interval);    // bekleyen iş parçacığını işaretle // KeSetEvent(context->Event, IO_NO_INCREMENT, FALSE);    context->Olayı = NULL;}üst bilgi dosyatürü tanımı yapısı _WORKER_ITEM_CONTEXT { PKEVENT Olayı;} WORKER_ITEM_CONTEXT, * PWORKER_ITEM_CONTEXT;WDF_DECLARE_CONTEXT_TYPE_WITH_NAME(WORKER_ITEM_CONTEXT, GetWorkItemContext)EVT_WDF_DEVICE_RELEASE_HARDWARE EvtDeviceReleaseHardware;EVT_WDF_WORKITEM EvtWorkItem;     

REDDİ

MICROSOFT VE/VEYA TEDARİkÇİLerİ, BU WEB SİTESİNDE YAYIMLANAN BELGELERDE VE İlGİlİ GRAFİkLERDE ("MALZEMELER") YER ALAN BİlGİLerİN UYGUNLUK, GÜVENİlİRLİĞİ VEYA DOĞRULUĞU HAKKINDA HIÇBIR AMAÇ İÇİN BEYAN VEYA GARANTİ YAPMAZ. MALZEMELER TEKNIK HATALAR VEYA TIPOGRAFIK HATALAR IÇEREBILIR VE HERHANGI BIR ZAMANDA BILDIRIMDE BULUNMAKSıZıN DÜZELTILEBILIR.YÜRÜRLÜKTEKİ YASALARIN İzİn VERDİLERİ EN BÜYÜK ÖLÇÜDE, MICROSOFT VE/VEYA TEDARİkÇİLerİ, ETKİnLİkLER, GARANTİLER VEYA UNVAN, İHLAL OLMAMA, TATMIN EDICI KOŞUL VEYA KALİTE, SATILAMA VE ÖZEL BİR AMACA UYGUNLUK DAHİl ANCAK BUNLARLA SıNıRLı OLMAMAK ÜZERE, ÖRTÜK, ÖRTÜK VEYA YASAL TÜM BEYANLAR, GARANTİLER VE KOŞULLARI MATERYALLERLE İlGİlİ OLARAK REDDEDER VE DıŞLAR.

Daha fazla yardıma mı ihtiyacınız var?

Daha fazla seçenek mi istiyorsunuz?

Abonelik avantajlarını keşfedin, eğitim kurslarına göz atın, cihazınızın güvenliğini nasıl sağlayacağınızı öğrenin ve daha fazlasını yapın.