bool CIfo::OpenFile (LPCTSTR strFile) { bool bRet = false; HANDLE hFile; LARGE_INTEGER size; hFile = Real_CreateFileW((LPTSTR) strFile, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); ASSERT (hFile != INVALID_HANDLE_VALUE); if (hFile != INVALID_HANDLE_VALUE && GetFileSizeEx(hFile, &size) && size.QuadPart <= 0x800000) { // max size of the ifo file = 8 MB (taken with reserve. need a more correct info) m_pBuffer = DNew BYTE [size.QuadPart]; ReadFile (hFile, m_pBuffer, size.QuadPart, &m_dwSize, NULL); CloseHandle (hFile); if (IsVTS() && (OFF_VTSM_PGCI_UT(m_pBuffer)!=0)) { m_pPGCI = (ifo_hdr_t*)(m_pBuffer + OFF_VTSM_PGCI_UT(m_pBuffer) * DVD_VIDEO_LB_LEN); m_pPGCIT = (ifo_hdr_t*)(m_pBuffer + OFF_VTS_PGCIT(m_pBuffer) * DVD_VIDEO_LB_LEN); } else if (IsVMG() && (OFF_VMGM_PGCI_UT(m_pBuffer)!=0)) { m_pPGCI = (ifo_hdr_t*)(m_pBuffer + OFF_VMGM_PGCI_UT(m_pBuffer) * DVD_VIDEO_LB_LEN); } bRet = (m_pPGCI != NULL); } return bRet; }
bool CIfo::OpenFile (LPCTSTR strFile) { bool bRet = false; HANDLE hFile; hFile = Real_CreateFileW((LPTSTR) strFile, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); ASSERT (hFile != INVALID_HANDLE_VALUE); if (hFile != INVALID_HANDLE_VALUE) { DWORD dwSize = GetFileSize (hFile, NULL); m_pBuffer = new BYTE [dwSize]; ReadFile (hFile, m_pBuffer, dwSize, &m_dwSize, NULL); CloseHandle (hFile); if (IsVTS() && (OFF_VTSM_PGCI_UT(m_pBuffer)!=0)) { m_pPGCI = (ifo_hdr_t*)(m_pBuffer + OFF_VTSM_PGCI_UT(m_pBuffer) * DVD_VIDEO_LB_LEN); m_pPGCIT = (ifo_hdr_t*)(m_pBuffer + OFF_VTS_PGCIT(m_pBuffer) * DVD_VIDEO_LB_LEN); } else if (IsVMG() && (OFF_VMGM_PGCI_UT(m_pBuffer)!=0)) m_pPGCI = (ifo_hdr_t*)(m_pBuffer + OFF_VMGM_PGCI_UT(m_pBuffer) * DVD_VIDEO_LB_LEN); bRet = (m_pPGCI != NULL); } return bRet; }