Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ PEReader() [5/6]

unsafe System.Reflection.PortableExecutable.PEReader.PEReader ( Stream peStream,
PEStreamOptions options,
int size )
inline

Definition at line 80 of file PEReader.cs.

81 {
82 if (peStream == null)
83 {
84 throw new ArgumentNullException("peStream");
85 }
86 if (!peStream.CanRead || !peStream.CanSeek)
87 {
89 }
90 if (!options.IsValid())
91 {
92 throw new ArgumentOutOfRangeException("options");
93 }
94 IsLoadedImage = (options & PEStreamOptions.IsLoadedImage) != 0;
95 long position = peStream.Position;
96 int andValidateSize = StreamExtensions.GetAndValidateSize(peStream, size, "peStream");
97 bool flag = true;
98 try
99 {
100 bool isFileStream = FileStreamReadLightUp.IsFileStream(peStream);
101 if ((options & (PEStreamOptions.PrefetchMetadata | PEStreamOptions.PrefetchEntireImage)) == 0)
102 {
103 _peImage = new StreamMemoryBlockProvider(peStream, position, andValidateSize, isFileStream, (options & PEStreamOptions.LeaveOpen) != 0);
104 flag = false;
105 }
106 else if ((options & PEStreamOptions.PrefetchEntireImage) != 0)
107 {
108 NativeHeapMemoryBlock nativeHeapMemoryBlock = (NativeHeapMemoryBlock)(_lazyImageBlock = StreamMemoryBlockProvider.ReadMemoryBlockNoLock(peStream, isFileStream, position, andValidateSize));
109 _peImage = new ExternalMemoryBlockProvider(nativeHeapMemoryBlock.Pointer, nativeHeapMemoryBlock.Size);
110 if ((options & PEStreamOptions.PrefetchMetadata) != 0)
111 {
113 }
114 }
115 else
116 {
117 _lazyPEHeaders = new PEHeaders(peStream);
119 }
120 }
121 finally
122 {
123 if (flag && (options & PEStreamOptions.LeaveOpen) == 0)
124 {
125 peStream.Dispose();
126 }
127 }
128 }
void Dispose()
Definition Stream.cs:639
static int GetAndValidateSize(Stream stream, int size, string streamParameterName)
static unsafe NativeHeapMemoryBlock ReadMemoryBlockNoLock(Stream stream, bool isFileStream, long start, int size)
static string StreamMustSupportReadAndSeek
Definition SR.cs:52
Definition SR.cs:7

References System.Reflection.PortableExecutable.PEReader._lazyImageBlock, System.Reflection.PortableExecutable.PEReader._lazyMetadataBlock, System.Reflection.PortableExecutable.PEReader._lazyPEHeaders, System.Reflection.PortableExecutable.PEReader._peImage, System.IO.Stream.CanRead, System.IO.Stream.CanSeek, System.IO.Stream.Dispose(), System.Reflection.Internal.StreamExtensions.GetAndValidateSize(), System.Reflection.PortableExecutable.PEReader.InitializePEHeaders(), System.Reflection.Internal.FileStreamReadLightUp.IsFileStream(), System.Reflection.PortableExecutable.PEReader.IsLoadedImage, System.Reflection.PortableExecutable.PEHeaders.MetadataSize, System.Reflection.PortableExecutable.PEHeaders.MetadataStartOffset, System.options, System.Reflection.PortableExecutable.PEReader.PEHeaders, System.Reflection.Internal.NativeHeapMemoryBlock.Pointer, System.IO.Stream.Position, System.Reflection.Internal.StreamMemoryBlockProvider.ReadMemoryBlockNoLock(), System.Reflection.Internal.NativeHeapMemoryBlock.Size, and System.SR.StreamMustSupportReadAndSeek.