Merkwürdiges Verhalten von SlideToShutdown [Windows]

Für sonstige Unterhaltungen, welche nicht direkt mit Lazarus zu tun haben
Antworten
KenntKeinSchwein AG
Beiträge: 26
Registriert: So 4. Dez 2016, 13:35

Merkwürdiges Verhalten von SlideToShutdown [Windows]

Beitrag von KenntKeinSchwein AG »

Hallo allerseits,
ich habe grade eben eine merkwürdige Entdeckung gemacht. Es gibt ja unter Windows (8 und neuer) die Datei "SlideToShutDown.exe" in system32. Zum Spaß wollte ich diese Datei mal von einem selbstgeschriebenen Programm aufrufen, musste jedoch feststellen, dass die Datei durch die Prüfung von FileExists nicht existiert.

Und nun wird es noch viel Merkwüriger: Wenn ich eine cmd von meinem Programm starten lasse (mit ShellExecute) und "dir /a *slide*" in system32 eingebe, wird die Datei ebenfalls nicht gefunden. Wenn ich die cmd aber über den Ausführen-Dialog starte und das gleiche mache, wird die Datei gefunden (über den Explroer wird sie auch gefunden). Ich füge mal ein Screenshot der beiden cmds an (oben ist die cmd, die von meinem Programm aufgerufen wurde. Unten die über den Ausführen-Dialog).

Ich habe schon über den Process Explorer herausgefunden, dass es (wie ich vermutet habe) ein Immersive Prozess (UWP-App) ist. Daran kann es allerdings nicht liegen, da bspw. die exe-Dateien von Edge in "C:\Windows\SystemApps\Microsoft.MicrosoftEdge_8wekyb3d8bbwe" über meine cmd sichtbar sind.

Dass es virtuelle Verzeichnisse und Dateien in Windows seit Vista gibt ist mir bewusst, allerdings verhalten diese sich anders in der cmd.
Dateianhänge
slidetoshutdown.png

Michl
Beiträge: 2505
Registriert: Di 19. Jun 2012, 12:54

Re: Merkwürdiges Verhalten von SlideToShutdown [Windows]

Beitrag von Michl »

Unter einem 64bit Windows werden die Anfragen auf das System32 Verzeichnis auf das SysWOW64 Verzeichnis umgeleitet. Wenn die Datei dort nicht vorhanden ist, kann sie nicht gefunden bzw. ausgeführt werden.

Habe es eben mal getestet. So geht das bei mir auf Windows10 (ein Test, ob die Datei vorhanden ist, bzw. ob es sich um ein 64bit OS handelt, habe ich bei dem Bsp nicht eingebaut):

Code: Alles auswählen

uses ..., process;
...
function Disable64FsDirection(var OldValue: LongBool): LongBool; stdcall; external 'kernel32' name 'Wow64DisableWow64FsRedirection';
function Revert64FsDirection(var Value: LongBool): LongBool; stdcall; external 'kernel32' name 'Wow64RevertWow64FsRedirection';
 
procedure TForm1.Button1Click(Sender: TObject);
var
  aProcess: TProcess;
  aExecFile: string;
  OldDirection: LongBool;
begin
  OldDirection := False;
  if not Disable64FsDirection(OldDirection) then
    raise Exception.Create('Disable of 64 redirection failed');
 
  aExecFile := 'C:\Windows\System32\SlideToShutDown.exe';
  aProcess := TProcess.Create(nil);
  try
    aProcess.Options := [];
    aProcess.CurrentDirectory := ExtractFileDir(aExecFile);
    aProcess.Executable := ExtractFileName(aExecFile);
    aProcess.Execute;
  finally
    aProcess.Free;
    if not Revert64FsDirection(OldDirection) then
      raise Exception.Create('Enable previous 64 redirection failed');
  end;
end

Bsp. anbei.
Dateianhänge
TestShutDown.zip
(2.21 KiB) 63-mal heruntergeladen

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection; 

KenntKeinSchwein AG
Beiträge: 26
Registriert: So 4. Dez 2016, 13:35

Re: Merkwürdiges Verhalten von SlideToShutdown [Windows]

Beitrag von KenntKeinSchwein AG »

Michl hat geschrieben:Unter einem 64bit Windows werden die Anfragen auf das System32 Verzeichnis auf das SysWOW64 Verzeichnis umgeleitet.
Stimmt, da war was. Wenn man mal wieder den Wald vor lauter Bäumen nicht sieht ;) . Vielen Dank.

Antworten