@@ -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
301324cleanup :
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