To/From a "void *" done properly is 100% defined and your are 100% correct.
Though IMO it should ring a small alarm bell that something could probably be improved in your design. The only reason I've ever had to cast to an intermediate generic type was when passing pointers to data using Windows messages.