/// <summary> /// Получить значение переменной в памяти /// </summary> /// <param name="moduleName">Имя модуля, где находится переменная</param> /// <param name="moduleOffset">Относительное смещение от начала модуля</param> /// <param name="variableSize">Размер переменной</param> /// <returns>Результат получения значения переменной</returns> public ManageMemoryVariableResult GetVariableValue(string moduleName, uint moduleOffset, MemoryVariableSize variableSize) { 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 = new byte[varConverter.ConvertSize(variableSize)]; uint bytesRead = 0; var readResult = ReadProcessMemory(_processHandle, baseOffset, buffer, (uint)buffer.Length, ref bytesRead); if (!readResult) { return(new ManageMemoryVariableResult { Code = MemoryPatchVariableErrorCode.ReadError, Value = 0 }); } var result = varConverter.ArrayToValue(buffer, variableSize); return(new ManageMemoryVariableResult { Code = MemoryPatchVariableErrorCode.Ok, Value = result }); } catch (Exception ex) { return(new ManageMemoryVariableResult { Code = MemoryPatchVariableErrorCode.Unknown, ErrorMessage = ex.Message }); } } }
public void Process() { var res = _fsuipc.FSUIPC_Process(ref _dwResult); foreach (var variable in _fsuipcVariablesForRead) { var varConverter = new VariableConverter(); var convertedVariableSize = varConverter.ConvertSize(variable.Value.Variable.GetVariableSize()); _fsuipc.FSUIPC_Get(ref variable.Value.Token, convertedVariableSize, ref variable.Value.Buffer); variable.Value.Variable.SetValueInMemory(varConverter.ArrayToValue(variable.Value.Buffer, variable.Value.Variable.GetVariableSize())); } }