تأیید DMA

ساخت وبلاگ

تأیید صحت DMA استفاده از دسترسی مستقیم حافظه (DMA) را کنترل می کند. از آنجا که روال DMA با توسعه ویندوز تغییر کرده است ، بسیاری از درایورها از تماس های DMA نادرست استفاده می کنند. علاوه بر این ، برخی از نویسندگان راننده سعی در دور زدن زیر سیستم HAL DMA به طور کلی دارند. این عمل می تواند اشکالات موذی را به راننده معرفی کند.

گزینه تأیید DMA از تأیید کننده درایور تلاش می کند تا خطاهای متداول DMA را بدست آورد. همراه با پسوند اشکال زدایی هسته DMA ، می توان از آن برای تأیید اینکه راننده از DMA به روشی مناسب استفاده می کند ، استفاده کرد.

این گزینه تأیید کننده درایور همچنین تأیید HAL نامیده می شود. برخی از پیام های خطای تولید شده توسط تأیید کننده درایور ممکن است از این اصطلاح استفاده کنند.

انواع مختلف DMA

DMA مکانیسمی است که از طریق آن یک دستگاه سخت افزاری می تواند داده ها را بدون استفاده از پردازنده به حافظه یا از حافظه منتقل کند. پردازنده برای تنظیم انتقال موظف است و دستگاه هنگام اتمام انتقال ، پردازنده را به پردازنده نشان می دهد. مزیت این سیستم این است که پردازنده می تواند در حالی که انتقال DMA در حال انجام است ، کارهای دیگری را انجام دهد.

انواع مختلفی از DMA وجود دارد که در ویندوز 2000 و بعد استفاده می شود:

بافر مشترک DMA بافر مشترک DMA هنگامی انجام می شود که سیستم بتواند یک بافر منفرد را که توسط سخت افزار و نرم افزار قابل دسترسی است ، اختصاص دهد. درایور وظیفه همگام سازی دسترسی به بافر را بر عهده دارد. حافظه ذخیره نمی شود و این همگام سازی را برای راننده آسان تر می کند. پس از تنظیم یک بافر مشترک ، درایور و سخت افزار می توانند بدون هیچ گونه مداخله ای از HAL ، مستقیماً به آدرس های موجود در بافر بنویسند.

بسته DMA Packet DMA هنگامی انجام می شود که یک بافر موجود وجود داشته باشد که باید برای استفاده توسط سخت افزار نقشه برداری شود. نمونه ای از استفاده از بسته DMA انتقال یک پرونده از حافظه به دیسک است. استفاده از DMA بافر مشترک در این شرایط بی فایده خواهد بود ، زیرا این پرونده قبل از انتقال سخت افزار به دیسک باید به بافر مشترک منتقل شود. در عوض ، با HAL مشورت می شود. این اطلاعات مورد نیاز را به راننده می دهد تا به سخت افزار کمک کند تا بافر واقعی در حافظه پیدا کند. این عمل با نیاز به روال های درگیر برای کار در معماری های مختلف پیچیده است.

پراکندگی/جمع آوری DMA Scatter/Gather DMA روشی میانبر است که چندین بسته DMA بسته را به طور همزمان تنظیم می کند. اگر در حال انتقال یک بسته از طریق شبکه هستید ، به عنوان مثال ، هر قسمت از پشته شبکه هدر خود را اضافه می کند (TCP ، IP ، اترنت و غیره). این هدر همه از مکان های مختلف حافظه اختصاص یافته است. در این حالت ، DMA با صدور درخواست دسته ای به HAL ، زمان صرفه جویی در وقت را برای نقشه برداری هر عنوان به علاوه بخش داده برای دسترسی به سخت افزار صرفه جویی می کند. این روش به جای اینکه مجبور به تماس با کارهای روزمره DMA در هر قسمت از بسته ها باشد ، هر یک را یک بار فراخوانی می کند و به HAL اجازه می دهد تا مسئولیت نقشه برداری هر یک را به صورت جداگانه انجام دهد.

توجه داشته باشید که توانایی پراکندگی/جمع آوری به این معنی نیست که دستگاه می تواند از روال های پراکندگی/جمع آوری استفاده کند. توانایی پراکندگی/جمع آوری به یک پرچم در توضیحات دستگاه اشاره دارد که نشان می دهد دستگاه به جای فقط یک محدوده خاص قادر به خواندن یا نوشتن از هر منطقه در حافظه است.

سیستم DMA System DMA با برنامه نویسی کنترلر سیستم DMA در مادربرد انجام می شود تا مستقیماً انتقال را انجام دهد. فقط کارتهای ISA می توانند از System DMA استفاده کنند.

اثرات تأیید DMA

هنگامی که تأیید DMA فعال است ، تأیید کننده درایور سوء استفاده از روال DMA را از جمله:

  • بافر حافظه DMA بیش از حد یا زیرنویس (این خطاها را می توان توسط سخت افزار یا درایور انجام داد).
  • آزاد کردن یک بافر مشترک ، کانال آداپتور ، ثبت نام نقشه یا لیست پراکندگی/جمع آوری.
  • با آزاد کردن بافر مشترک ، کانال های آداپتور ، ثبت نقشه ها ، لیست های پراکندگی/جمع آوری یا آداپتورها ، حافظه نشت می کند.
  • داشتن بیش از یک کانال آداپتور برای یک آداپتور در یک زمان.
  • تلاش برای استفاده از آداپتور که قبلاً آزاد شده و دیگر وجود ندارد.
  • گرگرفتگی بافر آداپتور.
  • داشتن تعداد مرجع بسیار برجسته ای برای آداپتور.
  • انجام DMA بر روی یک بافر قابل قبول (قبل از شروع انتقال DMA باید تمام بافرها قفل شود).
  • انجام DMA بر روی MDL با پرچم های منگل.
  • مراجعه به آدرس سیستم نامعتبر ، یا قبل از اولین MDL ، یا بعد از پایان اولین MDL ، یا با استفاده از طول انتقال که طولانی تر از بافر MDL است و از یک مرز صفحه در MDL عبور می کند.
  • تخصیص تعداد زیادی از رجیسترهای نقشه در یک زمان ، یا اختصاص بیشتر رجیسترهای نقشه نسبت به حداکثر تعداد مجاز.
  • نقشه برداری مضاعف از ثبت های نقشه.
  • تلاش برای ثبت نام نقشه در حالی که برخی از آنها هنوز نقشه برداری شده اند.
  • تلاش برای شستشوی یک رجیستری نقشه که نقشه برداری نشده است.
  • تلاش برای شستشوی بیش از حد بایت در انتهای پرونده ثبت نقشه.
  • فراخوانی روال DMA در IRQL نادرست.
  • عبور از DMA_Adapter با ارزش تهی به روال HAL.
  • انتقال آدرس و MDL به روال HAL هنگامی که آدرس در MDL موجود نیست.
  • تلاش برای نقشه برداری از محدوده آدرس که قبلاً نقشه برداری شده است.
  • تلاش برای شستشوی بافر که نقشه برداری نشده است.
  • تلاش برای نقشه برداری یک بافر به طول صفر برای انتقال.
  • فراخوانی عملکرد منسوخ HalgetAdapter (همه درایورها باید به جای آن از iogetdmaadapter استفاده کنند).

تأیید کننده راننده بر رفتار راننده نظارت می کند و در صورت بروز هر یک از این تخلفات ، 0xe6 را بررسی می کند. برای لیستی از پارامترهای بررسی اشکال ، 0xe6 (driver_verifier_dma_violation) را بررسی کنید.

چه زمانی تأیید DMA مفید است؟

تمام درایورهایی که مستقیماً از DMA استفاده می کنند (با فراخوانی روال HAL DMA) باید با تأیید DMA آزمایش شوند.

علاوه بر این ، درایورهای Miniport نیز باید آزمایش شوند ، زیرا آنها اغلب به طور غیرمستقیم از DMA استفاده می کنند (با تماس با درایورهای پورت که از DMA استفاده می کنند).

تأیید DMA همچنین می تواند یک روش مؤثر برای تشخیص فساد حافظه باشد ، زیرا می تواند هنگامی که یک درایور یا یک دستگاه سخت افزاری از یک بافر DMA غلبه می کند ، نشان دهد.

نظارت بر تأیید DMA

توسعه اشکال زدایی هسته! DMA می تواند برای نمایش ثروت از اطلاعات DMA استفاده شود. این می تواند جزئیات مختلفی در مورد رفتار هر آداپتور DMA نشان دهد. نمونه مفصلی از پسوند! DMA و همچنین اطلاعات کلی در مورد پسوندهای اشکال زدایی ، در مستندات موجود در ابزارهای اشکال زدایی برای بسته بندی ویندوز وجود دارد. برای جزئیات بیشتر به اشکال زدایی ویندوز مراجعه کنید.

فعال کردن این گزینه

می توانید با استفاده از مدیر تأیید کننده درایور یا خط فرمان reverifer. exe ، ویژگی تأیید DMA را برای یک یا چند درایور فعال کنید. برای جزئیات بیشتر ، به انتخاب گزینه های تأیید کننده درایور مراجعه کنید.

 

  • در خط فرمان در خط فرمان ، گزینه تأیید DMA توسط بیت 7 (0x80) نشان داده شده است. برای فعال کردن تأیید DMA ، از مقدار پرچم 0x80 استفاده کنید یا 0x80 را به مقدار پرچم اضافه کنید. مثلا:

     

تأیید کننده /پرچم 0x80 /درایور mydriver. sys 

این ویژگی بعد از بوت بعدی فعال خواهد بود. در ویندوز ویستا و نسخه های بعدی ویندوز ، می توانید با افزودن پارامتر /فرار به دستور ، تأیید DMA را بدون راه اندازی مجدد رایانه فعال و غیرفعال کنید. مثلا:

تأیید کننده /فرار /پرچم 0x80 /Adddriver MyDriver. Sys 

این تنظیم بلافاصله مؤثر است ، اما هنگام خاموش کردن یا راه اندازی مجدد رایانه از بین می رود. برای جزئیات بیشتر ، به استفاده از تنظیمات فرار مراجعه کنید. ویژگی تأیید DMA نیز در تنظیمات استاندارد گنجانده شده است. مثلا:

تأیید کننده /استاندارد /درایور mydriver. sys 
  1. مدیر تأیید کننده درایور را شروع کنید. تأیید کننده را در یک پنجره سریع فرمان تایپ کنید.
  2. ایجاد تنظیمات سفارشی (برای توسعه دهندگان کد) را انتخاب کنید و سپس روی Next کلیک کنید.
  3. تنظیمات شخصی را از یک لیست کامل انتخاب کنید.
  4. (بررسی) تأیید DMA را انتخاب کنید.

ویژگی تأیید DMA نیز در تنظیمات استاندارد گنجانده شده است. برای استفاده از این ویژگی ، در Driver Verifer Manager ، روی ایجاد تنظیمات استاندارد کلیک کنید.

دوره ی فارکس...
ما را در سایت دوره ی فارکس دنبال می کنید

برچسب : نویسنده : پرویز حبّی بازدید : <-PostHit-> تاريخ : شنبه 11 شهريور 1402 ساعت: 14:16