It should be stressed that if an object (usually a struct) is composed WHOLLY of blittable types, then Marshal.StructureToPtr will simply copy "as-is" the source object's memory to the target address. Thus for a blittable struct, it is possible and valid to refer to the copied memory directly using an unsafe managed C# struct pointer. But if the type is NOT blittable, it is not valid to refer to the marshaled memory using a managed C# pointer, if you do you will get problems because the marshaled fields and offsets are NOT the same as those associated with the original managed type.