Η υποστήριξη για τα Windows Vista Service Pack 1 (SP1) λήγει στις 12 Ιουλίου 2011. Για να συνεχίσετε να λαμβάνετε ενημερώσεις ασφαλείας για τα Windows, βεβαιωθείτε ότι χρησιμοποιείτε τα Windows Vista με Service Pack 2 (SP2). Για περισσότερες πληροφορίες, ανατρέξτε σε αυτήν την ιστοσελίδα της Microsoft: Η υποστήριξη λήγει για ορισμένες εκδόσεις των Windows.
Πηγή: Υποστήριξη της Microsoft
ΡΑΓΔΑΊΑ ΔΗΜΟΣΊΕΥΣΗ
ΤΑ ΆΡΘΡΑ ΤΑΧΕΊΑς ΔΗΜΟΣΊΕΥΣΗς ΠΑΡΈΧΟΥΝ ΠΛΗΡΟΦΟΡΊΕς ΑΠΕΥΘΕΊΑς ΑΠΌ ΤΟΝ ΟΡΓΑΝΙΣΜΌ ΥΠΟΣΤΉΡΙΞΗς ΤΗς MICROSOFT. ΟΙ ΠΛΗΡΟΦΟΡΊΕς ΠΟΥ ΠΕΡΙΈΧΟΝΤΑΙ ΣΤΟ ΠΑΡΌΝ ΔΗΜΙΟΥΡΓΟΎΝΤΑΙ Ως ΑΠΆΝΤΗΣΗ ΣΕ ΑΝΑΔΥΌΜΕΝΑ Ή ΜΟΝΑΔΙΚΆ ΘΈΜΑΤΑ Ή ΠΡΟΟΡΊΖΟΝΤΑΙ ΣΥΜΠΛΗΡΩΜΑΤΙΚΆ ΜΕ ΆΛΛΕς ΠΛΗΡΟΦΟΡΊΕς ΤΗς ΓΝΩΣΙΑΚΉς ΒΆΣΗς.
Σύμπτωμα
Όταν απενεργοποιείτε μια συσκευή USB που βρίσκεται σε αδράνεια, ενδέχεται να εμφανιστεί το μήνυμα σφάλματος "Διακοπή 0x44" σε μπλε οθόνη. Αυτό το μήνυμα σφάλματος μοιάζει με το εξής: STOP 0x00000044 ( παράμετρος1 , παράμετρος2 , παράμετρος3 , παράμετρος4 ) MULTIPLE_IRP_COMPLETE_REQUESTS
Αιτία
Αυτό το πρόβλημα μπορεί να παρουσιαστεί, αν η συσκευή USB χρησιμοποιεί ένα πρόγραμμα οδήγησης που έχει δημιουργηθεί με χρήση του Προγράμματος οδήγησης λειτουργίας πυρήνα (KMDF) έκδοση 1.7 ή παλαιότερη.Το πρόβλημα παρουσιάζεται όταν η συσκευή USB βρίσκεται σε κατάσταση αδράνειας (επιλεκτικής αναστολής USB) και η συσκευή απενεργοποιείται στη συνέχεια (για παράδειγμα, κάνοντας δεξί κλικ στη συσκευή στο Διαχείριση Συσκευών και κάνοντας κλικ στην επιλογή Απενεργοποίηση).Υπό αυτές τις συνθήκες, το KMDF framework έκδοση 1.7 (ή παλαιότερη) δεν περιμένει να ολοκληρωθούν οι υπηρεσίες επιλεκτικής αναστολής USB, επιτρέποντας έτσι την κατάργηση της στοίβας συσκευών πριν από την ολοκλήρωση της υπηρεσίας USB Selective Suspend Irp (π.χ., από το πρόγραμμα οδήγησης Usbhub).
Επίλυση
Αυτό το πρόβλημα επιλύεται στην έκδοση 1.9 και στις νεότερες εκδόσεις του Προγράμματος οδήγησης λειτουργίας πυρήνα (KMDF). Το Kernel Mode Driver Framework (KMDF) έκδοση 1.9 είναι διαθέσιμο στην έκδοση Windows 7 του Windows Driver Kit (WDK).Ένας προγραμματιστής προγράμματος οδήγησης συσκευών USB που βασίζεται σε KMDF μπορεί να επιλύσει αυτό το πρόβλημα εκτελώντας τις ακόλουθες ενέργειες:
-
Καταχωρήστε μια ρουτίνα επιστροφής κλήσης EvtDeviceReleaseHardware στη ρουτίνα επιστροφής κλήσης EvtDriverDeviceAdd του προγράμματος οδήγησης.
-
Εκχώρηση αντικειμένου WDFWORKITEM στη ρουτίνα επιστροφής κλήσης EvtDriverDevice του προγράμματος οδήγησης.
-
Εκχωρήστε και αρχικοποιήστε ένα αντικείμενο KEVENT, τοποθετήστε το στοιχείο εργασίας στην ουρά στη ρουτίνα επιστροφής κλήσεων EvtDeviceReleaseHardware του προγράμματος οδήγησης, μεταβιβάζοντας αυτό το συμβάν ως παράμετρο περιβάλλοντος και περιμένετε να γίνει σήμα για το συμβάν.
-
Στη ρουτίνα επιστροφής κλήσης στοιχείου εργασίας, καθυστερήστε το νήμα κατά περίπου 2 δευτερόλεπτα και, στη συνέχεια, ορίστε το συμβάν. Η ακριβής τιμή καθυστέρησης που απαιτείται μπορεί να διαφέρει μεταξύ των συστημάτων και θα πρέπει να ελεγχθεί πριν από την τελική υλοποίηση.
Η λύση που περιγράφεται έχει δύο κύρια εφέ:
-
Τοποθετήστε ένα στοιχείο εργασίας σε ουρά, το οποίο βοηθά στην καθυστέρηση της διακοπής της στοίβας συσκευών μέχρι να εξαντληθεί η ουρά στοιχείων εργασίας μέχρι αυτό το στοιχείο εργασίας (καθώς η στοίβα πυρήνα USB μπορεί να ολοκληρώσει την υπηρεσία USB Selective Suspend Irp μέσω ενός στοιχείου εργασίας).
-
Εισάγει μια καθυστέρηση σε περίπτωση που το στοιχείο εργασίας του πυρήνα USB και το στοιχείο εργασίας του προγράμματος οδήγησης εκτελούνται ταυτόχρονα σε συστήματα πολλαπλών επεξεργαστών/πολλαπλών πυρήνων.
ΣΗΜΕΙΩΣΗ: Δεν πρόκειται για ολοκληρωμένη λύση. Βοηθά μόνο στον μετριασμό του προβλήματος.
Περισσότερες πληροφορίες
Τα παρακάτω δείγματα τμημάτων κώδικα δείχνουν πώς μπορείτε να εφαρμόσετε αυτή τη λύση:EvtDriverDeviceAdd( IN WDFDRIVER Driver, IN PWDFDEVICE_INIT DeviceInit ) { PWORKER_ITEM_CONTEXT περιβάλλον. χαρακτηριστικά WDF_OBJECT_ATTRIBUTES, WDF_WORKITEM_CONFIG workitemConfig, WorkItem WDFWORKITEM; ... // Set EvtDeviceReleaseHardware callback // ... pnpPowerCallbacks.EvtDeviceReleaseHardware = EvtDeviceReleaseHardware; WdfDeviceInitSetPnpPowerEventCallbacks(DeviceInit, &pnpPowerCallbacks) ... // Allocate WDFWORKITEM // WDF_OBJECT_ATTRIBUTES_INIT(χαρακτηριστικά &); WDF_OBJECT_ATTRIBUTES_SET_CONTEXT_TYPE(χαρακτηριστικά &;WORKER_ITEM_CONTEXT); Χαρακτηριστικά. ParentObject = συσκευή, WDF_WORKITEM_CONFIG_INIT(&workitemConfig, EvtWorkItem) status = WdfWorkItemCreate(&workitemConfig, &χαρακτηριστικά, &workItem). if (! NT_SUCCESS(κατάσταση)) { κατάσταση επιστροφής; } devContext->WorkItem = workItem; ...}NTSTATUSEvtDeviceReleaseHardware( IN WDFDEVICE Device, IN WDFCMRESLIST ResourcesTranslated ){ KEVENT event; PWORKER_ITEM_CONTEXT πλαίσιο, WorkItem WDFWORKITEM; UNREFERENCED_PARAMETER(ΠόροιΜεταφρασμένοι); workItem = GetDeviceContext(Device)->WorkItem; context = GetWorkItemContext(workItem) KeInitializeEvent(συμβάν &, NotificationEvent, FALSE). Συμβάν >περιβάλλοντος = συμβάν &. // Ουρά του στοιχείου εργασίας // WdfWorkItemEnqueue(workItem). // Περιμένετε να εμφανιστεί ένα μήνυμα για το συμβάν // KeWaitForSingleObject(συμβάν &, Executive, KernelMode, FALSE, NULL). επιστροφή STATUS_SUCCESS;}VOIDEvtWorkItem( IN WDFWORKITEM WorkItem ){ PWORKER_ITEM_CONTEXT περιβάλλον; LARGE_INTEGER χρονικό διάστημα, context = GetWorkItemContext(WorkItem) // Καθυστερήστε το νήμα για διάστημα 2 δευτερολέπτων // διαστήματος. QuadPart = -2 * 10 * 1000 * 1000. KeDelayExecutionThread(KernelMode, FALSE, &διάστημα) // σηματοδότηση του νήματος αναμονής // KeSetEvent(συμβάν >περιβάλλοντος, IO_NO_INCREMENT, FALSE). Συμβάν >περιβάλλοντος = NULL;}in header filetypedef struct _WORKER_ITEM_CONTEXT { PKEVENT Event;} 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;
ΑΠΟΠΟΊΗΣΗ
Η MICROSOFT Ή/ΚΑΙ ΟΙ ΠΡΟΜΗΘΕΥΤΈς ΤΗς ΔΕΝ ΠΡΟΒΑΊΝΟΥΝ ΣΕ ΚΑΜΊΑ ΔΉΛΩΣΗ Ή ΕΓΓΎΗΣΗ ΣΧΕΤΙΚΆ ΜΕ ΤΗΝ ΚΑΤΑΛΛΗΛΌΤΗΤΑ, ΤΗΝ ΑΞΙΟΠΙΣΤΊΑ Ή ΤΗΝ ΑΚΡΊΒΕΙΑ ΤΩΝ ΠΛΗΡΟΦΟΡΙΏΝ ΠΟΥ ΠΕΡΙΈΧΟΝΤΑΙ ΣΤΑ ΈΓΓΡΑΦΑ ΚΑΙ ΤΑ ΣΧΕΤΙΚΆ ΓΡΑΦΙΚΆ ΠΟΥ ΔΗΜΟΣΙΕΎΟΝΤΑΙ ΣΤΗΝ ΠΑΡΟΎΣΑ ΤΟΠΟΘΕΣΊΑ WEB (ΤΟ "ΥΛΙΚΌ") ΓΙΑ ΟΠΟΙΟΝΔΉΠΟΤΕ ΣΚΟΠΌ. ΤΟ ΥΛΙΚΌ ΜΠΟΡΕΊ ΝΑ ΠΕΡΙΛΑΜΒΆΝΕΙ ΤΕΧΝΙΚΈς ΑΝΑΚΡΊΒΕΙΕς Ή ΤΥΠΟΓΡΑΦΙΚΆ ΛΆΘΗ ΚΑΙ ΜΠΟΡΕΊ ΝΑ ΑΝΑΘΕΩΡΗΘΕΊ ΑΝΆ ΠΆΣΑ ΣΤΙΓΜΉ ΧΩΡΊς ΠΡΟΕΙΔΟΠΟΊΗΣΗ.ΣΤΟ ΜΈΓΙΣΤΟ ΒΑΘΜΌ ΠΟΥ ΕΠΙΤΡΈΠΕΤΑΙ ΑΠΌ ΤΟ ΕΦΑΡΜΟΣΤΈΟ ΔΊΚΑΙΟ, Η MICROSOFT Ή/ΚΑΙ ΟΙ ΠΡΟΜΗΘΕΥΤΈς ΤΗς ΑΠΟΠΟΙΟΎΝ ΚΑΙ ΑΠΟΚΛΕΊΟΥΝ ΌΛΕς ΤΙς ΠΑΡΑΣΤΆΣΕΙς, ΤΙς ΕΓΓΥΉΣΕΙς ΚΑΙ ΤΟΥς ΌΡΟΥς, ΕΊΤΕ ΡΗΤΈς, ΣΙΩΠΗΡΈς Ή ΝΌΜΙΜΕς, ΣΥΜΠΕΡΙΛΑΜΒΑΝΟΜΈΝΩΝ, ΕΝΔΕΙΚΤΙΚΆ, ΤΩΝ ΠΑΡΑΣΤΆΣΕΙς, ΤΩΝ ΕΓΓΥΉΣΕΩΝ Ή ΤΩΝ ΌΡΩΝ ΤΊΤΛΟΥ, ΜΗ ΠΑΡΑΒΊΑΣΗς, ΙΚΑΝΟΠΟΙΗΤΙΚΉς ΚΑΤΆΣΤΑΣΗς Ή ΠΟΙΌΤΗΤΑς, ΕΜΠΟΡΕΥΣΙΜΌΤΗΤΑς ΚΑΙ ΚΑΤΑΛΛΗΛΌΤΗΤΑς ΓΙΑ ΣΥΓΚΕΚΡΙΜΈΝΟ ΣΚΟΠΌ, ΌΣΟΝ ΑΦΟΡΆ ΤΑ ΥΛΙΚΆ.