HANDLE WINAPI Mine_CreateFileW(LPCWSTR a0, DWORD a1, DWORD a2, LPSECURITY_ATTRIBUTES a3, DWORD a4, DWORD a5, HANDLE a6) { if (s_HelloCppHandle == 0 && wcsstr(a0, L"Hello.cpp")) { Syelog(SYELOG_SEVERITY_INFORMATION, "CreateFileW(): %ls", a0); s_HelloCppHandle = Real_CreateFileW(a0, a1, a2, a3, a4, a5, a6); return s_HelloCppHandle; } return Real_CreateFileW(a0, a1, a2, a3, a4, a5, a6); }
HANDLE WINAPI Mine_CreateFileW(LPCWSTR a0, DWORD a1, DWORD a2, LPSECURITY_ATTRIBUTES a3, DWORD a4, DWORD a5, HANDLE a6) { if (s_SourceFileHandle == 0 && XORVALUE && wcsstr(a0, SOURCEFILE)) { #if defined(USE_SYELOG) Syelog(SYELOG_SEVERITY_INFORMATION, "CreateFileW(): %ls", a0); #endif s_SourceFileHandle = Real_CreateFileW(a0, a1, a2, a3, a4, a5, a6); return s_SourceFileHandle; } return Real_CreateFileW(a0, a1, a2, a3, a4, a5, a6); }
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; }
HANDLE WINAPI Mine_CreateFileW(LPCWSTR a0, DWORD a1, DWORD a2, LPSECURITY_ATTRIBUTES a3, DWORD a4, DWORD a5, HANDLE a6) { _PrintEnter("CreateFileW(%ls,%x,%x,%p,%x,%x,%p)\n", a0, a1, a2, a3, a4, a5, a6); HANDLE rv = 0; __try { rv = Real_CreateFileW(a0, a1, a2, a3, a4, a5, a6); } __finally { _PrintExit("CreateFileW(,,,,,,) -> %p\n", rv); }; return rv; }
bool CIfo::SaveFile(LPCTSTR strFile) { bool bRet = false; if (m_pBuffer) { HANDLE m_hFile = Real_CreateFileW((LPTSTR) strFile, GENERIC_WRITE | GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, nullptr, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, nullptr); ASSERT(m_hFile != INVALID_HANDLE_VALUE); if (m_hFile != INVALID_HANDLE_VALUE) { DWORD dwSize; WriteFile(m_hFile, m_pBuffer, m_dwSize, &dwSize, nullptr); CloseHandle(m_hFile); bRet = true; } } return bRet; }