Für den Zugriff auf Alternate Data Streams benötigt man unter Windows keine speziellen Syscalls, da die Auswahl des Streams ein Teil des Dateipfades ist. Daher kann man z.B. auch mit fopen oder vermutlich jeder ähnlichen Funktion in anderen Programmiersprachen auf einen anderen Stream zugreifen.
FILE *f = fopen("test.txt:stream2", "w");
fprintf(f, "Hello ADS\n");
fclose(f);
Was jedoch nicht so einfach geht ist, eine Liste aller Streams einer Datei zu erhalten. Zum Einsatz kommen dabei die Funktionen FindFirstStreamW und FindNextStreamW. Diese funktionieren ähnlich wie die Funktionen zum Auflisten von Verzeichniseinträgen (FindFirstFileW, FindNextFileW). Hier ein Beispiel, wie die Funktionen benutzt werden:
#include <stdio.h>
#include <windows.h>
int main(int argc, char** argv) {
WIN32_FIND_STREAM_DATA findData;
HANDLE h = FindFirstStreamW(L"test.txt", FindStreamInfoStandard, &findData, 0);
if(h == INVALID_HANDLE_VALUE) {
return 1;
}
do {
printf("%S\n", findData.cStreamName);
} while(FindNextStreamW(h, &findData));
return 0;
}
Das Format von cStreamName ist :streamname:$streamtype. Streamtype ist in der Regel immer DATA (ich kenne kein Beispiel, in dem dies nicht der Fall ist). Für den Fall, dass die Datei test.txt in dem Beispiel einen zweiten Stream mit dem Namen mystream hat, wäre die Ausgabe folgendermaßen:
::$DATA
:mystream:$DATA
Windows unterstützt Extended Attributes in Form von Alternate Data Streams (ADS). Ähnlich wie unter Solaris sind Extended Attributes damit keine einfachen Key/Value-Paare, sondern Datei-Streams. Jede Datei hat einen Haupt-Stream mit dem Namen :$DATA. Daneben können aber weitere Streams für eine Datei existieren.
Zugegriffen wird auf ein Attribut bzw. Alternate Data Stream, in dem an den Dateinamen der Stream-Name, getrennt durch einen Doppelpunkt, angehängt wird.
> echo Hello World > test.txt
> type test.txt
Hello World
> echo my attribute value > test.txt:myattribute
> type test.txt:myattribute
my attribute value
Auf den eigentlichen Dateiinhalt kann auch mit dem Stream-Namen :$DATA zugegriffen werde, was auch schon Ursache für Sicherheitslücken war. Den IIS konnte man so austricksen und den Inhalt von ASP-Dateien erhalten, in dem man ::$DATA an die URL angehangen hat.
Da der Stream Teil des Dateipfades ist, kann eigentlich mit jedem beliebigen Programm darauf zugegriffen werden, z.B. auch mit Notepad:
> notepad test.txt:myattribute
Lustigerweise funktioniert dies nicht in den Powershell-Cmdlets. Diese haben jedoch Parameter für den Zugriff auf ADS. Z.B. kann Get-Item alle Streams einer Datei auflisten:
PS D:\> Get-Item -path test.txt -stream *
PSPath : Microsoft.PowerShell.Core\FileSystem::D:\test.txt::$DATA
PSParentPath : Microsoft.PowerShell.Core\FileSystem::D:\
PSChildName : test.txt::$DATA
PSDrive : D
PSProvider : Microsoft.PowerShell.Core\FileSystem
PSIsContainer : False
FileName : D:\test.txt
Stream : :$DATA
Length : 14
PSPath : Microsoft.PowerShell.Core\FileSystem::D:\test.txt:myattribute
PSParentPath : Microsoft.PowerShell.Core\FileSystem::D:\
PSChildName : test.txt:myattribute
PSDrive : D
PSProvider : Microsoft.PowerShell.Core\FileSystem
PSIsContainer : False
FileName : D:\test.txt
Stream : myattribute
Length : 21
Um X11-Anwendungen unter Windows auszuführen, benötigt man einen X-Server. Empfehlenswert ist da VcXsrv. Damit ist es problemlos möglich, Remote-X11-Anwendungen innerhalb von ssh-Sitzungen mit Putty auszuführen. Ebenso eignet sich VcXsrv für den Fall, dass man mittels WSL grafische Anwendungen ausführen möchte.
VcXsrv kann die X-Clients als einzelne separate Fenster in Windows anzeigen, aber auch im Vollbildmodus betrieben werden, was das Ausführen einer kompletten X11-Desktop-Sitzung möglich macht.
Copy & Paste funktioniert und auch bei der Texteingabe mit Umlauten sind mir keine Probleme aufgefallen. Das ganze macht für mich einen ganz brauchbaren Eindruck.
Microsoft kann einen immer mal wieder überraschen, und so ist es ihnen auch diesmal gelungen, in dem sie DTrace auf Windows portiert haben.
DTrace ist ein Framework um den Kernel und auch Userspace-Programme zu analysieren. Dieses wurde von Sun Microsystems entwickelt und war 2005 erstmals Teil von Solaris. Dank der Open Source Lizenz wurde es recht bald auch von FreeBSD und Mac OS X adaptiert.
Auch eine Linux-Portierung ist verfügbar, und da DTrace mitlerweile auch GPL-lizensiert ist, könnte es theoretisch auch problemlos in Linux Einzug halten. Vermutlich werden die Distributionen aber eher auf das recht neue bpftrace setzen, welches sehr große Ähnlichkeit zu DTrace hat.
Und wenn Microsoft jetzt die guten Solaris-Features übernimmt, würde ich ihnen noch empfehlen, ZFS für Windows zu portieren.
Ich finde den Fall einfach zu erbärmlich um ihn nicht zu erwähnen.
User creation dialog design and usability
Linux-Desktops wird oft nachgesagt, dass sie inkonsistente Userinterfaces haben, jede Anwendung nutzt ein anderes Toolkit mit anderem Look and Feel. Das Design stammt oft von irgendwelchen C-Hackern, die keine Ahnung von GUI-Gestaltung haben. Aber alle diese Probleme hat man mitlerweile auch bei Windows. Jede Microsoftanwendung hat ein anderes Look and Feel. Und solche lächerlichen Fehler wie uneinheitliche Positionen für Buttons darf es bei einem so großen Unternehmen nicht geben.