예제 #1
0
        static void ProcessWStr(this NamedPipeServerStream Server)
        {
            var Buffer = Server.ReadStringBuffer();

            fixed(void *pStr = &Buffer[0])
            {
                var Rst = EntryPoint.ProcessW(pStr);

                if (Rst == pStr)
                {
                    Server.WriteI32(0);
                    Server.Flush();
                    return;
                }

                WCString NewStr  = Rst;
                var      StrData = NewStr.ToArray();

                StrData = StrData.Concat(new byte[2]).ToArray();

                Server.WriteI32(StrData.Length);
                Server.Write(StrData, 0, StrData.Length);
                Server.Flush();
            }
        }
예제 #2
0
        public WCTexImageContainer(CTexImageContainer *self, NativeEnvironment environment)
        {
            Self = self;

            _magic  = new WCString(&self->magic, environment);
            _images = new WCList <CTexImage, ITexImage>(
                &Self->image_count,
                &Self->images,
                environment,
                (x, e) => new WCTexImage(x, e));
        }
예제 #3
0
        public WCTexFrameInfoContainer(CTexFrameInfoContainer *self, NativeEnvironment environment)
        {
            Self = self;

            _magic = new WCString(&self->magic, environment);

            _frames = new WCList <CTexFrameInfo, ITexFrameInfo>(
                &Self->frame_count,
                &Self->frames,
                environment,
                (x, _) => new WCTexFrameInfo(x));
        }
예제 #4
0
        internal byte *ProcessString(WCString pString)
        {
            if (!Initialized)
            {
                Initializer.Initialize(this);
            }

            if (Settings.SanityCheck && SanityChecks.IsBadCodePtr(pString))
            {
                return(pString);
            }

            var String = pString;

            foreach (var Rld in Reloads)
            {
                var New = Rld.BeforeReload(String, true);
                if (New != null)
                {
                    String = New;
                }
            }

            var Rst = ProcessString((string)String);

            if (Rst == null)
            {
                return(String);
            }
            var Output = (WCString)Rst;

            foreach (var Rld in Reloads)
            {
                var New = Rld.AfterReload(pString, Output, true);
                if (New != null)
                {
                    Output = New;
                }
            }

            if (Settings.Overwrite && Output != null && ((string)Output) != null)
            {
                return((WCString)Alloc.Overwrite(Output.ToArray(), pString));
            }

            if (Settings.HeapAlloc && Output != null && ((string)Output) != null)
            {
                return((WCString)Alloc.CreateHeap(Output.ToArray()));
            }

            return(Output);
        }
예제 #5
0
        bool TextOut(void *dc, int xStart, int yStart, byte *pStr, int strLen)
        {
            WCString InStr = pStr;

            InStr.FixedLength = (uint)strLen;

            InStr = EntryPoint.Process((WCString)(string)InStr);//Ensure Null-Terminated

            if (Config.Default.TextOutWUndoRemap)
            {
                InStr = Remaper.Default.Restore(InStr);
            }

            return(Bypass(dc, xStart, yStart, InStr, InStr.Count()));
        }
예제 #6
0
        bool TextOut(void *dc, int xStart, int yStart, byte *pStr, int strLen)
        {
            CString OriStr = pStr;

            OriStr.FixedLength = (uint)strLen;

            WCString Str = EntryPoint.ProcessW((WCString)(string)OriStr);

            if (Config.Default.TextOutAUndoRemap)
            {
                Str = Remaper.Default.Restore(Str);
            }

            return(TextOutW(dc, xStart, yStart, Str, (int)Str.LongCount()));
        }
예제 #7
0
파일: CTex.cs 프로젝트: woydmw/repkg
        public WCTex(CTex *self, NativeEnvironment environment)
        {
            Self         = self;
            _environment = environment;

            _wcTexHeader         = new WCTexHeader(&self->header);
            _wcTexImageContainer = new WCTexImageContainer(&self->images_container, _environment);

            _magic1 = new WCString(&self->magic1, environment);
            _magic2 = new WCString(&self->magic2, environment);

            if (Self->frameinfo_container != null)
            {
                _wcTexFrameInfoContainer = new WCTexFrameInfoContainer(Self->frameinfo_container, environment);
            }
        }
        uint hGetCharacterPlacement(void *hdc, byte *lpString, int nCount, int nMexExtent, GCP_RESULTSW *lpResult, uint dwFlags)
        {
            WCString InStr = lpString;

            InStr.FixedLength = (uint)nCount;

            InStr = EntryPoint.ProcessW((WCString)(string)InStr);//Ensure Null-Terminated

            if (Config.Default.GetCharacterPlacementWUndoRemap)
            {
                InStr = Remaper.Default.Restore(InStr);
            }

            if (Config.Default.GetCharacterPlacementWRemapAlt)
            {
                InStr = RemaperAlt.Default.Apply(InStr, null);
            }

            return(Bypass(hdc, InStr, InStr.Count(), nMexExtent, lpResult, dwFlags));
        }
예제 #9
0
        private unsafe bool hGetTextExtendPoint32(void *hdc, byte *lpString, int c, SIZE *psize)
        {
            WCString InStr = lpString;

            InStr.FixedLength = (uint)c;

            InStr = EntryPoint.ProcessW((WCString)(string)InStr);//Ensure Null-Terminated

            if (Config.Default.GetTextExtentPoint32WUndoRemap)
            {
                InStr = Remaper.Default.Restore(InStr);
            }

            if (Config.Default.GetTextExtentPoint32WRemapAlt)
            {
                InStr = RemaperAlt.Default.Apply(InStr, null);
            }

            return(Bypass(hdc, InStr, InStr.Count(), psize));
        }
예제 #10
0
        bool ExtTextOut(void *hdc, int x, int y, uint options, void *lprect, byte *lpString, uint c, int *lpDx)
        {
            WCString OriStr = lpString;

            OriStr.FixedLength = c;

            WCString InStr = EntryPoint.ProcessW((WCString)(string)OriStr);

            if (Config.Default.ExtTextOutWUndoRemap)
            {
                InStr = Remaper.Default.Restore(InStr);
            }

            if (Config.Default.ExtTextOutWRemapAlt)
            {
                InStr = RemaperAlt.Default.Apply(InStr, null);
            }

            return(Bypass(hdc, x, y, options, lprect, InStr, (uint)InStr.LongCount() / 2, lpDx));
        }
예제 #11
0
        bool hTextOut(void *dc, int xStart, int yStart, byte *pStr, int strLen)
        {
            CString OriStr = pStr;

            OriStr.FixedLength = (uint)strLen;

            WCString InStr = EntryPoint.ProcessW((WCString)(string)OriStr);

            if (Config.Default.TextOutAUndoRemap)
            {
                InStr = Remaper.Default.Restore(InStr);
            }

            if (Config.Default.TextOutARemapAlt)
            {
                InStr = RemaperAlt.Default.Apply(InStr, null);
            }

            return(TextOutW(dc, xStart, yStart, InStr, (int)InStr.LongCount()));
        }
예제 #12
0
 public static bool IsBadPtr(WCString Pointer) => IsBadCodePtr(Pointer);