(DWORD*)&pTemp recasts the pointer as a DWORD pointer so that
*(DWORD*)&pTemp yields the DWORD that occupies the 4 bytes starting at pTemp.
This is so say pTemp == 0x0100 for this discussion adn the mremory at that address looks liek this
0x0100 01 02 03 04
0x0104 00 00 00 00
in the end dwNew would == 0x04030201 not 0x00000001 (on a little endian machine).