Làm thế nào để chế độ tương thích trong Windows làm việc trong nội bộ?
Làm thế nào để chế độ tương thích trong Windows làm việc trong nội bộ?
Câu trả lời:
Chế độ tương thích đạt được bằng cách sử dụng cái gọi là miếng chêm. Có một bài viết hay trên TechNet mô tả cách thức hoạt động của chúng.
Các tệp ứng dụng Windows chứa một bảng nhập cho biết trình tải ứng dụng mà DLL ứng dụng cần và chức năng nào nó sử dụng từ chúng. Một quá trình có thể ví dụ tham khảo GetVersionEx
trong kernel32.dll
. Khi một chương trình sẽ chạy trong chế độ tương thích, thì shim được đặt giữa ứng dụng và shim thay thế GetVersionEx
chức năng, để ứng dụng không gọi GetVersionEx
từ kernel32.dll
mà chỉ GetVersionEx
trong shim. Các chức năng shimmed sau đó thực hiện hành vi của các phiên bản Windows trước. GetVersionEx
là một mẫu dễ dàng, mỗi phiên bản Windows trả về số phiên bản của chính nó GetVersionEx
, vì vậy khi giả mạo một Windows cũGetVersionEx
chức năng hiện không trả về số phiên bản Windows 7 mà ví dụ số phiên bản Windows XP. Vì vậy, ứng dụng sẽ tin rằng nó đang chạy trên Windows XP.
Cũng có một số thay đổi khác từ phiên bản Windows sang phiên bản Windows. Trong các phiên bản cũ hơn, ví dụ, nếu một chương trình tải DLL, đường dẫn tìm kiếm của DLL cũng bao gồm thư mục hiện tại. Đây là một vấn đề bảo mật, do đó, các phiên bản Windows mới hơn theo mặc định không tìm kiếm trong thư mục hiện tại. Với shim thích hợp, bạn có thể mô phỏng hành vi cũ.
Vì các miếng chêm chỉ là một lớp giữa ứng dụng và API Windows, nên shim chỉ có thể làm những gì ứng dụng có thể tự làm. Ví dụ, shim không thể được sử dụng để phá vỡ UAC hoặc truy cập các tệp được bảo vệ.
Nếu bạn muốn biết thêm, đây là một số liên kết bạn có thể thấy thú vị:
Đặc biệt Bộ công cụ tương thích ứng dụng Microsoft rất đáng xem. Công cụ này cung cấp cho bạn tổng quan về các ứng dụng có vấn đề đã biết, tất cả các bản sửa lỗi và chế độ tương thích có sẵn và bản sửa lỗi nào được áp dụng cho từng ứng dụng.
Tôi nghĩ rằng rất nhiều điều khác nhau xảy ra. Một ví dụ đơn giản là một chương trình có thể kiểm tra phiên bản windows của bạn, nhưng bị lẫn lộn bởi giá trị trả về của một hệ điều hành mới. Vì vậy, sử dụng chế độ tương thích sẽ báo cho các cửa sổ báo cáo một phiên bản sai. Raymond Chen đề cập đến một số điều nữa: http://bloss.msdn.com/oldnewthing/archive/2003/12/23/45481.aspx#45590
Kiến thức của tôi về Chế độ tương thích là nó khiến một số lệnh gọi hệ thống Windows nói dối với chương trình.
Một ví dụ rõ ràng là các hàm GetVersionEx và GetVersion báo cáo phiên bản Windows được chỉ định thay vì phiên bản thực.
Đường dẫn tệp kiểu cũ cũng được dịch tự động khi một chương trình ở chế độ Tương thích đề cập đến một tệp trong các thư mục hệ thống nổi tiếng. Ví dụ C:\Documents and Settings
được dịch sang C:\Users\<user>\Documents
khi chạy trên Windows 7 một chương trình ở chế độ tương thích XP.
Bài viết này làm một công việc tốt để giải thích nó.
http://arstechnica.com/inif-t Technology / 2010/01 / windows-xp-mode /
Tuy nhiên, với Windows 7, Redmond đã cung cấp một giải pháp cho vấn đề: Chế độ Windows XP. Chế độ Windows XP sử dụng công nghệ ảo hóa để cho phép các ứng dụng chạy trên bản sao ảo của Windows XP hiển thị trong menu Bắt đầu của Windows 7 và trên màn hình nền Windows 7.