UNIXwork

Extended Attributes Teil 10: Windows Syscalls

10. Dezember 2019

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
Autor: Olaf | 0 Kommentare | Tags: windows, xattr

Extended Attributes Teil 9: Windows Commandline Tools

09. Dezember 2019

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
Autor: Olaf | 0 Kommentare | Tags: windows, xattr

VcXsrv Windows X Server

03. Dezember 2019

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.

XNEdit on Windows

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.

Autor: Olaf | 0 Kommentare | Tags: x11, windows

DTrace gibt es jetzt auch unter Windows

12. März 2019

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.

Autor: Olaf | 0 Kommentare | Tags: solaris, windows, linux, dtrace

Einheitliches Userinterface

02. Dezember 2016

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.

Autor: Olaf | 0 Kommentare | Tags: microsoft, windows, fun