مکاننمای ویندوز (.cur)
Microsoft استانداردمنبع مکاننمای ویندوز (CUR) فرمت بومی نشانگر ماوس در مایکروسافت ویندوز است که در معماری کانتینر مشابه ICO است، اما مختصات دقیق نقاط داغ (Hotspot) را مشخص میکند.
بررسی و فراداده
سیستمعاملها و تحلیلگرهای فایل، فایلهای CUR را با بررسی توالی بایتهای دودویی ابتدایی شناسایی میکنند:
امضای هدر در سطح بایت (Magic Bytes)
سیستمعاملها و تحلیلگرهای فایل، فایلهای CUR را با بررسی توالی بایتهای دودویی ابتدایی شناسایی میکنند:
امضای HEX (آفست 0):
00 00 02 00نمایش ASCII: ....
استانداردسازی: Microsoft Windows Resource Specification
مشخصات فنی
| معماری کانتینر | ICONDIR header with resource type 2 (Cursor) followed by ICONDIRENTRY array and DIB data |
| فشردهسازی | Uncompressed DIB or PNG compressed streams (Windows Vista+) |
| ترتیب بایتها (Endianness) | Little-Endian (Intel x86) |
| فضاهای رنگی | Device RGB |
| کانالها و ساختار | 1-bit monochrome mask, 4-bit, 8-bit, or 32-bit BGRA with alpha |
| حداکثر ابعاد | Typically 32 x 32, 48 x 48, or 64 x 64 (supports up to 256 x 256 in modern Windows) |
| شفافیت مشخصات | XOR/AND binary mask or 8-bit smooth alpha channel |
| استریمینگ و پیشرونده | Non-streamable desktop icon/cursor directory |
ماتریس مقایسه فنی: CUR در برابر رقبا
| ویژگی فنی | CUR (فعلی) | ICO | PNG | SVG |
|---|---|---|---|---|
| تعریف نقطه داغ | مختصات پیکسلی X/Y جاسازیشده | هیچکدام (پیشفرض مرکز/بالا-چپ) | تعریفشده در CSS | تعریفشده در کادرهای دیداری SVG |
| شناسه نوع منبع | 0x0002 (مکاننما) | 0x0001 (آیکون) | تصویر استاندارد | XML برداری |
| سیستمعامل | زیرسیستم ماوس بومی ویندوز | پوسته ویندوز / فاوآیکون مرورگر | وب و اپلیکیشن جهانی | برداری جهانی |
| مقیاسپذیری | نقشههای فشرده (Mipmaps) چندوضعیتی ثابت | نقشههای فشرده (Mipmaps) چندوضعیتی ثابت | اندازه ثابت رستر | مقیاسپذیری برداری بینهایت |
حالتهای رایج خرابی و راهنمای بازیابی هگز
کلیک ماوس چند پیکسل دورتر از نوک پیکان مکاننما ثبت میشود.
علت ریشهای: مختصات نقطه داغ X/Y خراب یا مفقود شده در جدول ICONDIRENTRY.
بازیابی: بازسازی مکاننما در مبدل مکاننمای File2File برای کالیبرهسازی مجدد بصری مختصات نقطه داغ.
تحلیل امنیتی و بردارهای حمله تجزیهکننده (Parser)
خطاهای تجزیه CUR در رابط دستگاه گرافیکی ویندوز (GDI) به طور تاریخی اجازه اجرای کد دلخواه را از طریق ابعاد هدر دستکاریشده میدادند.
بردارهای حمله شناختهشده
- سرریز عدد صحیح (Integer overflow) در هنگام تخصیص ماسکهای رنگی DIB در رمزگشاهای مکاننمای قدیمی.
- افزایش آفستهای نقطه داغ که باعث خواندن اشارهگر خارج از محدوده در طول بلتگذاری (Blitting) مکاننما میشوند.
- خرابی حافظه پشته (Heap corruption) هنگام تجزیه جریانهای PNG جاسازیشده در فایلهای مدرن CUR.
بهترین روشهای پدافندی:
تاریخچه و نقاط عطف
مزایا و نقاط قوت کلیدی
- مختصات دقیق نقاط داغ پیکسلی (X, Y) را که کلیکهای ماوس به صورت فیزیکی روی صفحه ثبت میشوند، تعریف میکند.
- تعاریف مکاننمای چندوضعیتی را برای نمایش واضح روی مانیتورهای استاندارد و ۴K با DPI بالا امکانپذیر میسازد.
- پشتیبانی مستقیم بومی سیستمعامل در ویندوز بدون نیاز به درایورهای مکاننمای شخص ثالث.
محدودیتها و معایب فنی
- فرمت متمرکز بر ویندوز با پشتیبانی ضعیف از نمایش بومی در دستگاههای تلفن همراه و مرورگرهای غیرویندوزی.
- فقط مکاننمای ایستا؛ مکاننمای متحرک نیازمند کانتینر چندفریمی .ANI است.
- ماسکهای قدیمی ۱ بیتی XOR باعث ایجاد آرتیفکتهای معکوسسازی شدید در رابطهای رنگی مدرن میشوند.
نکات فنی جالب
- تنها تفاوت ساختاری بین یک فایل ICO و یک فایل CUR در بایت ۳ هدر است: ۱ برای آیکون، ۲ برای مکاننما.
- در یک فایل ICO، بایتهای ۴ و ۶ هر ورودی نمایانگر صفحات رنگی و بیت بر پیکسل هستند؛ در فایل CUR، همان بایتهای دقیق نمایانگر مختصات X و Y نقطه داغ (Hotspot) هستند.
- CSS از مکاننماهای وب سفارشی مستقیماً با استفاده از URLهایی که به فایلهای .cur اشاره میکنند، پشتیبانی میکند.
سوالات فنی متداول
نقطه داغ یا هاتاسپات (hotspot) در مکاننما چیست؟
هاتاسپات مختصات دقیق پیکسلی درون تصویر مکاننما است (مانند نوک پیکان یا مرکز علامت به علاوه) که در آن رویدادهای کلیک رخ میدهند.
آیا میتوانم یک تصویر (PNG/JPG) را به فایل CUR تبدیل کنم؟
بله. File2File.app به شما اجازه میدهد فایلهای استاندارد PNG یا JPG را با قابلیت تعیین سفارشی هاتاسپات به فایلهای مکاننمای ویندوز با پسوند .CUR تبدیل کنید.
چگونه میتوانم از یک فایل .cur در وبسایت خود استفاده کنم؟
شما میتوانید مکاننمای سفارشی را در CSS با استفاده از این دستور اعمال کنید: cursor: url('my-cursor.cur'), auto;