bool DoesDirExist(LPCWSTR name) { AString Aname = UnicodeStringToMultiByte(name, CP_ACP); bool bret = DoesDirExist((LPCSTR)Aname); if (bret) return bret; // Try to recover the original filename AString resultString; bool is_good = originalFilename(name, resultString); if (is_good) { bret = DoesDirExist((const char *)resultString); } return bret; }
void CRipInfoDB::SetFileName( CUString strFileName ) { CUString strOutPath = g_config.GetCDDBPath() + _W( "Status\\" ); // And test it, no dialog please DoesDirExist( strOutPath, FALSE ); m_strFileName = strOutPath + strFileName + _W( ".txt" ); }
UINT CMP3ToWavDlg::ConvertFunc(PVOID pParams) { CUString strLang; int nPeakValue = 0; DWORD dwIndex = 0; CDEX_ERR bErr = CDEX_OK; PBYTE pStream = NULL; DWORD dwTotalTime = 0; ENTRY_TRACE( _T( "ConvertFunc" ) ); CMP3ToWavDlg* pDlg = (CMP3ToWavDlg*)pParams; pDlg->m_wCurrentTrack = 0; pDlg->m_bAbortThread = FALSE; CUString strOutDir(g_config.GetCnvOutputDir()); while( pDlg->m_wCurrentTrack < pDlg->m_nTotalFiles && !pDlg->m_bAbortThread ) { BOOL bNoToAll = FALSE; nPeakValue = 0; POSITION nFileListPos = pDlg->m_Pos; pDlg->m_strMP3FileName = pDlg->m_pFileDlg->GetNextPathName( pDlg->m_Pos ); pDlg->m_strWavFileName = pDlg->m_pFileDlg->GetFileName( nFileListPos ); CUString strSubPath = pDlg->m_pFileDlg->GetSubPath( nFileListPos ); int nPos = pDlg->m_strWavFileName.ReverseFind('.'); if (nPos > 0 ) { pDlg->m_strWavFileName= pDlg->m_strWavFileName.Left( nPos ); } strOutDir = g_config.GetCnvOutputDir() + strSubPath; // Prepend output directory pDlg->m_strWavFileName= strOutDir + CUString( pDlg->m_strWavFileName ); // Create Ouput directory if ( CDEX_OK != DoesDirExist( strOutDir, FALSE ) ) { LTRACE( _T( "ConvertFunc::Error creating output dir %s" ), strOutDir ); strLang = g_language.GetString( IDS_CANNOT_CREATE_OUTDIR ); CDexMessageBox( strLang + strOutDir ); bErr = CDEX_ERROR; } // Clear error flag bErr = CDEX_OK; LTRACE( _T( "Converting track %d" ), pDlg->m_wCurrentTrack ); // Reset estimate timer //pDlg->m_TimeTrack.ReInit(); pDlg->m_nPercentCompleted=0; // create proper input stream pDlg->m_pInStream = ICreateStream( CUString( pDlg->m_strMP3FileName ) ); if ( FALSE == CheckNoFileOverwrite( pDlg, CUString( pDlg->m_strWavFileName ) + _W( ".wav" ), TRUE, pDlg->m_bYesToAll, bNoToAll ) ) { // Open the input stream if available if ( pDlg->m_pInStream && pDlg->m_pInStream->OpenStream( CUString( pDlg->m_strMP3FileName ) ) ) { DWORD dwBufferSize = pDlg->m_pInStream->GetBufferSize(); // Reset estimate timer dwTotalTime = pDlg->m_pInStream->GetTotalTime(); pDlg->m_TimeTrack.ReInit( dwTotalTime ); // Create a play stream object OSndStreamWAV wavStream; wavStream.CopyStreamInfo( *pDlg->m_pInStream ); // Initialize output WAV stream object wavStream.OpenStream( CUString( pDlg->m_strWavFileName ) ); // Allocate stream input buffer pStream = new BYTE[ dwBufferSize ]; int nMPEGBytes = 0; double dSampleRatio = 1.0; BOOL bFinished = FALSE; while( ( FALSE == bFinished ) && !pDlg->m_bAbortThread ) { nMPEGBytes = pDlg->m_pInStream->Read( pStream, dwBufferSize ); if ( nMPEGBytes > 0 ) { for ( dwIndex=0; dwIndex< (DWORD)nMPEGBytes / 2; dwIndex++ ) { if ( abs( ((SHORT*)pStream)[dwIndex]) > nPeakValue ) nPeakValue=abs( ((SHORT*)pStream )[ dwIndex ] ); } if ( nMPEGBytes > 0 ) { wavStream.Write( pStream, nMPEGBytes ); } int nTotalTime = pDlg->m_pInStream->GetTotalTime(); int nCurrentTime = pDlg->m_pInStream->GetCurrentTime(); if ( nTotalTime ) { pDlg->m_nPercentCompleted = nCurrentTime * 100 / nTotalTime; } else { pDlg->m_nPercentCompleted = 0; } } else { bFinished = TRUE; } } delete [] pStream; pStream= NULL; // Close input stream pDlg->m_pInStream->CloseStream(); // Close the WAV stream wavStream.CloseStream(); // close the Input stream // Check if we have to normalize the file if ( pDlg->m_pFileDlg->m_bNormalize && FALSE == pDlg->m_bAbortThread ) { double dNormFactor=1.0; // Reset estimate timer pDlg->m_TimeTrack.ReInit(dwTotalTime); // Set percentage completed to zero pDlg->m_nPercentCompleted=0; // Determine normalization factor dNormFactor=((nPeakValue-1.0)/327.68); // DO we have to normalize this file if (dNormFactor<(double)g_config.GetLowNormLevel() || dNormFactor>(double)g_config.GetHighNormLevel()) { if (dNormFactor<(double)g_config.GetLowNormLevel()) { // Normalize to for desired level dNormFactor=(double)g_config.GetLNormFactor()/dNormFactor; } else { // Normalize to for desired level dNormFactor=(double)g_config.GetHNormFactor()/dNormFactor; } // Little fine tuning to avoid overflows due to round off errors dNormFactor*=0.9999; LTRACE( _T( "CMP3ToWavDlg::Normalizing Track/File %s with factor %f" ), pDlg->m_strWavFileName, dNormFactor ); CWAV myWav; // Step 1: Open the input WAV file if ( myWav.StartNormalizeAudioFile( CUString( pDlg->m_strWavFileName ) )!=0) { // Step 2: Loop through data and normalize chunk while ( myWav.NormalizeAudioFileChunk( dNormFactor, pDlg->m_nPercentCompleted ) == FALSE && !pDlg->m_bAbortThread ) { ::Sleep(0); } // Step 3: Close the input WAV file, and replace original myWav.CloseNormalizeAudioFile( CUString( pDlg->m_strWavFileName ) , pDlg->m_bAbortThread, TRUE ); } } } // Check if thread has been aborted, if so, remove original file if ( TRUE == pDlg->m_bAbortThread ) { LTRACE( _T( "Deleting file ( due to abort ) %s.wav" ), pDlg->m_strWavFileName ); DeleteFile( pDlg->m_strWavFileName + _T( ".wav" ) ); } // Check if we have to delete the file if ( pDlg->m_pFileDlg->m_bDeleteOriginal && ( FALSE == pDlg->m_bAbortThread ) ) { LTRACE( _T( "Deleting file ( user request ) %s" ), pDlg->m_strMP3FileName ); DeleteFile( pDlg->m_strMP3FileName ); } } } else { if ( TRUE == bNoToAll ) { pDlg->m_bAbortThread = TRUE; } } // delete input stream object delete pDlg->m_pInStream;pDlg->m_pInStream=NULL; // Jump to the next track pDlg->m_wCurrentTrack++; } pDlg->m_eThreadFinished.SetEvent(); // OK close the stuff pDlg->PostMessage( WM_COMMAND, IDCANCEL,0); EXIT_TRACE( _T( "RipFunc" ) ); return 0; }
// // TODO: Instead of returning TRUE/FALSE, it would be nice to return // a flag indicating: // - whether the installation is actually valid; // - if it's broken or not (aka. needs for repair, or just upgrading). // static BOOLEAN IsValidNTOSInstallationByHandle( IN HANDLE SystemRootDirectory, OUT PUSHORT Machine OPTIONAL, OUT PUNICODE_STRING VendorName OPTIONAL) { BOOLEAN Success = FALSE; PCWSTR PathName; USHORT i; USHORT LocalMachine; UNICODE_STRING LocalVendorName; WCHAR VendorNameBuffer[MAX_PATH]; /* Check for VendorName validity */ if (VendorName->MaximumLength < sizeof(UNICODE_NULL)) { /* Don't use it, invalidate the pointer */ VendorName = NULL; } else { /* Zero it out */ *VendorName->Buffer = UNICODE_NULL; VendorName->Length = 0; } /* Check for the existence of \SystemRoot\System32 */ PathName = L"System32\\"; if (!DoesDirExist(SystemRootDirectory, PathName)) { // DPRINT1("Failed to open directory '%S', Status 0x%08lx\n", PathName, Status); return FALSE; } /* Check for the existence of \SystemRoot\System32\drivers */ PathName = L"System32\\drivers\\"; if (!DoesDirExist(SystemRootDirectory, PathName)) { // DPRINT1("Failed to open directory '%S', Status 0x%08lx\n", PathName, Status); return FALSE; } /* Check for the existence of \SystemRoot\System32\config */ PathName = L"System32\\config\\"; if (!DoesDirExist(SystemRootDirectory, PathName)) { // DPRINT1("Failed to open directory '%S', Status 0x%08lx\n", PathName, Status); return FALSE; } #if 0 /* * Check for the existence of SYSTEM and SOFTWARE hives in \SystemRoot\System32\config * (but we don't check here whether they are actually valid). */ PathName = L"System32\\config\\SYSTEM"; if (!DoesFileExist(SystemRootDirectory, PathName)) { // DPRINT1("Failed to open file '%S', Status 0x%08lx\n", PathName, Status); return FALSE; } PathName = L"System32\\config\\SOFTWARE"; if (!DoesFileExist(SystemRootDirectory, PathName)) { // DPRINT1("Failed to open file '%S', Status 0x%08lx\n", PathName, Status); return FALSE; } #endif RtlInitEmptyUnicodeString(&LocalVendorName, VendorNameBuffer, sizeof(VendorNameBuffer)); /* Check for the existence of \SystemRoot\System32\ntoskrnl.exe and retrieves its vendor name */ PathName = L"System32\\ntoskrnl.exe"; Success = CheckForValidPEAndVendor(SystemRootDirectory, PathName, &LocalMachine, &LocalVendorName); if (!Success) DPRINT1("Kernel executable '%S' is either not a PE file, or does not have any vendor?\n", PathName); /* * The kernel gives the OS its flavour. If we failed due to the absence of * ntoskrnl.exe this might be due to the fact this particular installation * uses a custom kernel that has a different name, overridden in the boot * parameters. We then rely on the existence of ntdll.dll, which cannot be * renamed on a valid NT system. */ if (Success) { for (i = 0; i < ARRAYSIZE(KnownVendors); ++i) { Success = !!FindSubStrI(LocalVendorName.Buffer, KnownVendors[i]); if (Success) { /* We have found a correct vendor combination */ DPRINT("IsValidNTOSInstallation: We've got an NTOS installation from %S !\n", KnownVendors[i]); break; } } /* Return the target architecture */ if (Machine) { /* Copy the value and invalidate the pointer */ *Machine = LocalMachine; Machine = NULL; } /* Return the vendor name */ if (VendorName) { /* Copy the string and invalidate the pointer */ RtlCopyUnicodeString(VendorName, &LocalVendorName); VendorName = NULL; } } /* OPTIONAL: Check for the existence of \SystemRoot\System32\ntkrnlpa.exe */ /* Check for the existence of \SystemRoot\System32\ntdll.dll and retrieves its vendor name */ PathName = L"System32\\ntdll.dll"; Success = CheckForValidPEAndVendor(SystemRootDirectory, PathName, &LocalMachine, &LocalVendorName); if (!Success) DPRINT1("User-mode DLL '%S' is either not a PE file, or does not have any vendor?\n", PathName); if (Success) { for (i = 0; i < ARRAYSIZE(KnownVendors); ++i) { if (!!FindSubStrI(LocalVendorName.Buffer, KnownVendors[i])) { /* We have found a correct vendor combination */ DPRINT("IsValidNTOSInstallation: The user-mode DLL '%S' is from %S\n", PathName, KnownVendors[i]); break; } } /* Return the target architecture if not already obtained */ if (Machine) { /* Copy the value and invalidate the pointer */ *Machine = LocalMachine; Machine = NULL; } /* Return the vendor name if not already obtained */ if (VendorName) { /* Copy the string and invalidate the pointer */ RtlCopyUnicodeString(VendorName, &LocalVendorName); VendorName = NULL; } } return Success; }