Computer >> Hướng Dẫn Máy Tính >  >> Hệ Thống >> Windows

Vấn đề hàm CreateWindowEx cho ứng dụng 32-bit trong Windows 10

Trong một số trường hợp, sau khi nâng cấp lên phiên bản mới hơn, Windows 10 gây ra sự cố hoặc các vấn đề khác khi nó gọi hàm CreateWindowEx từ msctf.dll khi cửa sổ được tạo trong một số ứng dụng 32-bit. Trong bài viết này, chúng ta sẽ hiểu hàm CreateWindowEx là gì – khám phá các nguyên nhân có thể gây ra lỗi hàm này và sau đó cung cấp giải pháp được khuyến nghị để khắc phục vấn đề.

Hiểu hàm CreateWindowEx

Vấn đề hàm CreateWindowEx cho ứng dụng 32-bit trong Windows 10

Các ứng dụng Windows, bao gồm ứng dụng .NET sử dụng Windows Forms hoặc Windows Presentation Foundation (WPF), tạo cửa sổ của chúng bằng cách gọi hàm CreateWindowExA hoặc CreateWindowExW.

Cả hai hàm nội bộ gọi một hàm USER32 chung sẽ thực hiện một số xác thực tham số, như kiểu cửa sổ (window styles) và handle được chỉ định trong lời gọi, xử lý tạo cửa sổ con MDI nếu kiểu cửa sổ mở rộng WS_EX_MDICHILD được chỉ định và xử lý ngữ cảnh kích hoạt (activation context) hiện tại cho luồng gọi. Nếu mọi thứ ổn ở phía USER32 của lời gọi CreateWindowEx, nó sau đó gọi vào triển khai kernel-mode (WIN32K) của CreateWindowEx.

CreateWindowEx sẽ thực hiện các tác vụ sau khi cố gắng tạo đối tượng cửa sổ mới:

  • Xác định việc tạo handle cho đối tượng cửa sổ mới có vượt quá hạn ngạch handle User cho tiến trình gọi hay không.
  • Cấp phát bộ nhớ cho đối tượng cửa sổ mới từ heap của desktop.
  • Khởi tạo bộ nhớ cho đối tượng cửa sổ mới.
  • Tạo handle cho đối tượng cửa sổ mới trong bảng handle User.

Nguyên nhân gây ra lỗi CreateWindowEx

Một số điều kiện có thể kích hoạt vấn đề hàm CreateWindowEx được liệt kê như sau:

  • Lớp cửa sổ được chỉ định không tồn tại.
  • Sử dụng kiểu cửa sổ hoặc kiểu cửa sổ mở rộng không hợp lệ.
  • Sử dụng handle User không hợp lệ, như handle cửa sổ và handle menu.
  • Cố gắng tạo cửa sổ con mà không chỉ định cửa sổ cha.
  • Cố gắng tạo cửa sổ con hoặc cửa sổ sở hữu và cha/người sở hữu được chỉ định thuộc desktop khác với luồng gọi.
  • Tạo cửa sổ con hoặc sở hữu sẽ vượt quá giới hạn cửa sổ lồng nhau.
  • Tạo đối tượng cửa sổ mới sẽ vượt quá hạn ngạch handle cho tiến trình gọi.
  • Không đủ heap khả dụng trong heap của desktop để cấp phát bộ nhớ cho đối tượng cửa sổ mới.
  • Không có mục khả dụng trong bảng handle User.

Khắc phục vấn đề hàm CreateWindowEx cho ứng dụng 32-bit trong Windows 10

Microsoft đã cung cấp giải pháp thay thế (workaround) cho vấn đề hàm CreateWindowEx.

Để khắc phục vấn đề này, bạn phải quay lại (roll back) cài đặt Windows 10 về phiên bản trước.

Tùy chọn quay lại (rollback) trong Windows 10 có sẵn trong 10 ngày (trong hầu hết các trường hợp) sau khi bạn đã nâng cấp cài đặt Windows 10.

Thao tác này giữ lại tệp tin cá nhân của bạn, nhưng gỡ bỏ ứng dụng và driver được cài đặt sau nâng cấp, và cũng đảo ngược bất kỳ thay đổi nào bạn đã làm đối với cài đặt.

Nếu tùy chọn quay lại không khả dụng – sao lưu tệp tin cá nhân của bạn, sau đó bạn có thể liên hệ hỗ trợ IT hoặc helpdesk hoặc Hỗ trợ Microsoft để giúp khôi phục thiết bị về phiên bản Windows 10 trước.

Đó là tất cả!

PS: Microsoft đang làm việc trên giải pháp và sẽ cung cấp cập nhật trong bản phát hành Windows 10 sắp tới.

Vấn đề hàm CreateWindowEx cho ứng dụng 32-bit trong Windows 10