示例#1
0
        public T As <T>(IntPtr address, IRemoteStruct assertRefreshed = null)
            where T : class, IRemoteStruct, new()
        {
            assertRefreshed?.AssertRefreshed();

            if (address == IntPtr.Zero)
            {
                return(null);
            }

            if (!Cache.TryGetValue(typeof(T), out var cache))
            {
                cache = new Dictionary <IntPtr, IRemoteStruct>();
                Cache.Add(typeof(T), cache);
            }

            if (cache.TryGetValue(address, out var value))
            {
                return((T)value);
            }

            value = new T();
            value.Assign(this, address);
            cache.Add(address, value);

            return((T)value);
        }
示例#2
0
        public string AsString(UNICODE_STRING native, IRemoteStruct assertRefreshed = null)
        {
            assertRefreshed?.AssertRefreshed();

            if (native.buffer == IntPtr.Zero)
            {
                return(null);
            }

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

            return(Memory[native.buffer, false].ReadString(Encoding.Unicode, native.MaximumLength));
        }