windows - Win32 32-bit procesbelastning 64-bit kernel32.dll

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg oplever, at 32-bit Win32-konsolprogrammer læser 64-bit versionen af ​​kernel32.dll på en bestemt maskine, der kører Windows Server 2012 R2 Standard.


Brug af Dependency Walker med et simpelt HelloWorld program ser sådan ud: [10]


Indlæser 64-bit versionen af ​​kernel32.dll [11]


Det lægger korrekt 32-bit kernel32 på andre maskiner.


Indlæser 32-bit versionen af ​​kernel32.dll [12]


Værdien af ​​PATH synes at være, hvis den ikke er identisk, så det mindst indeholder de relevante stier i nøjagtig samme rækkefølge på de forskellige maskiner.


Ifølge denne side fra Microsoft er søgeordet for DLL'er: [13]



  1. Den mappe, hvor det eksekverbare modul til den aktuelle proces er placeret.

  2. Den nuværende mappe.

  3. Windows-systemkatalogen. Funktionen GetSystemDirectory henter stien i denne mappe.

  4. Windows-mappen. Funktionen GetWindowsDirectory henter stien i denne mappe.

  5. De mapper, der er angivet i PATH miljøvariablen.



Jeg gætter på, at denne specifikke maskine GetSystemDirectory returnerer stien til Windows/system32 i stedet for Windows/SysWOW64 eller at kortlægningen fra system32 til SysWOW64 til 32-bit processer fungerer ikke korrekt, men det er kun kvalificerede gæt.


Enhver ide om, hvad der forårsager denne adfærd?

Bedste reference


Dependency Walker rapporterer afhængighederne forkert. Dens statiske analyse bliver sommetider forvirret mellem 32 og 64 bit moduler. Typisk er det, når du kører en 64 bit version af Dependency Walker mod en 32 bit mål eksekverbar, eller omvendt.


Vær sikker på at dit 32-bits program læser 32-bit versionen af ​​kernel32.