I think it doesn't work because of the way you're creating it:
// this creates a copy of the SmHeader struct, on the stack
SmHeader header = *((SmHeader *)m_pBaseAddress);
// this sets m_pHeader to address of the local variable, not
// m_pBaseAddress
m_pHeader = &header;
Try this instead:
m_pHeader = (SmHeader *) m_pBaseAddress;