اندازهی قلم متن
تخمین مدت زمان مطالعهی مطلب:
دو دقیقه
این مطلب دنبالهی «تغییر عملکرد و یا ردیابی توابع ویندوز با استفاده از Hookهای دات نتی» است.
روش ارائه شده در آن با ویندوزهای XP تا 7 نگارشهای 32 بیتی و 64 بیتی، بدون مشکل کار میکند. اما تاثیری بر روی ویندوز 8 و نگارشهای پس از آن نداشت.
تغییرات توابع GetDateFormatW و GetTimeFormatW در ویندوز اکسپلورر ویندوز 8
چه برنامهی ExplorerPCal و چه API Monitor را اگر با فعال سازی توابع GetDateFormatW و GetTimeFormatW اجرا کنید، هیچ خروجی خاصی را مشاهده نخواهید کرد. در ابتدا به نظر میرسد که ساختار ویندوز شاید تغییر کردهاست ... ولی اینطور نیست. فقط اینبار بجای فراخوانی این توابع از kernel32.dll، از یک dll مخفی در پوشهی System32 استفاده میشود. روش پیدا کردن آن نیز به صورت زیر است:
کار dumpbin.exe موجود در پوشهی VC\bin ویژوال استودیو، استخراج import table و export table یک فایل اجرایی و یا یک dll بومی ویندوز است. به این ترتیب میتوان دریافت یک فایل exe، از چه dll هایی استفاده میکند و همچنین از این dllها، کدامیک از توابع آنها را مورد استفاده قرار داده است.
اگر خروجی این برنامه را که اکنون در فایل explorer.imports.txt ذخیره شدهاست، بررسی کنیم، به نتیجهی زیر خواهیم رسید:
بله. در ویندوزهای سری 8، دیگر از کرنل32 برای دریافت GetDateFormatW استفاده نمیشود. اینبار از dll ایی به نام api-ms-win-core-datetime-l1-1-1.dll کمک گرفته شدهاست. این dll در پوشهی System32 با خاصیت مخفی قرار دارد.
بنابراین تنها تغییری که باید در برنامهی ExplorerPCal داده شود، اضافه کردن مداخل جدید فوق است. در ویندوزهای قبل از 8، از نگارشهای Ex استفاده نمیشد. در اینجا هم از نگارشهای W و هم Ex دار استفاده شدهاست.
اگر خواستید این تغییرات را با برنامهی API Monitor بررسی کنید، فایل جدید api-ms-win-core-datetime-l1-1-1.xml ذیل را در پوشهی API\Windows آن کپی نمائید تا مداخل api-ms-win-core-datetime-l1-1-1.dll نیز به مجموعهی تعاریف آن اضافه شوند.
api-ms-win-core-datetime-l1-1-1.xml
حاصل نهایی، فایلهای اجرایی و سورس بهبود یافتهی برنامه را از اینجا میتوانید دریافت کنید:
شمسی ساز تاریخ اکسپلورر ویندوز
تاثیر آنرا نیز بر روی Explorer ویندوز 8، در تصاویر ذیل میتوانید ملاحظه نمائید:
روش ارائه شده در آن با ویندوزهای XP تا 7 نگارشهای 32 بیتی و 64 بیتی، بدون مشکل کار میکند. اما تاثیری بر روی ویندوز 8 و نگارشهای پس از آن نداشت.
تغییرات توابع GetDateFormatW و GetTimeFormatW در ویندوز اکسپلورر ویندوز 8
چه برنامهی ExplorerPCal و چه API Monitor را اگر با فعال سازی توابع GetDateFormatW و GetTimeFormatW اجرا کنید، هیچ خروجی خاصی را مشاهده نخواهید کرد. در ابتدا به نظر میرسد که ساختار ویندوز شاید تغییر کردهاست ... ولی اینطور نیست. فقط اینبار بجای فراخوانی این توابع از kernel32.dll، از یک dll مخفی در پوشهی System32 استفاده میشود. روش پیدا کردن آن نیز به صورت زیر است:
"C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\dumpbin.exe" /imports c:\windows\explorer.exe > explorer.imports.txt
اگر خروجی این برنامه را که اکنون در فایل explorer.imports.txt ذخیره شدهاست، بررسی کنیم، به نتیجهی زیر خواهیم رسید:
api-ms-win-core-datetime-l1-1-1.dll 14015E848 Import Address Table 1401613E0 Import Name Table 0 time date stamp 0 Index of first forwarder reference 2 GetDateFormatW 1 GetDateFormatEx 4 GetTimeFormatEx
بنابراین تنها تغییری که باید در برنامهی ExplorerPCal داده شود، اضافه کردن مداخل جدید فوق است. در ویندوزهای قبل از 8، از نگارشهای Ex استفاده نمیشد. در اینجا هم از نگارشهای W و هم Ex دار استفاده شدهاست.
اگر خواستید این تغییرات را با برنامهی API Monitor بررسی کنید، فایل جدید api-ms-win-core-datetime-l1-1-1.xml ذیل را در پوشهی API\Windows آن کپی نمائید تا مداخل api-ms-win-core-datetime-l1-1-1.dll نیز به مجموعهی تعاریف آن اضافه شوند.
api-ms-win-core-datetime-l1-1-1.xml
حاصل نهایی، فایلهای اجرایی و سورس بهبود یافتهی برنامه را از اینجا میتوانید دریافت کنید:
شمسی ساز تاریخ اکسپلورر ویندوز
تاثیر آنرا نیز بر روی Explorer ویندوز 8، در تصاویر ذیل میتوانید ملاحظه نمائید:
ساعت و تقویم نوار وظیفهی ویندوز
تاریخ تغییرات فایلها، در نمایش لیستی ویندوز اکسپلورر
تاریخ ایجاد و تغییرات یک فایل در خواص آن
تاریخ نمایش داده شده به همراه charm bar ویندوز 8