To read from a storage:
Open the compound file with StgOpenStorage() - returns an IStorage
Use IStorage->OpenStream() to open a stream (use unicode again) - Will return an IStream
Use IStream->Read() to read from the stream
Eg:
BYTE *b;
HRESULT res = stream->Read((void*)b,xxx,NULL);
if(res!=S_OK)
If you wish to know the size of the stream contained in the storage (to allocate memory or whatever reason),
create a STATSTG structure & pass it to IStream->Stat()
STATSTG stat;
stream->Stat(&stat,STATFLAG_NONAME);