2 votes

Windows 10 bash.exe (espace utilisateur linux) n'existe pas lorsqu'il est vérifié à partir d'une application 32 bits

Lorsqu'une application 32bit comme java ou python tente d'ouvrir c:\windows\system32\bash.exe ce fichier est tout simplement introuvable.

Par contre, il fonctionne parfaitement si le processus est en 64bit. J'ai créé une simple application en C pour vérifier son fonctionnement.

#include <stdio.h>
#include <windows.h>

int main(int argc, char *argv[]) {
char* path;
OFSTRUCT junk;

if (argc  != 2) {
 printf("provide path to file");
 return 1;
}
path = argv[1];
if( fopen( path, "r")) {
    printf("OK: Runtime reports file exists");
} else {
    printf("ERR: Runtime reports file does not exist");
}

printf("\n");
if (OpenFile(path, &junk,OF_EXIST) != HFILE_ERROR) {
    printf("OK: Win32API reports file exists");
} else {
    printf("ERR: Win32API reports file does not exist");
}

return 0;

}

Il indique OK/OK lorsqu'il est compilé et lié en x64 et ERR/ERR lorsqu'il est compilé en x86. Comment cela se fait-il ? Existe-t-il un moyen de "cacher" un fichier aux applications 32 bits sous Windows ?

4voto

Blorgbeard Points 38991

Il s'agit de la redirecteur de système de fichiers en action.

Dans la plupart des cas, lorsqu'une application 32 bits tente d'accéder à %windir% \System32 l'accès est redirigé vers %windir% \SysWOW64.

Ainsi, votre application 32 bits recherche C:\Windows\SysWOW64\bash.exe qui, vraisemblablement, n'existe pas.

La méthode recommandée pour l'ignorer :

Les applications 32 bits peuvent accéder au répertoire système natif en remplaçant %windir% par \Sysnative pour %windir% \System32. WOW64 reconnaît Sysnative comme un alias spécial utilisé pour indiquer que le système de fichiers ne doit pas rediriger l'accès.

Notez qu'il y a des redirections similaires pour l'option registre également.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X