“Windows Drive Letters ไม่จำกัดแค่ A-Z”

บทความจาก Ryan Liptak อธิบายว่า drive letters ใน Windows ไม่ได้ถูกจำกัดอยู่ที่ A-Z อย่างที่หลายคนเข้าใจ แต่จริง ๆ แล้วเป็นเพียง สัญลักษณ์ที่ Object Manager ของ Windows ใช้เป็น symbolic link ไปยังอุปกรณ์หรือ volume ที่แท้จริง ตัวอย่างเช่น การใช้คำสั่ง subst +: C:\foo จะสร้าง drive +:\ ที่สามารถใช้งานได้เหมือน drive ปกติใน Command Prompt

สิ่งที่น่าสนใจคือ Windows สามารถรองรับ non-ASCII drive letters เช่น €:\ หรือ Λ:\ ได้เช่นกัน เนื่องจากระบบตรวจสอบเพียงว่ามีอักขระตามด้วย colon (:) เท่านั้น อย่างไรก็ตาม drive letters ที่อยู่นอกช่วง Unicode U+FFFF จะไม่สามารถใช้งานได้ เพราะ Windows ใช้การเข้ารหัสแบบ WTF-16 ซึ่งจำกัดอยู่ที่ code unit 16 บิต

แม้ระบบ NT Path Conversion จะรองรับ drive letters ที่หลากหลาย แต่ Explorer และ PowerShell กลับไม่ยอมรับ drive ที่อยู่นอก A-Z ทำให้ไม่สามารถเข้าถึงได้ผ่าน GUI หรือคำสั่ง PowerShell เช่น cd +:\ ซึ่งจะขึ้น error ว่าไม่พบ drive นี่สะท้อนถึงความไม่สอดคล้องกันระหว่าง API ระดับต่ำกับเครื่องมือที่ผู้ใช้ทั่วไปใช้งาน

บทความยังชี้ให้เห็นว่า การจัดการ path encoding มีผลต่อการตรวจสอบว่า path เป็น absolute หรือไม่ เช่น Rust จะถือว่าเฉพาะ A-Z เท่านั้นที่เป็น absolute path ขณะที่ Windows API จริง ๆ รองรับมากกว่า ทำให้เกิดความแตกต่างในการตีความระหว่างภาษาโปรแกรมและระบบปฏิบัติการ

สรุปสาระสำคัญ
Drive letters ไม่จำกัดแค่ A-Z
สามารถใช้สัญลักษณ์อื่น เช่น +:\
รองรับ non-ASCII เช่น €:\ หรือ Λ:\

การทำงานของ Windows Object Manager
Drive letter เป็น symbolic link ไปยัง volume จริง
ใช้ NT Path Conversion (RtlDosPathNameToNtPathName_U)

ข้อจำกัดของเครื่องมือทั่วไป
Explorer และ PowerShell รองรับเฉพาะ A-Z
ทำให้ drive อื่นไม่สามารถเข้าถึงได้ผ่าน GUI

คำเตือนและข้อควรระวัง
Drive letters ที่อยู่นอก Unicode U+FFFF ไม่สามารถใช้งานได้
ความไม่สอดคล้องระหว่าง API และเครื่องมืออาจทำให้โปรแกรมบางตัวทำงานผิดพลาด

https://www.ryanliptak.com/blog/windows-drive-letters-are-not-limited-to-a-z/
💻 “Windows Drive Letters ไม่จำกัดแค่ A-Z” บทความจาก Ryan Liptak อธิบายว่า drive letters ใน Windows ไม่ได้ถูกจำกัดอยู่ที่ A-Z อย่างที่หลายคนเข้าใจ แต่จริง ๆ แล้วเป็นเพียง สัญลักษณ์ที่ Object Manager ของ Windows ใช้เป็น symbolic link ไปยังอุปกรณ์หรือ volume ที่แท้จริง ตัวอย่างเช่น การใช้คำสั่ง subst +: C:\foo จะสร้าง drive +:\ ที่สามารถใช้งานได้เหมือน drive ปกติใน Command Prompt สิ่งที่น่าสนใจคือ Windows สามารถรองรับ non-ASCII drive letters เช่น €:\ หรือ Λ:\ ได้เช่นกัน เนื่องจากระบบตรวจสอบเพียงว่ามีอักขระตามด้วย colon (:) เท่านั้น อย่างไรก็ตาม drive letters ที่อยู่นอกช่วง Unicode U+FFFF จะไม่สามารถใช้งานได้ เพราะ Windows ใช้การเข้ารหัสแบบ WTF-16 ซึ่งจำกัดอยู่ที่ code unit 16 บิต แม้ระบบ NT Path Conversion จะรองรับ drive letters ที่หลากหลาย แต่ Explorer และ PowerShell กลับไม่ยอมรับ drive ที่อยู่นอก A-Z ทำให้ไม่สามารถเข้าถึงได้ผ่าน GUI หรือคำสั่ง PowerShell เช่น cd +:\ ซึ่งจะขึ้น error ว่าไม่พบ drive นี่สะท้อนถึงความไม่สอดคล้องกันระหว่าง API ระดับต่ำกับเครื่องมือที่ผู้ใช้ทั่วไปใช้งาน บทความยังชี้ให้เห็นว่า การจัดการ path encoding มีผลต่อการตรวจสอบว่า path เป็น absolute หรือไม่ เช่น Rust จะถือว่าเฉพาะ A-Z เท่านั้นที่เป็น absolute path ขณะที่ Windows API จริง ๆ รองรับมากกว่า ทำให้เกิดความแตกต่างในการตีความระหว่างภาษาโปรแกรมและระบบปฏิบัติการ 📌 สรุปสาระสำคัญ ✅ Drive letters ไม่จำกัดแค่ A-Z ➡️ สามารถใช้สัญลักษณ์อื่น เช่น +:\ ➡️ รองรับ non-ASCII เช่น €:\ หรือ Λ:\ ✅ การทำงานของ Windows Object Manager ➡️ Drive letter เป็น symbolic link ไปยัง volume จริง ➡️ ใช้ NT Path Conversion (RtlDosPathNameToNtPathName_U) ✅ ข้อจำกัดของเครื่องมือทั่วไป ➡️ Explorer และ PowerShell รองรับเฉพาะ A-Z ➡️ ทำให้ drive อื่นไม่สามารถเข้าถึงได้ผ่าน GUI ‼️ คำเตือนและข้อควรระวัง ⛔ Drive letters ที่อยู่นอก Unicode U+FFFF ไม่สามารถใช้งานได้ ⛔ ความไม่สอดคล้องระหว่าง API และเครื่องมืออาจทำให้โปรแกรมบางตัวทำงานผิดพลาด https://www.ryanliptak.com/blog/windows-drive-letters-are-not-limited-to-a-z/
0 ความคิดเห็น 0 การแบ่งปัน 6 มุมมอง 0 รีวิว