Freigeben über


DTrace-Programmierung

DTrace unterstützt die Programmiersprache D. In diesem Thema wird beschrieben, wie Sie mit dem Schreiben und Verwenden von DTrace-Skripts beginnen.

Allgemeine Informationen zu DTrace unter Windows finden Sie unter DTrace.

Ausführliche Informationen zu DTrace finden Sie in der OpenDTrace-Spezifikation Version 1.0 an der University Of Cambridge.

Hinweis

DTrace wird in den Insider-Builds von Windows nach Version 18980 und Windows Server Build 18975 unterstützt.

Zusätzliche Beispielskripts

Zusätzliche D-Skripts, die für Windows-Szenarien gelten, sind im Beispielverzeichnis des DTrace-Quellcodes verfügbar.

https://github.com/microsoft/DTrace-on-Windows/tree/windows/samples/windows

Eine Reihe von Opentrace-Toolkit-Skripts ist unter https://github.com/opendtrace/toolkitverfügbar.

Hello World

DTrace-Skripts sind einfache Textdateien, die Befehle und D-Programmierskriptelemente enthalten.

dtrace:::BEGIN
{
  trace("Hello World from DTrace!");
  exit(0);
}

Speichern Sie die Datei als helloworld.d.

Öffnen Sie ein Eingabeaufforderungsfenster als Administrator, und führen Sie das Skript mit der Option -s aus.

dtrace -s helloworld.d
dtrace: script '.\helloworld.d' matched 1 probe
CPU     ID                    FUNCTION:NAME
  0      1                           :BEGIN   Hello World from DTrace!

NtCreateUserProcess-Rückgabezeit

Sie können DTrace-Skripts erstellen, um die Zeit für mehrere Funktionen/Ereignisse nachzuverfolgen. Im Folgenden finden Sie ein einfaches Beispiel, das die NtCreateUserProcess-Funktion zwischen entry/return für den Erstellungsprozess nachverfolgt.


syscall::NtCreateUserProcess:entry
{
    self->ts = timestamp;
}

syscall::NtCreateUserProcess:return
{
    printf(" [Caller %s]: Time taken to return from create process is %d MicroSecond \n", execname, (timestamp - self->ts)/ 1000);
}

Speichern Sie die Datei als ntcreatetime.d, und verwenden Sie die Option -s, um das Testskript auszuführen.

C:\Windows\system32>dtrace -s ntcreatetime.d
dtrace: script 'ntcreatetime.d' matched 2 probes
CPU     ID                    FUNCTION:NAME
  0    183       NtCreateUserProcess:return  [Caller svchost.exe]: Time taken to return from create process is 51191 MicroSecond

  0    183       NtCreateUserProcess:return  [Caller SearchIndexer.]: Time taken to return from create process is 84418 MicroSecond

  0    183       NtCreateUserProcess:return  [Caller SearchIndexer.]: Time taken to return from create process is 137961 MicroSecond

Dateilösch-Tracker

In diesem Beispielskript wird der Syscall-Anbieter verwendet, um NtOpenFile für den Eintrag zu instrumentieren, und überprüft, ob das Flag übergeben wurde (Argument #5), um Löschvorgänge im gesamten System nachzuverfolgen.

Kopieren Sie das folgende Skript in filedeletetracker.d.

ERROR{exit(0);}

struct ustr{uint16_t buffer[256];};

syscall::NtOpenFile:entry
{
   this->deleted = arg5 & 0x00001000; /* & with FILE_DELETE_ON_CLOSE */

  if (this->deleted) {
        this->attr = (nt`_OBJECT_ATTRIBUTES*)
            copyin(arg2, sizeof(nt`_OBJECT_ATTRIBUTES));

        if (this->attr->ObjectName) {
            this->objectName = (nt`_UNICODE_STRING*)
                copyin((uintptr_t)this->attr->ObjectName,
                       sizeof(nt`_UNICODE_STRING));
          
            this->fname = (uint16_t*)
                copyin((uintptr_t)this->objectName->Buffer,
                       this->objectName->Length);

            printf("Process %s PID %d deleted file %*ws \n", execname,pid, 
			this->objectName->Length / 2, 
			 ((struct ustr*)this->fname)->buffer);
        }
    }
}

Verwenden Sie die Option -s, um das Testskript auszuführen.

Erstellen oder suchen Sie eine Datei, die Sie löschen möchten. Verschieben Sie die Datei in den Papierkorb, und leeren Sie dann den Papierkorb. Wenn die Datei gelöscht wird und das Ereignis ausgelöst wird, und die Informationen zum Löschen der Datei werden angezeigt.

C:\Windows\system32>dtrace -s filedeletetracker.d
dtrace: script 'filedeletetracker.d' matched 8 probes
CPU     ID                    FUNCTION:NAME
  0    512                 NtOpenFile:entry Process explorer.exe PID 4684 deleted file \??\C:\$Recycle.Bin\S-1-12-1-3310478672-1302480547-4207937687-2985363607\$ROSR3FA.txt

Dieses Programm wurde entwickelt, um weiterhin Dateilöschvorgänge zu überwachen. Drücken Sie STRG+C, um zu beenden.

Weitere größere Codebeispiele finden Sie im nächsten Thema DTrace Windows-Codebeispiele.

Weitere Informationen

DTrace unter Windows

DTrace ETW

DTrace-Windows-Codebeispiele

DTrace Live Dump