Usando funções de cadeia de caracteres segura
Muitos problemas de segurança do sistema são causados pela má manipulação do buffer e pelos estouros de buffer resultantes. O mau tratamento de buffer geralmente é associado a operações de manipulação de cadeia de caracteres. As funções de manipulação de cadeia de caracteres padrão fornecidas por bibliotecas de runtime de linguagem C/C++ (strcat, strcpy, sprintf e assim por diante) não impedem a gravação além do fim dos buffers.
Dois novos conjuntos de funções de manipulação de cadeia de caracteres, chamadas de funções de cadeia de caracteres seguras, fornecem processamento adicional para tratamento de buffer adequado em seu código. Essas funções de cadeia de caracteres seguras estão disponíveis no WDK (Windows Driver Kit) e no Microsoft Windows XP SP1 e versões posteriores do DDK (Driver Development Kit) e do SDK do Windows. Eles se destinam a substituir seus equivalentes C/C++ internos e rotinas semelhantes fornecidas pelo Windows.
Um conjunto de funções de cadeia de caracteres seguras é usado no código do modo kernel. Essas funções são protótipos em um arquivo de cabeçalho chamado Ntstrsafe.h. Esse arquivo de cabeçalho e uma biblioteca associada estão disponíveis no WDK.
O outro conjunto de funções de cadeia de caracteres seguras é para uso em aplicativos no modo de usuário. Um arquivo de cabeçalho correspondente, Strsafe.h, contém protótipos para essas funções. Esse arquivo e uma biblioteca associada estão disponíveis no SDK do Windows. Para obter mais informações sobre Strsafe.h, consulte Usando as funções Strsafe.h.
O conjunto de funções de cadeia de caracteres segura no modo kernel consiste nos dois subconjuntos a seguir:
Funções de cadeia de caracteres seguras para caracteres Unicode e ANSI
Cada uma dessas funções está disponível em uma versão sufixo W que dá suporte a caracteres Unicode de byte duplo e uma versão sufixo A que dá suporte a caracteres ANSI de byte único. Por exemplo, RtlStringCbCatN, que concatena duas cadeias de caracteres e limita o comprimento da cadeia de caracteres acrescentada, está disponível como RtlStringCbCatNW e RtlStringCbCatNA.
Funções de cadeia de caracteres seguras para estruturas de UNICODE_STRING
Cada uma dessas funções aceita uma estrutura UNICODE_STRING como um parâmetro de entrada ou saída ou ambos. Por exemplo, RtlStringCbCopyUnicodeString aceita a estrutura como um parâmetro de entrada, RtlUnicodeStringCopyString aceita a estrutura como um parâmetro de saída e RtlUnicodeStringCopy aceita a estrutura como um parâmetro de entrada e saída.
As funções de cadeia de caracteres segura no modo kernel fornecem os seguintes recursos:
Cada função de cadeia de caracteres segura recebe o tamanho do buffer de destino como entrada. Assim, a função pode garantir que ela não escreva após o final do buffer.
As funções de cadeia de caracteres Unicode e ANSI terminam todas as cadeias de caracteres de saída com um caractere NULL, mesmo que a operação trunque o resultado pretendido.
Todas as funções de cadeia de caracteres seguras retornam um valor NTSTATUS, com apenas um código de sucesso possível (STATUS_SUCCESS).
A maioria das funções de cadeia de caracteres seguras está disponível em uma versão contada por bytes e com contagem de caracteres. Por exemplo, RtlStringCbCata concatena duas cadeias de caracteres contadas por bytes e RtlStringCchCata concatena duas cadeias de caracteres contadas.
A maioria das funções de cadeia de caracteres seguras está disponível em uma versão estendida, ex-sufixo, que fornece funcionalidade adicional. Por exemplo, RtlStringCbCatExa estende a funcionalidade de RtlStringCbCata.
Esta seção inclui os tópicos a seguir:
Resumo das Kernel-Mode funções de cadeia de caracteres seguras
Importando Kernel-Mode funções de cadeia de caracteres seguras