Skip to content

Commit d72bcb1

Browse files
committed
[NDIS] NdisOpenFile: retrieve and return file length in *FileLength
CORE-20259
1 parent 07f305c commit d72bcb1

File tree

1 file changed

+24
-0
lines changed
  • drivers/network/ndis/ndis

1 file changed

+24
-0
lines changed

drivers/network/ndis/ndis/misc.c

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -233,6 +233,8 @@ NdisOpenFile(
233233
OBJECT_ATTRIBUTES ObjectAttributes;
234234
PNDIS_HANDLE_OBJECT FileHandleObject = NULL;
235235
IO_STATUS_BLOCK IoStatusBlock;
236+
FILE_STANDARD_INFORMATION StandardInfo;
237+
UINT NtFileLength;
236238
NTSTATUS NtStatus;
237239

238240
ASSERT_IRQL(PASSIVE_LEVEL);
@@ -296,7 +298,28 @@ NdisOpenFile(
296298
{
297299
NDIS_DbgPrint(MIN_TRACE, ("ZwCreateFile failed (%x) Name %wZ\n", NtStatus, FileName));
298300
*Status = NDIS_STATUS_FILE_NOT_FOUND;
301+
goto cleanup;
302+
}
303+
304+
NtStatus = ZwQueryInformationFile(
305+
NtFileHandle,
306+
&IoStatusBlock,
307+
&StandardInfo,
308+
sizeof(StandardInfo),
309+
FileStandardInformation);
310+
if (!NT_SUCCESS(NtStatus))
311+
{
312+
NDIS_DbgPrint(MIN_TRACE, ("ZwQueryInformationFile failed (%x) Name %wZ\n", NtStatus, FileName));
313+
*Status = NDIS_STATUS_ERROR_READING_FILE;
314+
goto cleanup;
315+
}
316+
if (StandardInfo.EndOfFile.HighPart != 0 || StandardInfo.EndOfFile.LowPart == 0)
317+
{
318+
NDIS_DbgPrint(MIN_TRACE, ("ZwQueryInformationFile failed Name %wZ\n", FileName));
319+
*Status = NDIS_STATUS_ERROR_READING_FILE;
320+
goto cleanup;
299321
}
322+
NtFileLength = StandardInfo.EndOfFile.LowPart;
300323

301324
cleanup:
302325
if ( FullFileName.Buffer != NULL )
@@ -316,6 +339,7 @@ NdisOpenFile(
316339
{
317340
FileHandleObject->FileHandle = NtFileHandle;
318341
*FileHandle = NDIS_POBJECT_TO_HANDLE(FileHandleObject);
342+
*FileLength = NtFileLength;
319343
}
320344
}
321345

0 commit comments

Comments
 (0)