예제 #1
0
        public uint GetUIPtr(string uiHandle)
        {
            uint id         = ProcessUtils.HashLowerCase(uiHandle);
            uint index      = id & 0x7FF;
            uint uiPtrArray = ReadUInt(ReadUInt(pUI) + Offsets.UI_ARRAY_PTR_OFFSET);
            uint lastAddr   = ReadUInt(uiPtrArray + (index * 4));

            while (true)
            {
                if (lastAddr == 0)
                {
                    return(Offsets.INVALID);
                }

                uint nextAddr = ReadUInt(ReadUInt(lastAddr + Offsets.UI_OBJ_PTR_OFFSET) + Offsets.UI_2_OFFSET);
                if (nextAddr == id)
                {
                    return(ReadUInt(lastAddr + Offsets.UI_OBJ_PTR_OFFSET));
                }

                lastAddr = ReadUInt(lastAddr);
            }
        }