处理缓冲数据

多个网络提供程序函数采用缓冲区的地址和大小,该函数在其中放置大小可变的数据结构。

在每种情况下,使用的机制都是相同的。 调用方分配缓冲区并将其地址传递给函数。 它还传递指定缓冲区大小的 DWORD 的地址(以字节为单位)。

然后,该函数会尽可能多地将请求的数据结构复制到缓冲区中。 如果所有数据都适合缓冲区,该函数将返回WN_SUCCESS。 如果数据不适合缓冲区,则数据可能不完整,并且函数设置WN_MORE_DATA错误。 在任一情况下,指示缓冲区大小的 DWORD 都设置为数据结构实际需要的字节数。 这样,如果传入的缓冲区太小,并且函数失败,调用方可能会分配所需大小的新缓冲区,然后再次调用函数。

当返回的数据结构包含可变长度字符串时,各个数据结构通常包含指向这些字符串的指针。 字符串本身也应放置在缓冲区中。 但是,请务必将它们放在缓冲区的末尾。 否则,它们将使无法编制到第 N 个结构的索引。 换句话说,所有结构都位于缓冲区的开头。 指向字符串或可变长度数据的指针必须是实际指针,而不是缓冲区中的偏移量。

当缓冲区用于传入和返回仅包含字符串的数据时,指定缓冲区大小的 DWORD 应设置为这些字符串中适合的字符总数,而不是字节数。