sasadmunir wrote: #define FAT16_part ( (PartitionTable *) ( (void *)fat16_buffer)) This code is casting the buffer to a void pointer (that is, basically a generic address), then it casts this void pointer to a PartitionTable pointer. So, FAT16_part is a pointer to a kind of virtual PartitionTable structure that has the same address as the buffer.
The size of the 128 element char array is 256 bytes. Fixed size char buffers always take 2 bytes per character, regardless of the encoding. This array size is the same even when char buffers are marshaled to API methods or structs with CharSet = CharSet.Auto or CharSet = CharSet.Ansi. For more information, see CharSet.