Condividi tramite


Programmazione DTrace

DTrace supporta il linguaggio di programmazione D. Questo argomento descrive come iniziare a scrivere e usare script DTrace.

Per informazioni generali su DTrace in Windows, vedere DTrace.

Per informazioni dettagliate su DTrace, vedere la specifica OpenDTrace versione 1.0 all'Università di Cambridge.

Nota

DTrace è supportato nelle build Insider di Windows dopo la versione 18980 e Windows Server build 18975.

Script di esempio aggiuntivi

Gli script D aggiuntivi applicabili per gli scenari Di Windows sono disponibili nella directory degli esempi del codice sorgente DTrace.

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

Un set di script opentrace toolkit è disponibile all'indirizzo https://github.com/opendtrace/toolkit.

Hello World

Gli script DTrace sono file di testo semplici che contengono comandi ed elementi di script di programmazione D.

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

Salvare il file come helloworld.d.

Aprire una finestra del prompt dei comandi come amministratore ed eseguire lo script usando l'opzione -s.

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

NtCreateUserProcess return time

È possibile creare script DTrace per tenere traccia del tempo impiegato tra più funzioni/eventi. Di seguito è riportato un semplice esempio che tiene traccia della funzione NtCreateUserProcess tra entry/return per il processo di creazione.


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);
}

Salvare il file come ntcreatetime.d e usare l'opzione -s per eseguire lo script di test.

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

Strumento di eliminazione file

Questo script di esempio usa il provider syscall per instrumentare NtOpenFile sulla voce e verifica la presenza di flag passati (argomento 5) per tenere traccia delle eliminazioni nel sistema.

Copiare lo script seguente 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);
        }
    }
}

Usare l'opzione -s per eseguire lo script di test.

Creare o individuare un file da eliminare. Spostare il file nel Cestino e quindi svuotare il Cestino. Quando il file viene eliminato e verrà generato l'evento e verranno visualizzate le informazioni sull'eliminazione del file.

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

Questo programma è progettato per continuare a monitorare le eliminazioni di file. Premere CTRL+C per uscire.

Per altri esempi di codice più grandi, vedere l'argomento successivo DTrace Windows Code Samples (Esempi di codice di DTrace Windows).

Vedere anche

DTrace in Windows

DTrace ETW

Esempi di codice di Windows DTrace

DTrace Live Dump