internal unsafe MpqFileStream(MpqFileSafeHandle handle, FileAccess accessType, MpqArchive owner)
        {
            _TMPQFileHeader *header = (_TMPQFileHeader *)handle.DangerousGetHandle().ToPointer();

            TFileEntry = *header->pFileEntry;

            FileName    = Marshal.PtrToStringAnsi(TFileEntry.szFileName);
            _handle     = handle;
            _accessType = accessType;
            _owner      = owner;
        }
        protected override void Dispose(bool disposing)
        {
            base.Dispose(disposing);

            if (disposing)
            {
                if (_handle != null && !_handle.IsInvalid)
                {
                    _handle.Close();
                    _handle = null;
                }

                if (_owner != null)
                {
                    _owner.RemoveOwnedFile(this);
                    _owner = null;
                }
            }
        }