ตั้งแต่การเปิดตัว Windows 7 64-bit มีการเปลี่ยนแปลงเล็กน้อยในการจัดสรรโฟลเดอร์ในไดเรกทอรี Windows โฟลเดอร์ใหม่ 2 โฟลเดอร์ถูกรวมอยู่ใน Windows 10 64-bit, Windows 8 และ Windows 7 64-bit คือ Sysnative และ SysWOW64 โฟลเดอร์เหล่านี้มีเฉพาะใน Windows 64-bit เท่านั้น หากคุณรัน Windows 32-bit บนเครื่อง 64-bit คุณจะไม่เห็นโฟลเดอร์เหล่านี้ ไม่ก็จะเห็นเมื่อรัน Windows 32-bit บนเครื่อง 32-bit
มีอีกโฟลเดอร์หนึ่งนอกไดเรกทอรี Windows ชื่อ Program Files (x86) เราคุ้นเคยกับโฟลเดอร์ Program Files ที่เก็บไฟล์ 실행ของโปรแกรม ในระบบ 64-bit โปรแกรม 64-bit จะอยู่ใน Program Files ส่วนโปรแกรม 32-bit จะอยู่ใน Program Files (x86) อย่างไรก็ตาม Windows ใช้กลไกแบบ emulation สำหรับรันโปรแกรม 32-bit บนเครื่อง 64-bit จึงจำเป็นต้องรู้จักโฟลเดอร์ระบบภายใต้ Windows (64-bit) เพื่อทราบวิธีเข้าถึงไฟล์ที่ต้องการ
ไม่เหมือนเครื่อง 32-bit ที่ DLL 32-bit อยู่ใน System32 folder Windows 64-bit จะเก็บ DLL ที่เกี่ยวกับ 64-bit ไว้ใน System32 folder เพื่อความสะดวกในการเขียนโปรแกรมและความเข้ากันได้ย้อนหลัง นั่นคือ หากโปรแกรม 64-bit อ้างอิง System32 ในโค้ด จะได้ DLL 64-bit อัตโนมัติเมื่อเรียกใช้ ช่วยให้นักพัฒนาไม่ต้องเปลี่ยนโค้ดสำหรับ Windows 64-bit
สรุปคือ Windows ย้าย DLL 32-bit ทั้งหมดจากโฟลเดอร์ System32 ในไดเรกทอรี Windows ไปยังโฟลเดอร์อื่น เพื่อให้โปรแกรมเก่าไม่ต้องเขียนโค้ดใหม่เพื่อรับ DLL ที่ถูกต้องแม้จะใช้ APIs หลังอัปเกรดเป็น 64-bit ปัญหาเกิดขึ้นเมื่อแอปพลิเคชัน 32-bit พยายามเข้าถึงโฟลเดอร์ System32 ในกรณีนี้ โปรแกรมจะหยุดทำงาน เพราะไม่ได้เขียนมาเพื่อจัดการ DLL 64-bit
อ่านเพิ่มเติม: โฟลเดอร์ Panther คืออะไร?
โฟลเดอร์ SysWOW64 ใน Windows 64-bit
DLL 32-bit ทั้งหมดถูกย้ายไปยัง SysWOW64 folder ใหม่ใน Windows 10 64-bit, Windows 8 และ Windows 7 64-bit ดังนั้นเมื่อโปรแกรม 32-bit เรียกใช้ DLL 32-bit จะต้องไปถึงโฟลเดอร์ SysWOW64
คุณอาจคิดว่านักพัฒนาต้องสแกนโปรแกรมเพื่อชี้ฟังก์ชัน DLL ไปที่ SysWOW64 แต่ Microsoft จัดการให้แล้ว หากเป็นโปรแกรม 32-bit ที่เรียก C:\Windows\System32 โปรแกรมจำลองจะ redirect path ไป C:\Windows\SysWOW64 นั่นคือ เพื่อรันโปรแกรม 32-bit ใน Windows 64-bit จะใช้ emulator เพื่อความเข้ากันได้ย้อนหลังและป้องกันข้อผิดพลาดเมื่อเรียกไฟล์ DLL
อ่านเพิ่มเติม: โฟลเดอร์ FOUND.000 คืออะไร?
โฟลเดอร์ Sysnative ใน Windows 64-bit

อาจมีกรณีที่โปรแกรมหรือแอปพลิเคชัน 32-bit ต้องการ DLL 64-bit ในกรณีนี้ คุณจะต้องใช้โฟลเดอร์ redirect Sysnative คุณสามารถมอง SysNative ว่าเป็นโฟลเดอร์เสมือนและอีเลียสที่ชี้ไปที่โฟลเดอร์ System32 มันไม่มีอยู่จริงในระบบของคุณ
ดังนั้น หากโปรแกรม 32-bit ของคุณต้องการเข้าถึง DLL 64-bit อย่าใช้ C:\Windows\System32 เพราะโปรแกรมจำลอง 32-bit จะนำไปที่โฟลเดอร์ DLL 32-bit ที่ชื่อ SysWOW64 แทน ให้ใช้ C:\Windows\SysNative เป็น path ไปยังโปรแกรม DLL การใช้ Sysnative ใน path จะ redirect ไปที่ System32 แทน SysWOW64
หากคุณเปิด File Windows Explorer คุณจะไม่พบโฟลเดอร์ Sysnative ใน C:\Windows แม้จะตั้งค่า Folder Options ให้แสดง hidden และ system folders ก็ตาม เนื่องจาก Windows File Explorer เป็นโปรแกรม 64-bit เมื่อรันใน Windows 64-bit และโฟลเดอร์ Sysnative มองเห็นและเข้าถึงได้จากโปรแกรม 32-bit เท่านั้น
สรุป:
- โฟลเดอร์ System32 มีไฟล์ DLL 64-bit
- SysWOW64 มีไฟล์ DLL 32-bit และโปรแกรม 32-bit จะถูก redirect ไปที่นี่อัตโนมัติ
- Sysnative เป็นโฟลเดอร์ redirect ที่ช่วยให้โปรแกรม 32-bit เรียก DLL 64-bit ได้
อ่านเพิ่มเติม: MSDN
ต้องการทราบความแตกต่างระหว่างโฟลเดอร์ System32 และ SysWOW64?
