Ejemplo n.º 1
0
        public bool AddVariableToWrite(FsuipcVariable variable)
        {
            var varConverter          = new VariableConverter();
            var convertedVariableSize = varConverter.ConvertSize(variable.GetVariableSize());

            _fsuipcVariablesForWrite[variable.Id]        = new InternalVariableDesc(ref variable);
            _fsuipcVariablesForWrite[variable.Id].Buffer = varConverter.ValueToArray((double)variable.GetValueToSet(), variable.GetVariableSize());
            var result = _fsuipc.FSUIPC_Write(variable.Offset, convertedVariableSize, ref _fsuipcVariablesForWrite[variable.Id].Buffer, ref _fsuipcVariablesForWrite[variable.Id].Token, ref _dwResult);

            return(result);
            // что делать с dwResult. Куда-то возвращать?
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Установить значение переменной в памяти
        /// </summary>
        /// <param name="moduleName">Имя модуля, где находится переменная</param>
        /// <param name="moduleOffset">Относительное смещение от начала модуля</param>
        /// <param name="variableSize">Размер переменной</param>
        /// <param name="valueToSet">Значение, которое требуется установить</param>
        /// <returns>Результат установки значения переменной</returns>
        public ManageMemoryVariableResult SetVariableValue(string moduleName, uint moduleOffset, MemoryVariableSize variableSize, double valueToSet)
        {
            lock (_modules)
            {
                if (!_modules.ContainsKey(moduleName))
                {
                    return new ManageMemoryVariableResult
                           {
                               Code         = MemoryPatchVariableErrorCode.ModuleNotFound,
                               ErrorMessage = moduleName
                           }
                }
                ;
                if ((int)_modules[moduleName].BaseAddress + _modules[moduleName].Size < moduleOffset)
                {
                    return new ManageMemoryVariableResult
                           {
                               Code = MemoryPatchVariableErrorCode.OffsetIsOutOfModule
                           }
                }
                ;
                try
                {
                    var baseOffset = (IntPtr)((int)_modules[moduleName].BaseAddress + moduleOffset);

                    var varConverter = new VariableConverter();
                    var buffer       = varConverter.ValueToArray(valueToSet, variableSize);

                    uint bytesWrite = 0;
                    var  res        = WriteProcessMemory(_processHandle, baseOffset, buffer, (uint)buffer.Length, ref bytesWrite);
                    return(new ManageMemoryVariableResult
                    {
                        Code = res ? MemoryPatchVariableErrorCode.Ok : MemoryPatchVariableErrorCode.WriteError,
                        Value = valueToSet
                    });
                }
                catch (Exception ex)
                {
                    return(new ManageMemoryVariableResult
                    {
                        Code = MemoryPatchVariableErrorCode.Unknown,
                        ErrorMessage = ex.Message
                    });
                }
            }
        }