Manipulando dados armazenados em buffer
Várias das funções do provedor de rede levam o endereço e o tamanho de um buffer no qual a função coloca uma estrutura de dados de tamanho variável.
Em cada caso, o mecanismo usado é o mesmo. O chamador aloca um buffer e passa seu endereço para a função . Ele também passa o endereço de um DWORD que especifica o tamanho do buffer, em bytes.
Em seguida, a função copia o máximo de estrutura de dados solicitada possível no buffer. Se todos os dados se ajustarem ao buffer, a função retornará WN_SUCCESS. Se os dados não se ajustarem ao buffer, os dados poderão ficar incompletos e a função definirá o erro WN_MORE_DATA. Em ambos os casos, o DWORD que indica o tamanho do buffer é definido como o número de bytes realmente exigidos pela estrutura de dados. Dessa forma, se o buffer passado for muito pequeno e a função falhar, o chamador poderá alocar um novo buffer do tamanho necessário e chamar a função novamente.
Quando as estruturas de dados retornadas incluem cadeias de caracteres de comprimento variável, as estruturas de dados individuais normalmente contêm ponteiros para essas cadeias de caracteres. As cadeias de caracteres em si também devem ser colocadas dentro do buffer. No entanto, é importante colocá-los no final do buffer. Caso contrário, eles tornarão a indexação para a Nª estrutura impossível. Em outras palavras, todas as estruturas estão localizadas contíguamente no início do buffer. Ponteiros para cadeias de caracteres ou dados de comprimento variável devem ser ponteiros reais, não deslocamentos para o buffer.
Quando um buffer é usado para passar e retornar dados que consistem apenas em cadeias de caracteres, o DWORD especificando o tamanho do buffer deve ser definido como o número total de caracteres que caberá nessas cadeias de caracteres, não para o número de bytes.