Tôi sợ rất ít người biết nguyên nhân sâu xa của lỗi khởi chạy EXE 0xC0000018 bí ẩn vì Microsoft làm cho nó mơ hồ, thậm chí cho đến Windows 10. Khi đọc Ứng dụng lập trình của Jeffrey Richter cho MS Windows 4th-ed, tôi tình cờ phát hiện ra nó.
Nếu một DLL yêu cầu được tải tại một địa chỉ cố định (trong không gian địa chỉ ảo xử lý), nhưng yêu cầu không thể được đáp ứng, Windows sẽ xác nhận lỗi rất 0xC0000018. Nhưng không có manh mối rõ ràng nào để nói DLL nào gây ra vấn đề. Một tìm kiếm đơn giản trên Google về "0xC0000018" chỉ cho bạn thấy rất nhiều bài đăng của những người dùng gặp khó khăn.
Để sao chép, bạn có thể chuẩn bị một giải pháp (thuật ngữ Visual Studio) với một EXE và hai DLL và đặt cả hai DLL để có tùy chọn liên kết /FIXED /BASE:"0x44440000"và tải EXE ngầm hai tệp DLL, sau đó bạn sẽ thấy lỗi 0xC0000018 khi khởi chạy EXE.
Và vâng, xóa APPINIT_DLLStrong sổ đăng ký là đặt cược đầu tiên của bạn để loại bỏ các thủ phạm có thể. Những DLL đó sẽ được tải vào mọi tiến trình bạn khởi chạy để có thể phá hỏng cuộc sống của bạn.
Vậy thì làm thế nào để xác định chính xác thủ phạm DLL? Có lẽ có một cách, sử dụng dumpbin.exe để kiểm tra mọi DLL trong APPINIT_DLLShoặc các DLL được tải tự động có thể khác (trợ giúp với AutoRun ), kiểm tra từng cái một dumpbin -headers. Nếu không có .relocphần, nó là một DLL vị trí cố định .