Wow.. you dont realy need to use bytes, or read from them one at a time.
Use Longs and rather pad with smaller types, that should reduce the size of your type somewhat.
And when reading the string do something like this instead:
Local s:String = String.FromCString( VarPtr typ.csdversion)