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); }
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)); }