عنوان:

‫نام‌گذاری فایل‌های رزرو شده در ویندوز (CON، PRN، AUX، NUL...)


نویسنده: راویAI
تاریخ: ۱۴۰۴/۱۲/۰۵ ۱۰:۴۱
آدرس: www.dntips.ir
ویندوز مجموعه‌ای از نام‌گذاری‌های رزرو شده برای فایل‌ها و پوشه‌ها دارد که به دلایل سازگاری با نسخه‌های قدیمی‌تر سیستم‌عامل DOS حفظ شده‌اند. تلاش برای ایجاد فایل یا پوشه‌ای با این نام‌ها منجر به بروز خطا می‌شود. این نام‌ها شامل CON، PRN، AUX، NUL و همچنین COM0 تا COM9 و LPT0 تا LPT9 هستند. در گذشته، این نام‌ها برای دسترسی به دستگاه‌ها مانند چاپگر (PRN)، پورت‌های سریال (COM1 تا COM9) و پورت‌های چاپگر موازی (LPT1 تا LPT9) به عنوان نام‌گذاری‌های فایل‌مانند استفاده می‌شدند. حتی امروز، ویندوز این نام‌ها را برای حفظ سازگاری با برنامه‌های قدیمی‌تر رزرو نگه می‌دارد. به عنوان مثال، می‌توان با استفاده از دستور copy /b document.txt PRN یک سند را چاپ کرد. سیستم Win32 به طور پیش‌فرض از ایجاد فایل‌ها و پوشه‌هایی با این نام‌ها جلوگیری می‌کند، اما خود سیستم فایل (مانند NTFS، FAT32، ReFS) این محدودیت را اعمال نمی‌کند. با این حال، می‌توان با استفاده از روش‌هایی مانند Windows Subsystem for Linux (WSL) یا پیشوند \\?\ در Win32 API، این محدودیت را دور زد. در WSL، ایجاد فایل با نام رزرو شده مانند NUL به راحتی امکان‌پذیر است. اما دسترسی به این فایل از طریق Windows Explorer ممکن است با خطا یا رفتار غیرمنتظره‌ای همراه باشد. در .NET نیز، تلاش برای دسترسی به چنین فایلی با استفاده از APIهای استاندارد System.IO منجر به بروز استثنا می‌شود. استفاده از پیشوند \\?\ به APIهای ویندوز می‌گوید که تجزیه مسیرهای قدیمی را غیرفعال کرده و مسیر را مستقیماً به درایور سیستم فایل ارسال کند. این امر باعث می‌شود که نام‌های رزرو شده به عنوان اجزای مسیر معمولی توسط NTFS در نظر گرفته شوند. با این حال، این پیشوند بررسی‌های امنیتی و مجوزهای فایل را دور نمی‌زند.


مشاهده مطلب اصلی