if you only need the serial number of the drive this will do the job. But caution: it is the number Windows gives it while the formatting process. It is NOT the number of the HD manufacturer.
DWORD serialNumber = -1;
if( ::GetVolumeInformation(lpDrive, NULL, NULL, &serialNumber, NULL, NULL, NULL, NULL ) )
TRACE(_T("Serial Number: %lu of drive %s\n"), serialNumber, lpDrive);