Obawiam się, że bardzo niewiele osób zna pierwotną przyczynę tajemniczego błędu uruchamiania 0xC0000018 EXE, ponieważ Microsoft sprawia, że jest niejasny, nawet do Windows 10. Podczas czytania aplikacji programistycznych Jeffreya Richtera dla MS Windows 4-go, znalazłem to.
Jeśli biblioteka DLL wymaga załadowania pod stałym adresem (w wirtualnej przestrzeni adresowej procesu), ale wymaganie nie może zostać spełnione, system Windows zgłasza błąd 0xC0000018. Ale nie ma wyraźnej wskazówki, która by wskazać, które biblioteki DLL powodują problem. Proste wyszukiwanie w Google „0xC0000018” po prostu wyświetla mnóstwo postów zdezorientowanych użytkowników.
Aby odtworzyć, możesz przygotować rozwiązanie (termin Visual Studio) z jednym plikiem EXE i dwiema biblioteką DLL, i ustawić obydwie biblioteki DLL na opcję łączenia /FIXED /BASE:"0x44440000"
i mieć domyślnie ładowanie dwóch bibliotek DLL przez EXE, a następnie przy uruchomieniu EXE zobaczysz błąd 0xC0000018.
I tak, wyczyszczenie APPINIT_DLLS
rejestru jest pierwszym krokiem do pozbycia się potencjalnych winowajców. Te biblioteki DLL będą ładowane do każdego uruchamianego procesu, więc mogą zrujnować twoje życie.
Jak więc wskazać rzeczywistą winowajcę DLL? Być może istnieje sposób, użyj dumpbin.exe do sprawdzenia każdej biblioteki DLL APPINIT_DLLS
lub innych możliwych automatycznie ładowanych bibliotek DLL (pomoc w AutoRuns ), sprawdź je pojedynczo za pomocą dumpbin -headers
. Jeśli nie ma .reloc
sekcji, jest to biblioteka DLL o stałej lokalizacji .