示例#1
0
        /// <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
                    });
                }
            }
        }
示例#2
0
        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()));
            }
        }