Với việc phát hành Windows 7 64-bit, một thay đổi nhỏ được giới thiệu trong việc phân bổ thư mục thông thường trong thư mục Windows. Hai thư mục mới được bao gồm trong phiên bản 64-bit của Windows 10, Windows 8 và Windows 7. Chúng là thư mục Sysnative và SysWOW64. Chỉ có trong Windows 64-bit. Nếu bạn chạy Windows 32-bit trên máy 64-bit, bạn sẽ không thấy chúng. Cũng không thấy khi chạy Windows 32-bit trên máy 32-bit.
Có một thư mục khác bên ngoài thư mục Windows, gọi là Program Files (x86). Chúng ta quen với thư mục Program Files chứa tệp thực thi của chương trình. Trên hệ thống 64-bit, chương trình 64-bit được lưu trong Program Files, trong khi chương trình 32-bit nằm trong Program Files (x86). Tuy nhiên, Windows dùng một loại mô phỏng để chạy chương trình 32-bit trên máy 64-bit. Do đó, cần biết và hiểu các thư mục hệ thống dưới Windows (64-bit) để biết cách truy cập tệp mong muốn.
Khác với máy 32-bit, nơi DLL 32-bit được lưu trong thư mục System32, phiên bản 64-bit của Windows lưu DLL liên quan đến 64-bit trong thư mục System32. Điều này nhằm mục đích lập trình dễ dàng và cung cấp tương thích ngược. Nghĩa là, nếu chương trình 64-bit tham chiếu System32 trong mã, nó sẽ tự động nhận DLL 64-bit khi gọi. Điều này giúp nhà phát triển không phải thay đổi mã cho Windows 64-bit.
Tóm lại, Windows di chuyển tất cả DLL 32-bit từ thư mục System32 trong thư mục Windows sang thư mục khác để các chương trình cũ không cần viết lại mã để lấy DLL phù hợp ngay cả khi dùng API – sau khi nâng cấp lên 64-bit. Vấn đề xảy ra khi ứng dụng 32-bit cố truy cập thư mục System32. Trong trường hợp này, chương trình sẽ bị lỗi vì nó không được viết để xử lý DLL 64-bit.
Đọc thêm: Thư mục Panther là gì?
Thư mục SysWOW64 trong Windows 64-bit
Tất cả DLL 32-bit đã được di chuyển sang thư mục SysWOW64 mới trong phiên bản 64-bit của Windows 10, Windows 8 và Windows 7, để khi chương trình 32-bit gọi DLL 32-bit, chúng phải truy cập thư mục SysWOW64.
Bạn có thể nghĩ nhà phát triển phải quét chương trình để trỏ hàm DLL đến SysWOW64. Nhưng Microsoft đã lo việc đó. Nếu là chương trình 32-bit gọi C:\Windows\System32, một trình mô phỏng sẽ chuyển hướng đường dẫn đến C:\Windows\SysWOW64. Nghĩa là, để chạy chương trình 32-bit trong Windows 64-bit, trình mô phỏng được dùng để đảm bảo tương thích ngược đúng đắn và tránh lỗi khi gọi tệp DLL.
Đọc thêm: Thư mục FOUND.000 là gì?
Thư mục Sysnative trong Windows 64-bit

Có trường hợp chương trình 32-bit có thể cần DLL 64-bit. Lúc đó, bạn phải dùng thư mục chuyển hướng Sysnative. Bạn có thể coi SysNative là thư mục ảo và bí danh trỏ đến thư mục System32. Nó không tồn tại vật lý trên hệ thống.
Vì vậy, nếu chương trình 32-bit cần truy cập DLL 64-bit, đừng dùng C:\Windows\System32 vì trình mô phỏng 32-bit sẽ đưa nó đến thư mục DLL 32-bit tên SysWOW64. Thay vào đó, hãy dùng C:\Windows\SysNative làm đường dẫn đến chương trình DLL. Sử dụng Sysnative trong đường dẫn sẽ chuyển hướng nó đến thư mục System32 thay vì SysWOW64.
Nếu bạn mở File Explorer, bạn sẽ không tìm thấy thư mục Sysnative trong C:\Windows. Ngay cả khi đặt Tùy chọn thư mục để hiển thị tệp ẩn và hệ thống. Điều này là vì Windows File Explorer là chương trình 64-bit khi chạy trong Windows 64-bit, và thư mục Sysnative chỉ hiển thị và truy cập được từ chương trình 32-bit.
Tóm lại:
- Thư mục System32 chứa tệp DLL 64-bit.
- SysWOW64 chứa tệp DLL 32-bit, và chương trình 32-bit tự động được chuyển hướng đến thư mục này
- Sysnative là thư mục chuyển hướng cho phép chương trình 32-bit gọi DLL 64-bit.
Đọc thêm: MSDN.
Muốn biết sự khác biệt giữa thư mục System32 và SysWOW64?
