פתרון הקשר והקצאה¶
ה־DriverEntry פועל ב־PASSIVE_LEVEL, וה־DPC הרגיל פועל ב־DISPATCH_LEVEL. עבור dispatch ו־completion אין להמציא כלל אחד לכל סוגי הדרייברים והבקשות; נבדוק את התיעוד של המסלול ואת השכבה ב־stack. תהליכון worker רגיל של המערכת נותן מקום לעבודה ב־PASSIVE_LEVEL, אבל אינו משחזר אוטומטית את process context של המבקש.
ה־failpoint יכול להיות מונה בדיקה שמחזיר STATUS_INSUFFICIENT_RESOURCES לפני ExAllocatePool2 בכל רכישה שנבחרה. ה־caller צריך לשחרר משאבים שכבר רכש, לא לפרסם context לתור ולהחזיר לבקשה status עקבי עם Information מאופס. בבדיקת קבלה נוודא שאחרי כל כשל ניתן לקבל בקשה טובה חדשה.
התיקון הראשון הוא הקצאת הנתון הדרוש ל־DPC מתוך nonpaged pool ושמירת כל חיי ההשאלה עד סיום ה־DPC. התיקון השני הוא להשאיר את העבודה ב־PASSIVE_LEVEL באמצעות work item ולהעתיק לתוכו רק מידע יציב. אם הפעולה צריכה לחסום, שינוי pool לבדו אינו מספיק: גם קוד שרץ על נתון nonpaged אינו רשאי לבצע wait אסור ב־DISPATCH_LEVEL. לכן נבחר בתיקון שמזיז את העבודה, ונגדיר גם ביטול ו־teardown של ה־work item.