Example #1
0
        public CabUnpacker(CabEngine cabEngine)
            : base(cabEngine)
        {
            this.fdiAllocMemHandler    = this.CabAllocMem;
            this.fdiFreeMemHandler     = this.CabFreeMem;
            this.fdiOpenStreamHandler  = this.CabOpenStream;
            this.fdiReadStreamHandler  = this.CabReadStream;
            this.fdiWriteStreamHandler = this.CabWriteStream;
            this.fdiCloseStreamHandler = this.CabCloseStream;
            this.fdiSeekStreamHandler  = this.CabSeekStream;

            this.fdiHandle = NativeMethods.FDI.Create(
                this.fdiAllocMemHandler,
                this.fdiFreeMemHandler,
                this.fdiOpenStreamHandler,
                this.fdiReadStreamHandler,
                this.fdiWriteStreamHandler,
                this.fdiCloseStreamHandler,
                this.fdiSeekStreamHandler,
                NativeMethods.FDI.CPU_80386,
                this.ErfHandle.AddrOfPinnedObject());
            if (this.Erf.Error)
            {
                int error     = this.Erf.Oper;
                int errorCode = this.Erf.Type;
                this.ErfHandle.Free();
                throw new CabException(
                          error,
                          errorCode,
                          CabException.GetErrorMessage(error, errorCode, true));
            }
        }
Example #2
0
        protected CabWorker(CabEngine cabEngine)
        {
            this.cabEngine = cabEngine;
            streamHandles  = new HandleManager <Stream>();
            erf            = new NativeMethods.ERF();
            erfHandle      = GCHandle.Alloc(erf, GCHandleType.Pinned);
            cabNumbers     = new Dictionary <string, short>(1);

            // 32K seems to be the size of the largest chunks processed by cabinet.dll.
            // But just in case, this buffer will auto-enlarge.
            buf = new byte[32768];
        }
Example #3
0
 public CabPacker(CabEngine cabEngine)
     : base(cabEngine)
 {
     fciAllocMemHandler    = CabAllocMem;
     fciFreeMemHandler     = CabFreeMem;
     fciOpenStreamHandler  = CabOpenStreamEx;
     fciReadStreamHandler  = CabReadStreamEx;
     fciWriteStreamHandler = CabWriteStreamEx;
     fciCloseStreamHandler = CabCloseStreamEx;
     fciSeekStreamHandler  = CabSeekStreamEx;
     fciFilePlacedHandler  = CabFilePlaced;
     fciDeleteFileHandler  = CabDeleteFile;
     fciGetTempFileHandler = CabGetTempFile;
     fciGetNextCabinet     = CabGetNextCabinet;
     fciCreateStatus       = CabCreateStatus;
     fciGetOpenInfo        = CabGetOpenInfo;
     tempStreams           = new List <Stream>();
     compressionLevel      = CompressionLevel.Normal;
 }
Example #4
0
 protected void OnProgress(ArchiveProgressType progressType)
 {
     if (!suppressProgressEvents)
     {
         ArchiveProgressEventArgs e = new ArchiveProgressEventArgs(
             progressType,
             currentFileName,
             currentFileNumber >= 0 ? currentFileNumber : 0,
             totalFiles,
             currentFileBytesProcessed,
             currentFileTotalBytes,
             currentArchiveName,
             currentArchiveNumber,
             totalArchives,
             currentArchiveBytesProcessed,
             currentArchiveTotalBytes,
             fileBytesProcessed,
             totalFileBytes);
         CabEngine.ReportProgress(e);
     }
 }