Насколько сложна структура? Для простых вещей, где у вас нет указателей на другие вещи, это довольно просто:
var info = new _NETINFO();
var buffer = new byte[Marshal.SizeOf(info)];
var handle = GCHandle.Alloc(info, GCHandleType.Pinned);
try
{
Marshal.Copy(handle.AddrOfPinnedObject(), buffer, 0, buffer.Length);
}
finally
{
handle.Free();
}
Существует также версия, использующая небезопасный код, который короче, но требует включения «разрешить небезопасный код» и по некоторым причинам вызывает у некоторых людей панику.
Хотелось бы, чтобы управляемый код позволял делать это без копии (или обратного преобразования массива байтов в структуру), но, к сожалению, этого не происходит.