private const int MAX_LINK_NAME_LENGTH = ...;[StructLayout(LayoutKind.Sequential)] //add PackSize if necessary
struct ADAPTER {
IntPtr hFile;
[MarshalAs(UnmanagedType.ByValArray, SizeConst=MAX_LINK_NAME_LENGTH)]
byte[] SymbolicLink;
int    NumWrites;
IntPtr ReadEvent;
uint   ReadTimeOut;
}[DllImport("youdll.dll")]  //change CharSet if you are using ANSI (without define UNICODE).
public extern static IntPtr PacketOpenAdapter(string AdapterName);...
IntPtr ptr = PacketOpenAdapter("whatever");
ADAPTER adt = Marshal.PtrToStructure(ptr);
Marshal.FreeHGlobal(ptr); //don't forget to free the memory
...