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).