バッファーされたデータの処理
いくつかのネットワーク プロバイダー関数は、関数が可変サイズのデータ構造を配置するバッファーのアドレスとサイズを受け取ります。
いずれの場合も、使用されるメカニズムは同じです。 呼び出し元はバッファーを割り当て、そのアドレスを 関数に渡します。 また、バッファーのサイズをバイト単位で指定する DWORD のアドレスも渡します。
その後、関数は要求されたデータ構造のできるだけ多くをバッファーにコピーします。 すべてのデータがバッファーに収まる場合、関数はWN_SUCCESSを返します。 データがバッファーに収まらない場合は、データが不完全なままになり、WN_MORE_DATAエラーが設定されます。 どちらの場合も、バッファーのサイズを示す DWORD は、データ構造で実際に必要なバイト数に設定されます。 これにより、渡されたバッファーが小さすぎて関数が失敗した場合、呼び出し元は必要なサイズの新しいバッファーを割り当てて、関数を再度呼び出すことができます。
返されるデータ構造に可変長文字列が含まれている場合、個々のデータ構造には通常、これらの文字列へのポインターが含まれます。 文字列自体もバッファー内に配置する必要があります。 ただし、バッファーの末尾に配置することが重要です。 それ以外の場合、N 番目の構造体へのインデックス作成は不可能になります。 つまり、すべての構造体はバッファーの先頭に連続して配置されます。 文字列または可変長データへのポインターは、バッファーへのオフセットではなく、実際のポインターである必要があります。
バッファーを使用して文字列のみで構成されるデータを渡して返す場合、バッファーのサイズを指定する DWORD は、バイト数ではなく、これらの文字列に収まる文字数の合計に設定する必要があります。