Example #1
0
        /// <summary>Get array of delay import modules and procedures</summary>
        /// <returns>Delay import modules</returns>
        public IEnumerator <DelayImportModule> GetEnumerator()
        {
            if (!IsEmpty)
            {
                UInt32 sizeOfDescr = (UInt32)Marshal.SizeOf(typeof(WinNT.ImgDelayDescr));
                UInt32 count       = (base.Directory.Size / sizeOfDescr) - 1;          //Значение чисто абстрактное, т.к. Delphi пишет в последнюю структуру одни нули. А в count указывает левое значение (только Delphi).

                UInt32 position = base.Directory.VirtualAddress;
                for (UInt32 loop = 0; loop < count; loop++)
                {
                    //UInt32 position = base.Directory.VirtualAddress + sizeOfDescr * loop;
                    WinNT.ImgDelayDescr descriptor = base.Parent.Header.PtrToStructure <WinNT.ImgDelayDescr>(position);
                    position += sizeOfDescr;

                    if (descriptor.IsEmpty)
                    {
                        yield break;                        //Delphi заканчивает блок не кол-вом элементов, а структурой с нулевыми данными
                    }
                    yield return(new DelayImportModule(this, descriptor));
                }
            }
        }
Example #2
0
 /// <summary>Create instance of delay import module description class</summary>
 /// <param name="directory">PE directory</param>
 /// <param name="descriptor">Base info</param>
 public DelayImportModule(DelayImport directory, WinNT.ImgDelayDescr descriptor)
 {
     this._directory  = directory;
     this._descriptor = descriptor;
 }