diff --git a/drivers/network/ndis/ndis/misc.c b/drivers/network/ndis/ndis/misc.c index 71e64c12cde..018f2ae5c72 100644 --- a/drivers/network/ndis/ndis/misc.c +++ b/drivers/network/ndis/ndis/misc.c @@ -210,6 +210,8 @@ NdisCloseFile( ZwClose ( FileHandleObject->FileHandle ); + ExFreePool(FileHandleObject->MapBuffer); + memset ( FileHandleObject, 0, sizeof(NDIS_HANDLE_OBJECT) ); ExFreePool ( FileHandleObject ); @@ -311,8 +313,20 @@ cleanup: *FileHandle = NULL; } else - *FileHandle = NDIS_POBJECT_TO_HANDLE(FileHandleObject); - + { + FILE_STANDARD_INFORMATION fileInfo = {0}; + *Status = ZwQueryInformationFile( + FileHandleObject->FileHandle, &IoStatusBlock, &fileInfo, sizeof(fileInfo), FileStandardInformation); + if (NT_SUCCESS(ntstatus)) + { + FileHandleObject->MapBuffer = ExAllocatePool(NonPagedPool, *FileLength); + ZwReadFile( + FileHandleObject->FileHandle, NULL, NULL, NULL, &IoStatusBlock, FileHandleObject->MapBuffer, + (ULONG)*FileLength, NULL, NULL); + *FileLength = fileInfo.EndOfFile.LowPart; + *FileHandle = NDIS_POBJECT_TO_HANDLE(FileHandleObject); + } + } return; }