Komfortabler Dateimanager mit vielen Funktionen

Windows Vista

hiberfil.sys unter Vista loswerden

By Sven on 10.10.2006 - 15:10 in Windows Vista with 10 Kommentare

Für den Ruhezustand verwendet Windows eine Datei hiberfil.sys, die im Hauptverzeichnis des Systemlaufwerks abgelegt wird. Die Größe der Datei entspricht dabei exakt der Größe des Hauptspeichers.

Die komplette Deaktivierung des Ruhezustands in Vista per Dialog ist anscheinend nicht mehr möglich. Unter XP gab es in den Energieoptionen noch eine Seite Ruhezustand. Unter Vista hat sich die Energieverwaltung komplett geändert. Man kann den Ruhezustand zwar deaktivieren, aber die hiberfil.sys wird dabei nicht entfernt.

Abhilfe schafft hier nur die Kommandozeile. Nach dem Öffnen der Eingabeaufforderung mit Adminrechten lässt sich der Ruhezustand mit powercfg -h off komplett deaktivieren und die Datei ist verschwunden.

(gefunden bei Chris)

Benutzerkontensteuerung in Vista

By Sven on 26.09.2006 - 10:09 in Windows Vista with 6 Kommentare

Bis einschließlich Windows XP arbeiten die meisten Anwender mit Administratorrechten. Damit dürfen sie alles machen, ebenso haben die ausgeführten Programme alle Rechte. Leider zählen dazu auch Würmer und Viren, so dass Microsoft mit dem kommenden Vista einige einschneidende Änderungen beschlossen hat. Dank der neuen Benutzerkontensteuerung laufen alle Programme grundsätzlich mit eingeschränkten Rechten. Mit den eingeschränkten Rechten ist der Schreibzugriff auf wichtige Verzeichnisse (Programmverzeichnis, Windows-Verzeichnis und Systemhauptverzeichnis) nicht mehr möglich, ebenso darf in der Registry nicht mehr in den HKML-Zweig geschrieben werden. Es ist zwar möglich, ein Programm über das Kontextmenü gezielt als Administrator zu starten, hier muss aber jeder Start zusätzlich bestätigt werden.

Für viele Entwickler dürfte sich die Benutzerkontensteuerung aber zu einer großen Herausforderung entwickeln. Ein Dateimanager sollte schon den Zugriff auf alle Verzeichnisse ermöglichen, ebenso darf ein Komprimierungsprogramm nicht daran scheitern, Dateien in das Programmverzeichnis zu entpacken. Das gilt natürlich auch für alle Anbieter von Hilfsbibliotheken für die Archivbehandlung, da diese in der Regel den eigentlichen Dateizugriff vornehmen. Auch das Ändern von Dateiverknüpfungen ist mit eingeschränkten Rechten nicht mehr möglich, da diese zwar im HKCR-Zweig gespeichert werden, der HKCR-Zweig aber eigentlich nur ein Unterzweig von HKLM ist. Das gleiche gilt auch für alle COM-Registrierungen.

In der Beta 2 hat mich die Benutzerkontensteuerung noch arg gestört, in der RC1 haben die nötigen Bestätigungsmeldungen aber stark abgenommen. Letztlich liegt es wohl an den Entwicklern selbst, die Anzahl der Meldungen durch ein durchdachtes Design auf ein nötiges Maß zu reduzieren. Mittlerweile muss ich sogar eingestehen, dass das Konzept durchaus seine Vorzüge hat.

Die Dokumentation für Entwickler ist allerdings mehr als spärlich. Es gibt zwar einige zum Teil recht umfangreiche Beschreibungen von Microsoft, die aber größtenteils nur das Konzept erklären. Hinweise zur technischen Implementierung findet man dagegen kaum, Beispielprogramme überhaupt nicht. Es bleibt einem derzeit also nichts anderes übrig, als sich selbst mühsam durch den Dschungel zu kämpfen.

SpeedCommander 11 läuft unter XP problemlos mit eingeschränkten Rechten. Bei Zugriffen auf den HLKM-Zweig der Registry, der z.B. beim Ändern der Dateizuordnungen oder bei der Registrierung von AddIns nötig ist, erscheint ein Anmeldedialog, mit dem man sich aus dem Programm heraus für die jeweilige Funktion kurz Administratorrechte verschaffen kann. Nach dem Verlassen der Funktion sind die erhöhten Rechte wieder weg. Unter Vista hilft dieses Verfahren aber nicht, da auch der normale Administratoraccount lediglich ein eingeschränkter Account ist und keine Rechte hat, auf den HKLM-Zweig der Registry zuzugreifen.

Das Konzept selbst ist aber das gleiche. Anstelle des Anmeldedialogs lässt sich unter Vista die Meldung der Benutzerkontensteuerung einblenden. Hier muss lediglich die Fortsetzen-Schaltfläche geklickt werden, die Eingabe des Administratorkennworts entfällt. Die eigentliche Änderung liegt aber darin, dass sich der Programmcode zum Schreiben in die Registry nicht in der Anwendung selbst befinden darf. Es ist zwingend erforderlich, diesen in eine zusätzliche Programmdatei (.EXE) oder in ein COM-Modul auszulagern.

Damit habe ich nun angefangen, allerdings wird erst der SpeedCommander 12 vollständig LUA-kompatibel sein. Der Hauptgrund liegt darin, dass fast jede Dateifunktion abgeklopft werden muss. Das fängt beim normalen Kopieren an und geht über FTP bis hin zu den Komprimierern, bei denen ich wohl den größten Aufwand erwarte. Das Kopieren selbst funktioniert bereits, hier schon einmal einige Screenshots.

Kopieren einer Datei in das Systemhauptverzeichnis:

Kopieren in das Hauptverzeichnis

Meldung der Benutzerkontensteuerung:

Meldung der Benutzerkontensteuerung

Kopierte Datei:

Ergebnis

Damit der Arbeitsfluss nicht ständig durch die Benutzerkontensteuerung gestört wird, ist die Meldung nur beim allerersten Zugriff auf ein geschütztes Verzeichnis zu sehen. Alle weiteren Zugriffe (auch auf andere Verzeichnisse) laufen dann ohne Störungsmeldung ab.

Stimmen zu Vista

By Sven on 26.06.2006 - 15:27 in Windows Vista with 6 Kommentare

Nach meinem ersten (und aufgrund knapper Zeit bisher leider einzigen) Artikel in der c’t 19/2004 zum Zonenmodell in Windows XP SP2 sind in der aktuellen Ausgabe 14/2006 drei Zitate zum ersten Eindruck von Vista abgedruckt. Viel Spaß beim Lesen. 🙂

Vista und das ShellTaskScheduler-Objekt (2)

By Sven on 01.06.2006 - 16:52 in Windows Vista with Keine Kommentare

Nach der Veröffentlichung des Windows-SDKs für Vista Beta 2 bin ich der Sache mit dem ShellTaskScheduler-Objekt noch einmal auf den Grund gegangen. Der Grund für das Problem beim Erstellen des Objekts liegt daran, dass Vista nur noch das IShellTaskScheduler-Interface unterstützt, aber nicht mehr das IShellTaskScheduler2-Interface. Der von mir verwendete intelligente Zeiger IShellTaskScheduler2Ptr braucht also nur zu IShellTaskSchedulerPtr degradiert werden, dann klappt alles wie erwartet. Durch den Wegfall des IShellTaskScheduler2-Interfaces muss man sich dann aber auf die Methoden von IShellTaskScheduler beschränken.

Vista über NTDLR und BOOT.INI starten

By Sven on 29.05.2006 - 11:51 in Windows Vista

Auf meinem Vista-Rechner sind drei Systeme (Windows XP, Windows XP x64 und Vista) installiert. Jedes System befindet sich auf einer primären Partition, vor der Installation werden die beiden anderen primären Partitionen ausgeblendet. So ist sichergestellt, dass die Laufwerke in der erweiterten Partition unter jedem System gleich sind (D, E und F). Im normalen Betrieb sind dann wieder alle drei primären Partitionen sichtbar und sollten über das NTLDR-Bootmenü der ersten Partition (x64) gestartet werden.

Mit Vista hat sich Microsoft leider vom NTLDR-Konzept verabschiedet und benutzt stattdessen nun einen Boot Configuration Data Store. Dieser Speicher ist nicht mehr so ohne weiteres editierbar. Die Konfiguration lässt sich nur noch mit dem Kommandozeilenprogramm “bcdedit.exe” bearbeiten, dessen Syntax ist aber nicht ganz so einfach zu verstehen.

Nach der Installation von Vista habe ich nun versucht, die beiden XP-Systeme in das Bootmenü mit aufzunehmen. Während der Installation waren sie versteckt, ansonsten hätte Vista ihnen automatisch die Laufwerksbuchstaben “D” und “E” zugeteilt. Die Laufwerke in der erweiterten Partition wären dann zu “F”, “G” und “H” geworden – ein nicht gewollter Zustand. Über Google sind zwar einige Tips zur Verwendung von bcdedit.exe zu finden, viel Erfolg hatte ich aber nicht.

Blieb also nur noch der Ansatz, über den NTLDR zu gehen. Ich erinnerte mich daran, dass man ja auch Linux über den NTLDR starten kann, wenn man den Bootsektor der Linuxpartition in eine Datei speichert und den Dateinamen dann in die Boot.ini einträgt. Mit Hilfe von Tiny Hexer habe ich den ersten Sektor der Vista-Partition als BOOTSECT.VIS gespeichert und in das Hauptverzeichnis kopiert, in dem sich auch NTDLR befindet. Nun musste ich nur noch die neue Option eintragen und beim nächsten Bootvorgang hatte ich dann die Wahl zwischen allen drei Systemen. Vista lief nach dem Start über die Bootsektor-Datei ganz normal hoch.

Die Boot.ini sieht nach der Anpassung dann so aus:

[boot loader]
timeout=3
default=C:\BOOTSECT.VIS
[operating systems]
C:\BOOTSECT.VIS="Windows Vista"
multi(0)disk(0)rdisk(0)partition(2)\WINDOWS="Windows XP Professional" /noexecute=optin /fastdetect
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Windows XP Professional x64 Edition" /noexecute=optin /fastdetect

Windows SDK für Vista (Beta 2)

By Sven on 26.05.2006 - 11:49 in Windows Vista with Keine Kommentare

Microsoft hat nun auch das Windows SDK (früher Platform SDK) für die Beta 2 von Vista veröffentlicht. Leider ist immer noch keine angepasste Installation möglich, d.h. das Zielverzeichnis kann nicht geändert werden. Es wird immer in das Windows-Programmverzeichnis installiert. Man sollte also sicherstellen, dass man hier noch das eine oder andere Gigabyte Platz hat.

Erste Erfahrungen mit Vista (Beta 2)

By Sven on 24.05.2006 - 17:46 in Windows Vista with 4 Kommentare

Heute morgen habe ich gleich mal die Beta 2 installiert und war gespannt, was sich seit der letzten CTP alles zum Positiven geändert hat. Der Installationsfortschritt ist nun sehr viel besser zu sehen, man muss nicht mehr rätseln, ob der Rechner noch lebt. Lediglich beim ersten Einloggen bleibt der Bildschirm eine längere Zeit dunkel, nur das Flackern der Festplatten-LED verrät, dass etwas passiert.

Im Gegensatz zur letzten Version ließ sich Visual C++ 6 zzgl. SP6 vollständig installieren und starten. Nach dem Übertragen der Einstellungen wollte es aber plötzlich nicht mehr so richtig, Windows entdeckte während des Startens der IDE ein Problem. Ich habe leider nicht herausfinden können, wie man Vista bei einer Schutzverletzung wieder zur Anzeige der W2K-Meldungen bewegen kann. So blieb zum Finden der Ursache nur “Versuch und Irrtum”. Am Ende zeigte sich, dass das Developer Studio durch das Laden einer Makrodatei (.dsm) zur Aufgabe gezwungen wurde. Auch eine leere Makrodatei brachte keine Abhilfe, so muss ich eben erst einmal auf Makros verzichten. Das ist im Moment aber nicht ganz so tragisch, da ich mich unter Vista wohl größtenteils nur zur Suche von Fehlern und Inkompatibilitäten aufhalten werde.

Die “User Account Protection” nervt auf Dauer doch sehr, sie lässt sich aber sehr leicht über MSConfig.exe deaktivieren. Die Effekte beim Öffnen und Schließen von Dialogboxen und Hinweisfenstern sind noch gewöhnungsbedürftig und erzeugen eine gewisse Unruhe. Die Programmsymbole auf dem Desktop werden in 48×48 Punkten angezeigt, lassen sich aber durch Rechtsklick auf den Desktop auch wieder in gewohnter Größe darstellen.

SpeedCommander läuft nach ersten Tests nun ohne größere Probleme. Beim Aktivieren und Markieren von Einträgen in der Dateiliste werden die fokussierten Dateien in einer leicht anderen Farbe gezeichnet. Der Grund liegt wohl in einem geänderten Verhalten der Listenansicht für Einträge unterhalb des Mauszeigers, das lässt sich aber leicht korrigieren. Der Befehl zum Anlegen einer Verknüpfung wurde unter Vista wieder einmal geändert, hier ist auch eine Anpassung nötig. Während des Navigierens sind mir viele Ordner mit Verknüpfungen aufgefallen, beim Wechsel landete ich immer in einem leeren Ordner. Hier wird der Debugger aber sicherlich weiterhelfen.

In The Windows Vista Developer Story: Application Compatibility Cookbook zeigt Microsoft übrigens wesentliche Änderungen in Vista und gibt eine Reihe von Tips zur Anpassung von Anwendungen für Vista.

Vista Beta 2 verfügbar

By Sven on 23.05.2006 - 20:07 in Windows Vista with 3 Kommentare

MSDN-Abonnenten können ab sofort die Beta 2 von Vista für x86 und x64 herunterladen. Die ISO-Dateien sind 3200 MB bzw. 4110 MB groß und enthalten folgende Versionen:

  • Windows Vista Ultimate Beta 2
  • Windows Vista Business Beta 2
  • Windows Vista Home Premium Beta 2
  • Windows Vista Home Basic Beta 2

Welche Version installiert wird, entscheidet der Produktkey. Ebenfalls angeboten wird die Beta 2 von Windows “Longhorn” Server (2016 MB bzw. 2588 MB). Nicht-MSDN-Abonnenten sollen die Beta 2 von Vista in den nächsten Wochen über das Windows Vista Customer Preview Programm erhalten können.

Vista und das ShellTaskScheduler-Objekt

By Sven on 20.03.2006 - 17:48 in Windows Vista with Keine Kommentare

Bis einschließlich zum SpeedCommander 10 habe ich Hintergrundaufgaben immer in einem zusätzlichen Thread abgearbeitet. Neben der Verwaltung für die Threads war nachteilig, dass der Hintergrundthread immer erst gestartet werden konnte, nachdem alle Dateieinträge der Dateiliste hinzugefügt wurden. Weiterhin wurden immer alle Informationen ermittelt, da der Hintergrundthread nicht genau erkennen konnte, ob ein Element nun angezeigt wird oder nicht.

Während der Entwicklung von SpeedCommander 11 habe ich dann das ShellTaskScheduler-Objekt entdeckt. Das ShellTaskScheduler-Objekt wird von der Shell zur Verfügung gestellt und implementiert die Schnittstelle IShellTaskScheduler. Es wird mit kleinen Aufgaben gefüttert, die es der Reihe nach in einem Hintergrundthread abarbeitet. Eine Aufgabe ist ein kleines COM-Objekt, welches die Schnittstelle IRunnableTask implementieren muss. Über diese Schnittstelle kann das ShellTaskScheduler-Objekt die Aufgabe dann starten, anhalten, weiterführen oder beenden. Der Programmierer muss sich mit der Threadsteuerung überhaupt nicht beschäftigen.

Das ShellTaskScheduler-Objekt wird im SpeedCommander 11 für alle Hintergrundaufgaben bei der Anzeige eines Ordners verwendet. Dazu gehört das Ermitteln der Dateisymbole, zusätzlicher Informationen in der Detailansicht und das Berechnen der Ordnergrößen. Speziell bei der Anzeige von dynamischen Icons und Miniaturansichten lässt sich im Vergleich zu früheren Versionen ein großer Geschwindigkeitsschub feststellen.

Unter Vista hat das aber plötzlich nicht mehr funktioniert, alle Icons sahen bis auf die Programmdateien gleich aus. Im Debugger musste ich erkennen, dass die Erstellung des ShellTaskScheduler-Objekts fehlschlug:

IShellTaskScheduler2Ptr pScheduler;
HRESULT hResult = CoCreateInstance(CLSID_ShellTaskScheduler, NULL, CLSCTX_INPROC, IID_IShellTaskScheduler, (void**) &pScheduler);

Die Funktion CoCreateInstance gibt unter Vista den Fehlercode E_NOINTERFACE zurück, während es auf allen anderen Systemen von Windows 98 bis Windows XP nie Probleme gab.

Ändert man nun die gesuchte Schnittstelle von IID_IShellTaskScheduler auf IID_IUnknown, so wird das ShellTaskScheduler-Objekt erstellt und kann dann ganz normal verwendet werden:

IShellTaskScheduler2Ptr pScheduler;
HRESULT hResult = CoCreateInstance(CLSID_ShellTaskScheduler, NULL, CLSCTX_INPROC, IID_IUnknown, (void**) &pScheduler);

Unklar bleibt mir aber, warum Microsoft das ganze geändert hat. Die angepasste Version funktioniert übrigens auch auf allen bisherigen Systemen.

An invalid argument was encountered

By Sven on 04.01.2006 - 09:28 in Windows Vista with 10 Kommentare

Nach der einstündigen Installation von Vista 5270 habe ich auch einmal probehalber den SpeedCommander 11 gestartet. Beim Wechseln zwischen den verschiedenen Laufwerkstypen (Lokal, Netzwerkumgebung, AddIns, FTP) kam immer die Meldung

—————————
SpeedCommander
—————————
An invalid argument was encountered.
—————————
OK
—————————

Auch beim Beenden wurde diese Meldung mehrmals angezeigt. Da ich nicht erst noch einen Compiler installieren wollte, habe ich die ganze Sache einmal mit der altbewährten MessageBox-Methode debuggt. Hierbei wird die mögliche Fehlerursache mit jeweils zwei MessageBox-Aufrufen geklammert, so dass man das Problem Schritt für Schritt eingrenzt.

Die mögliche Ursache habe ich nun gefunden, die Meldung wird von Windows nach Aufruf der Funktion DestroyWindow angezeigt. Erklären kann ich sie mir aber nicht, da das zu entfernende Fenster gültig ist. Da kann man wohl nur darauf hoffen, dass sich dieses Problem bis zur finalen Version löst.

Ansonsten bin ich von Vista überhaupt nicht angetan. Viele Einstellungen sind nun völlig anders erreichbar, ich musste ewig suchen, um bestimmte Sachen zu finden. Die deutsche Tastatureinstellung wird übrigens erst nach dem Einloggen aktiv, das erschwert die Verwendung von Sonderzeichen für das Kennwort extrem.

Wer sich die x64-Version installieren möchte, der sollte darauf achten, genügend Festplattenplatz frei zu haben. Unterhalb von 13 GB für die Systempartition tut sich nichts, bei der x32-Version liegt die Grenze bei 8.5 GB.

Top