Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Molti problemi di sicurezza del sistema sono causati da una gestione del buffer insufficiente e dal sovraccarico del buffer risultante. La gestione del buffer insufficiente è spesso associata alle operazioni di manipolazione delle stringhe. Le funzioni di manipolazione delle stringhe standard fornite dalle librerie di runtime del linguaggio C/C++ (strcat, strcpy, sprintf e così via) non impediscono la scrittura oltre la fine dei buffer.
Due nuovi set di funzioni di manipolazione delle stringhe, denominate funzioni di stringa sicura, forniscono un'elaborazione aggiuntiva per la gestione corretta del buffer nel codice. Queste funzioni di stringa sicure sono disponibili in Windows Driver Kit (WDK) e per Microsoft Windows XP SP1 e versioni successive di Driver Development Kit (DDK) e Windows SDK. Sono destinati a sostituire le controparti C/C++ predefinite e routine simili fornite da Windows.
Un set di funzioni di stringa sicure è destinato all'uso nel codice in modalità kernel. Queste funzioni sono prototipate in un file di intestazione denominato Ntstrsafe.h. Questo file di intestazione e una libreria associata sono disponibili in WDK.
L'altro set di funzioni di stringa sicure è destinato all'uso nelle applicazioni in modalità utente. Il file header corrispondente, Strsafe.h, contiene i prototipi di queste funzioni. Il file e una libreria associata sono disponibili in Windows SDK. Per altre informazioni su Strsafe.h, vedere Uso delle funzioni Strsafe.h.
Il set di funzioni stringa sicure in modalità kernel è costituito dai due subset seguenti:
Funzioni di stringa sicure per i caratteri Unicode e ANSI
Ognuna di queste funzioni è disponibile in una versione con suffisso W che supporta caratteri Unicode a byte doppio e una versione con suffisso A che supporta caratteri ANSI a byte singolo. Ad esempio, RtlStringCbCatN, che concatena due stringhe e limita la lunghezza della stringa accodata, è disponibile come RtlStringCbCatNW e RtlStringCbCatNA.
Funzioni di stringa sicure per le strutture di UNICODE_STRING
Ognuna di queste funzioni accetta una struttura UNICODE_STRING come parametro di input o output o entrambi. Ad esempio, RtlStringCbCopyUnicodeString accetta la struttura come parametro di input, RtlUnicodeStringCopyString accetta la struttura come parametro di output e RtlUnicodeStringCopy accetta la struttura sia come parametro di input che come parametro di output.
Le funzioni di stringa sicura in modalità kernel forniscono le funzionalità seguenti:
Ogni funzione di stringa sicura riceve le dimensioni del buffer di destinazione come input. La funzione può quindi garantire che non scriva oltre la fine del buffer.
Le funzioni stringa Unicode e ANSI terminano tutte le stringhe di output con un carattere NULL, anche se l'operazione tronca il risultato previsto.
Tutte le funzioni stringa sicure restituiscono un valore NTSTATUS, con un solo codice di esito positivo possibile (STATUS_SUCCESS).
La maggior parte delle funzioni stringa sicure è disponibile sia in una versione con conteggio dei byte che in una versione con conteggio dei caratteri. Ad esempio, RtlStringCbCata concatena due stringhe con conteggio di byte e RtlStringCchCata concatena due stringhe con conteggio di caratteri.
La maggior parte delle funzioni stringa sicure è disponibile in una versione estesa con suffisso ex che fornisce funzionalità aggiuntive. Ad esempio, RtlStringCbCatExa estende la funzionalità di RtlStringCbCata.
Questa sezione include gli argomenti seguenti: