public TempleLibrary(string filename) { _previousCurrentDirectory = Directory.GetCurrentDirectory(); var directory = Path.GetDirectoryName(filename); if (directory != null) { Directory.SetCurrentDirectory(directory); } Filename = filename; Handle = Win32Api.LoadLibrary(filename); if (!Valid) { Error = new Win32Exception().Message; } else { ImportAddressTable = new ImportAddressTable(Handle); } }
public FilesystemRedirector(TempleLibrary library, Settings settings) { _settings = settings; LoadRedirections(settings); InitializeDelegates(); var iat = library.ImportAddressTable; var tioHandle = Win32Api.GetModuleHandle("tio.dll"); var tioIat = new ImportAddressTable(tioHandle); var binkHandle = Win32Api.GetModuleHandle("binkw32.dll"); var binkIat = new ImportAddressTable(binkHandle); var msvcrHandle = Win32Api.GetModuleHandle("msvcr71.dll"); var msvcrIat = new ImportAddressTable(msvcrHandle); var pythonHandle = Win32Api.GetModuleHandle("pyToEE22.dll"); var pythonIat = new ImportAddressTable(pythonHandle); var pathAddImport = iat.GetImportedFunction("tio.dll", "tio_path_add"); var tioPathAdd = Win32Api.GetProcAddress(tioHandle, "tio_path_add"); _originalTioPathAdd = (TioPathAdd)Marshal.GetDelegateForFunctionPointer(tioPathAdd, typeof(TioPathAdd)); pathAddImport.ReplaceFunction(_tioPathAdd); /* * iat.ReplaceFunction("kernel32.dll", "CreateFileA", _createFileDelegate); * tioIat.ReplaceFunction("kernel32.dll", "CreateFileA", _createFileDelegate); * binkIat.ReplaceFunction("kernel32.dll", "CreateFileA", _createFileDelegate); * msvcrIat.ReplaceFunction("kernel32.dll", "CreateFileA", _createFileDelegate); * * iat.ReplaceFunction("kernel32.dll", "CloseHandle", _closeHandleDelegate); * tioIat.ReplaceFunction("kernel32.dll", "CloseHandle", _closeHandleDelegate); * binkIat.ReplaceFunction("kernel32.dll", "CloseHandle", _closeHandleDelegate); * msvcrIat.ReplaceFunction("kernel32.dll", "CloseHandle", _closeHandleDelegate); * * tioIat.ReplaceFunction("kernel32.dll", "ReadFile", _readFileDelegate); * iat.ReplaceFunction("kernel32.dll", "ReadFile", _readFileDelegate); * binkIat.ReplaceFunction("kernel32.dll", "ReadFile", _readFileDelegate); * msvcrIat.ReplaceFunction("kernel32.dll", "ReadFile", _readFileDelegate); * * tioIat.ReplaceFunction("kernel32.dll", "GetFileType", _getFileTypeDelegate); * iat.ReplaceFunction("kernel32.dll", "GetFileType", _getFileTypeDelegate); * binkIat.ReplaceFunction("kernel32.dll", "GetFileType", _getFileTypeDelegate); * msvcrIat.ReplaceFunction("kernel32.dll", "GetFileType", _getFileTypeDelegate); * * tioIat.ReplaceFunction("kernel32.dll", "SetFilePointer", _setFilePointerDelegate); * iat.ReplaceFunction("kernel32.dll", "SetFilePointer", _setFilePointerDelegate); * binkIat.ReplaceFunction("kernel32.dll", "SetFilePointer", _setFilePointerDelegate); * msvcrIat.ReplaceFunction("kernel32.dll", "SetFilePointer", _setFilePointerDelegate); * * tioIat.ReplaceFunction("kernel32.dll", "SetEndOfFile", _setEndOfFileDelegate); * iat.ReplaceFunction("kernel32.dll", "SetEndOfFile", _setEndOfFileDelegate); * msvcrIat.ReplaceFunction("kernel32.dll", "SetEndOfFile", _setEndOfFileDelegate); * * tioIat.ReplaceFunction("kernel32.dll", "GetFileInformationByHandle", _getFileInformationByHandleDelegate); * msvcrIat.ReplaceFunction("kernel32.dll", "GetFileInformationByHandle", _getFileInformationByHandleDelegate); * * iat.ReplaceFunction("kernel32.dll", "FindFirstFileA", _findFirstFile); * tioIat.ReplaceFunction("kernel32.dll", "FindFirstFileA", _findFirstFile); * tioIat.ReplaceFunction("kernel32.dll", "FindNextFileA", _findNextFile); * tioIat.ReplaceFunction("kernel32.dll", "FindClose", _findClose); * * msvcrIat.ReplaceFunction("kernel32.dll", "FindFirstFileA", _findFirstFile); * msvcrIat.ReplaceFunction("kernel32.dll", "FindNextFileA", _findNextFile); * msvcrIat.ReplaceFunction("kernel32.dll", "FindClose", _findClose); * * pythonIat.ReplaceFunction("kernel32.dll", "FindFirstFileA", _findFirstFile); * pythonIat.ReplaceFunction("kernel32.dll", "FindNextFileA", _findNextFile); * pythonIat.ReplaceFunction("kernel32.dll", "FindClose", _findClose); * * tioIat.ReplaceFunction("kernel32.dll", "CreateDirectoryA", _createDirectoryDelegate); * * tioIat.ReplaceFunction("kernel32.dll", "DeleteFileA", _deleteFileDelegate); * * tioIat.ReplaceFunction("kernel32.dll", "RemoveDirectoryA", _removeDirectoryDelegate); * * tioIat.ReplaceFunction("kernel32.dll", "MoveFileA", _moveFileDelegate); * * tioIat.ReplaceFunction("kernel32.dll", "GetFileAttributesA", _getFileAttributesDelegate); * msvcrIat.ReplaceFunction("kernel32.dll", "GetFileAttributesA", _getFileAttributesDelegate);*/ /* * var dllPath = Path.Combine(settings.InstallationDirectory, "7z.dll"); * SevenZipBase.SetLibraryPath(dllPath); * * if (settings.MountedArchives.Count > 0) * { * var archivePath = settings.MountedArchives[0]; * _extractor = new SevenZipExtractor(archivePath); * * foreach (var entry in _extractor.ArchiveFileData) * { * var filename = NormalizeFileName(entry.FileName); * _archiveFiles.Add(filename, entry.Index); * } * }*/ }