פתרון פרויקט מנתח תוכניות ומנהל תהליכים¶
הפתרון מפריד inspection מהרשאה להריץ. תוצאת parser היא metadata על bytes שנקראו; היא אינה אישור אבטחתי להפעיל קובץ. לצורך ההרצה משתמשים בתיקיית מעבדה עם מדיניות כתיבה ידועה ובקובץ בעל זהות שנשמרת בדוח. אם התיקייה יכולה להשתנות, נדרש פרוטוקול staging והפצה שמקבע את התוצר לפני ההפעלה.
הsupervisor מחזיק רשומת ניסיון עם process handle, thread handle, job ומצב readiness. מזהה הניסיון חדש בכל יצירה, גם כאשר המערכת ממחזרת PID. הבדיקה של תהליך קודם משתמשת בhandle שנשמר ולא בפתיחה מחדש לפי מספר שעלול להשתייך לאחר.
לפני יצירת הילד מכינים את רשימת handles המותרת דרך STARTUPINFOEX ומעבירים אותה לCreateProcess לפי חוזה הירושה. הילד נוצר suspended, אחר כך משייכים אותו לjob ורק אז מאפשרים התקדמות. כל כשל לפני שיוך דורש סיום מפורש של הילד שכבר נוצר. אחרי שיוך, הjob מספק גבול לסיום העץ, אך עדיין צריך לצפות בהשלמה לפני שמדווחים שהניקוי הסתיים.
הrestart משתמש בתקציב ניסיונות ובbackoff מוגבל, עם סיבה לכל ניסיון. הילד שנכשל לפני readiness אינו מאפס את התקציב כאילו שירת בהצלחה. כך worker שבור אינו יוצר לולאת יצירה מהירה שמכלה משאבים ומסתירה את הכשל המקורי.
התרחיש של handle inheritance נבדק בעזרת handle ייחודי שאינו ברשימה המותרת וworker שמנסה להשתמש רק בערך שסופק לו במעבדה. אין מסיקים מערך מספרי מקרי שhandle עבר בהצלחה, כי אותו מספר יכול להיות תקף לאובייקט אחר. הבדיקה קושרת סוג אובייקט ופעולה צפויה.
הדוח הסופי מחבר שלושה דברים: bytes שנבדקו, תוצר שנבחר להרצה וניסיון process שנוצר. אם אין ראיה שמחברת שני שלבים, מציינים את הפער במקום להשלים אותו לפי שם הקובץ.