예제 #1
0
        public static int CompareFilesW(ContentProgressCallback progressCallback, int compareIndex,
                                        [MarshalAs(UnmanagedType.LPWStr)] string fileName1,
                                        [MarshalAs(UnmanagedType.LPWStr)] string fileName2,
                                        ref ContentFileDetails contentFileDetails)
        {
            _callSignature = $"ContentCompareFiles '{fileName1}' => '{fileName2}' ({compareIndex})";
            TcCallback.SetContentPluginCallback(progressCallback);
            try {
                var result = Plugin.CompareFiles(compareIndex, fileName1, fileName2, contentFileDetails, out var iconResourceId);

                TraceCall(TraceLevel.Info, result.ToString());

                if (result == ContentCompareResult.EqualWithIcon && iconResourceId >= 100)
                {
                    return(iconResourceId);
                }
                else
                {
                    return((int)result);
                }
            }
            catch (Exception ex) {
                ProcessException(ex);
                return((int)ContentCompareResult.FileOpenError);
            }
            finally {
                TcCallback.SetContentPluginCallback(null);
            }
        }
예제 #2
0
 public static void SetProcessDataProcW(IntPtr arcData, ProcessDataCallbackW processDataProcW)
 {
     callSignature = String.Format("SetProcessDataProcW ({0})", arcData.ToString());
     try {
         TcCallback.SetPackerPluginCallbacks(null, null, null, processDataProcW, null, null);
         TraceCall(TraceLevel.Warning,
                   processDataProcW.Method.MethodHandle.GetFunctionPointer().ToString());
     } catch (Exception ex) {
         ProcessException(ex);
     }
 }
예제 #3
0
        public static void SetChangeVolProc(IntPtr arcData, ChangeVolCallback changeVolProc)
        {
            callSignature = String.Format("SetChangeVolProc ({0})", arcData.ToString());
            try {
                TcCallback.SetPackerPluginCallbacks(changeVolProc, null, null, null, null, null);

                TraceCall(TraceLevel.Warning,
                          changeVolProc.Method.MethodHandle.GetFunctionPointer().ToString("X"));
            } catch (Exception ex) {
                ProcessException(ex);
            }
        }
예제 #4
0
        public static void SetProcessDataProc(IntPtr arcData, ProcessDataCallback processDataProc)
        {
            _callSignature = $"SetProcessDataProc ({arcData.ToString()})";
            try {
                TcCallback.SetPackerPluginCallbacks(null, null, processDataProc, null, null, null);

                TraceCall(TraceLevel.Warning, processDataProc.Method.MethodHandle.GetFunctionPointer().ToString());
            }
            catch (Exception ex) {
                ProcessException(ex);
            }
        }
예제 #5
0
        public static void SetChangeVolProcW(IntPtr arcData, ChangeVolCallbackW changeVolProcW)
        {
            _callSignature = $"SetChangeVolProcW ({arcData.ToString()})";
            try {
                TcCallback.SetPackerPluginCallbacks(null, changeVolProcW, null, null, null, null);

                TraceCall(TraceLevel.Warning, changeVolProcW.Method.MethodHandle.GetFunctionPointer().ToString());
            }
            catch (Exception ex) {
                ProcessException(ex);
            }
        }
예제 #6
0
        public static void SetCryptCallbackW(PkCryptCallbackW cryptProcW, int cryptNumber, int flags)
        {
            callSignature = String.Format("PkSetCryptCallbackW ({0}, {1})", cryptNumber, flags);
            try {
                TcCallback.SetPackerPluginCallbacks(null, null, null, null, null, cryptProcW);
                Plugin.CreatePassword(cryptNumber, flags);

                TraceCall(TraceLevel.Info,
                          cryptProcW.Method.MethodHandle.GetFunctionPointer().ToString());
            } catch (Exception ex) {
                ProcessException(ex);
            }
        }
예제 #7
0
        public static void SetCryptCallback(PkCryptCallback cryptProc, int cryptNumber, int flags)
        {
            _callSignature = $"PkSetCryptCallback ({cryptNumber}, {flags})";
            try {
                TcCallback.SetPackerPluginCallbacks(null, null, null, null, cryptProc, null);
                Plugin.CreatePassword(cryptNumber, flags);

                TraceCall(TraceLevel.Info, cryptProc.Method.MethodHandle.GetFunctionPointer().ToString());
            }
            catch (Exception ex) {
                ProcessException(ex);
            }
        }
예제 #8
0
        public static int InitW(int pluginNumber, ProgressCallbackW progressProcW, LogCallbackW logProcW, RequestCallbackW requestProcW)
        {
            try {
                _callSignature      = "FsInitW";
                Plugin.PluginNumber = pluginNumber;
                TcCallback.SetFsPluginCallbacks(null, progressProcW, null, logProcW, null, requestProcW, null, null);

                TraceCall(TraceLevel.Warning, $"PluginNumber={pluginNumber}, {progressProcW.Method.MethodHandle.GetFunctionPointer().ToString("X")}, {logProcW.Method.MethodHandle.GetFunctionPointer().ToString("X")}, {requestProcW.Method.MethodHandle.GetFunctionPointer().ToString("X")}");
            }
            catch (Exception ex) {
                ProcessException(ex);
            }

            return(0);
        }
예제 #9
0
        public static void SetCryptCallbackW(FsCryptCallbackW cryptProcW, int cryptNumber, int flags)
        {
            _callSignature = "SetCryptCallbackW";
            try {
                TcCallback.SetFsPluginCallbacks(null, null, null, null, null, null, null, cryptProcW);
                if (Plugin.Password == null)
                {
                    Plugin.Password = new FsPassword(Plugin, cryptNumber, flags);
                }

                TraceCall(TraceLevel.Warning, $"CryptoNumber={cryptNumber}, Flags={flags}, {cryptProcW.Method.MethodHandle.GetFunctionPointer().ToString("X")}");
            }
            catch (Exception ex) {
                ProcessException(ex);
            }
        }