用byte[]作缓冲区,而不用StringBuilder。以下调用全部用Unicode版本:[DllImport("Advapi32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
private static extern int RegQueryValueExW(
  IntPtr hKey, string valueName, IntPtr reserved, 
  out int lpType, byte[] data, ref int dataSize);static void Main()
{
  IntPtr pHKey = ...;
  string keyName = ...;  byte[] data = new byte[1024];
  int dataSize = data.Length;
  int keyType = 0;  int error = RegQueryValueExW(pHKey, keyName, IntPtr.Zero, out keyType, data, ref dataSize);
  string[] lines = Encoding.Unicode.GetString(data, 0, dataSize).TrimEnd((char)0).Split((char)0);
}