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