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. Куда-то возвращать? }
/// <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 }); } } }