TRACE("FileBothDirectoryInformation\n");
- needed = sizeof(FILE_BOTH_DIR_INFORMATION) - sizeof(WCHAR) + de->name.Length;
+ needed = offsetof(FILE_BOTH_DIR_INFORMATION, FileName) + de->name.Length;
if (needed > *len) {
TRACE("buffer overflow - %li > %lu\n", needed, *len);
TRACE("FileDirectoryInformation\n");
- needed = sizeof(FILE_DIRECTORY_INFORMATION) - sizeof(WCHAR) + de->name.Length;
+ needed = offsetof(FILE_DIRECTORY_INFORMATION, FileName) + de->name.Length;
if (needed > *len) {
TRACE("buffer overflow - %li > %lu\n", needed, *len);
TRACE("FileFullDirectoryInformation\n");
- needed = sizeof(FILE_FULL_DIR_INFORMATION) - sizeof(WCHAR) + de->name.Length;
+ needed = offsetof(FILE_FULL_DIR_INFORMATION, FileName) + de->name.Length;
if (needed > *len) {
TRACE("buffer overflow - %li > %lu\n", needed, *len);
TRACE("FileIdBothDirectoryInformation\n");
- needed = sizeof(FILE_ID_BOTH_DIR_INFORMATION) - sizeof(WCHAR) + de->name.Length;
+ needed = offsetof(FILE_ID_BOTH_DIR_INFORMATION, FileName) + de->name.Length;
if (needed > *len) {
TRACE("buffer overflow - %li > %lu\n", needed, *len);
TRACE("FileIdFullDirectoryInformation\n");
- needed = sizeof(FILE_ID_FULL_DIR_INFORMATION) - sizeof(WCHAR) + de->name.Length;
+ needed = offsetof(FILE_ID_FULL_DIR_INFORMATION, FileName) + de->name.Length;
if (needed > *len) {
TRACE("buffer overflow - %li > %lu\n", needed, *len);
TRACE("FileIdExtdDirectoryInformation\n");
- needed = offsetof(FILE_ID_EXTD_DIR_INFORMATION, FileName[0]) + de->name.Length;
+ needed = offsetof(FILE_ID_EXTD_DIR_INFORMATION, FileName) + de->name.Length;
if (needed > *len) {
TRACE("buffer overflow - %li > %lu\n", needed, *len);
TRACE("FileIdExtdBothDirectoryInformation\n");
- needed = offsetof(FILE_ID_EXTD_BOTH_DIR_INFORMATION, FileName[0]) + de->name.Length;
+ needed = offsetof(FILE_ID_EXTD_BOTH_DIR_INFORMATION, FileName) + de->name.Length;
if (needed > *len) {
TRACE("buffer overflow - %li > %lu\n", needed, *len);
TRACE("FileNamesInformation\n");
- needed = sizeof(FILE_NAMES_INFORMATION) - sizeof(WCHAR) + de->name.Length;
+ needed = offsetof(FILE_NAMES_INFORMATION, FileName) + de->name.Length;
if (needed > *len) {
TRACE("buffer overflow - %li > %lu\n", needed, *len);
if (FsRtlDoesNameContainWildCards(IrpSp->Parameters.QueryDirectory.FileName)) {
has_wildcard = true;
specific_file = false;
- }
+ } else if (!initial)
+ return STATUS_NO_MORE_FILES;
}
if (ccb->query_string.Buffer)