Exemplo n.º 1
0
        private string GetString(DacGetCharArrayWithArg func, ulong addr, bool skipNull = true)
        {
            int hr = func(Self, addr, 0, null, out int needed);

            if (hr != S_OK)
            {
                return(null);
            }

            if (needed == 0)
            {
                return("");
            }

            byte[] buffer = AcquireBuffer(needed * 2);
            hr = func(Self, addr, needed, buffer, out needed);
            if (hr != S_OK)
            {
                ReleaseBuffer(buffer);
                return(null);
            }

            if (skipNull)
            {
                needed--;
            }

            string result = Encoding.Unicode.GetString(buffer, 0, needed * 2);

            ReleaseBuffer(buffer);
            return(result);
        }
Exemplo n.º 2
0
        private string?GetString(DacGetCharArrayWithArg func, ulong addr, bool skipNull = true)
        {
            int hr = func(Self, addr, 0, null, out int needed);

            if (hr != S_OK)
            {
                return(null);
            }

            if (needed == 0)
            {
                return(string.Empty);
            }

            byte[] buffer = ArrayPool <byte> .Shared.Rent(needed * 2);

            try
            {
                hr = func(Self, addr, needed, buffer, out needed);
                if (hr != S_OK)
                {
                    return(null);
                }

                if (skipNull)
                {
                    needed--;
                }

                string result = Encoding.Unicode.GetString(buffer, 0, needed * 2);
                return(result);
            }
            finally
            {
                ArrayPool <byte> .Shared.Return(buffer);
            }
        }