Сплайсинг CreateFileA & CreateFileW
От: Аноним  
Дата: 18.12.08 07:01
Оценка:
Тебе поможет перехват ф-ий CreateFileA & CreateFileW — как ни крути в итоге чтобы создать\открыть файл, даже через fopen и т.д., вызовутся именно они — если это конечно виндовой проект. Detours — конечно жжет! Но у него есть недостаток — в коммерческих продуктах он платный! Я для этого написал свой Detours который ни чем не хуже чем у MS — конечно пару идей взял у них.
Подводя итоги могу сказать, что эта идея работает на все 1000%. У меня у самого два проекта на всю катушку используют перехват ф-ий, которые работают с файлами — таким способом я могу управлять файлами (откуда их взять и куда создать). Встраиваемая логика ничуть не тормозит!

Вообщем перехватишь все эти ф-ии — тогда будет тебе счастье:


HANDLE WINAPI ffCreateFileA(char* lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes, DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes, HANDLE hTemplateFile);
HANDLE WINAPI ffCreateFileW(wchar_t * lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes, DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes, HANDLE hTemplateFile);
BOOL WINAPI ffDeleteFileA(char* lpFileName);
BOOL WINAPI ffDeleteFileW(wchar_t* lpFileName);
BOOL WINAPI ffCreateDirectoryA(char * lpPathName, LPSECURITY_ATTRIBUTES lpSecurityAttributes);
BOOL WINAPI ffCreateDirectoryW(wchar_t * lpPathName, LPSECURITY_ATTRIBUTES lpSecurityAttributes);
BOOL WINAPI ffRemoveDirectoryA(char * lpPathName);
BOOL WINAPI ffRemoveDirectoryW(wchar_t * lpPathName);
BOOL WINAPI ffMoveFileA(char * lpExistingFileName, char * lpNewFileName);
BOOL WINAPI ffMoveFileW(wchar_t * lpExistingFileName, wchar_t * lpNewFileName);
BOOL WINAPI ffCopyFileA(char * lpExistingFileName, char * lpNewFileName, BOOL bFailIfExists);
BOOL WINAPI ffCopyFileW(wchar_t * lpExistingFileName, wchar_t * lpNewFileName, BOOL bFailIfExists);
DWORD WINAPI ffGetFileAttributesA(char * lpFileName);
DWORD WINAPI ffGetFileAttributesW(wchar_t * lpFileName);
UINT WINAPI ffGetTempFileNameA(char * lpPathName, char * lpPrefixString, UINT uUnique, char * lpTempFileName);
UINT WINAPI ffGetTempFileNameW(wchar_t * lpPathName, wchar_t * lpPrefixString, UINT uUnique, wchar_t * lpTempFileName);
HANDLE WINAPI ffFindFirstFileA(char * lpFileName, LPWIN32_FIND_DATAA lpFindFileData);
HANDLE WINAPI ffFindFirstFileW(wchar_t * lpFileName, LPWIN32_FIND_DATAW lpFindFileData);
BOOL WINAPI ffFindNextFileA(HANDLE hFindFile, LPWIN32_FIND_DATAA lpFindFileData);
BOOL WINAPI ffFindNextFileW(HANDLE hFindFile, LPWIN32_FIND_DATAW lpFindFileData);
BOOL WINAPI ffFindClose(HANDLE hFindFile);
BOOL WINAPI ffReadFile(HANDLE hFile, LPVOID lpBuffer, DWORD nNumberOfBytesToRead,
                       LPDWORD lpNumberOfBytesRead, LPOVERLAPPED lpOverlapped);
BOOL WINAPI ffWriteFile(HANDLE hFile, LPCVOID lpBuffer, DWORD nNumberOfBytesToWrite,
                        LPDWORD lpNumberOfBytesWritten, LPOVERLAPPED lpOverlapped);
DWORD WINAPI ffSetFilePointer(HANDLE hFile, LONG lDistanceToMove, PLONG lpDistanceToMoveHigh, DWORD dwMoveMethod);
BOOL WINAPI ffCloseHandle(HANDLE hObject);
DWORD WINAPI ffGetFileType(HANDLE hFile);
BOOL WINAPI ffFlushFileBuffers(HANDLE hFile);
BOOL WINAPI ffSetHandleInformation(HANDLE hObject, DWORD dwMask, DWORD dwFlags);
BOOL WINAPI ffGetHandleInformation(HANDLE hObject, LPDWORD lpdwFlags);
BOOL WINAPI ffGetFileInformationByHandle(HANDLE hFile, LPBY_HANDLE_FILE_INFORMATION lpFileInformation);
HANDLE WINAPI ffCreateIoCompletionPort(HANDLE FileHandle, HANDLE ExistingCompletionPort, ULONG_PTR CompletionKey, DWORD NumberOfConcurrentThreads);
BOOL WINAPI ffCancelIo(HANDLE FileHandle);
BOOL WINAPI ffReadFileEx(HANDLE hFile, LPVOID lpBuffer, DWORD nNumberOfBytesToRead, LPOVERLAPPED lpOverlapped, LPOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine);
HMODULE WINAPI ffLoadLibraryA(char* lpFileName);
HMODULE WINAPI ffLoadLibraryW(wchar_t* lpFileName);
BOOL WINAPI ffFreeLibrary(HMODULE hModule);
FARPROC WINAPI ffGetProcAddress(HMODULE hModule, LPCSTR lpProcName);
VOID WINAPI ffExitProcess(UINT uExitCode);
DWORD WINAPI ffGetFileSize(HANDLE hFile, LPDWORD lpFileSizeHigh);
BOOL WINAPI ffGetFileSizeEx(HANDLE hFile, PLARGE_INTEGER lpFileSize);
BOOL WINAPI ffGetFileTime(HANDLE hFile, LPFILETIME lpCreationTime, LPFILETIME lpLastAccessTime, LPFILETIME lpLastWriteTime);
BOOL WINAPI ffGetFileAttributesExA(char *lpFileName, GET_FILEEX_INFO_LEVELS fInfoLevelId, LPVOID lpFileInformation);
BOOL WINAPI ffGetFileAttributesExW(wchar_t *lpFileName, GET_FILEEX_INFO_LEVELS fInfoLevelId, LPVOID lpFileInformation);
HMODULE WINAPI ffGetModuleHandleA(char *lpModuleName);
HMODULE WINAPI ffGetModuleHandleW(wchar_t *lpModuleName);

DWORD WINAPI ffGetModuleFileNameA(HMODULE hModule, char *lpFilename, DWORD nSize);
DWORD WINAPI ffGetModuleFileNameW(HMODULE hModule, wchar_t *lpFilename, DWORD nSize);
/************************************************************************/
/* Other System API                                                     */
/************************************************************************/


BOOL WINAPI ffSetCurrentDirectoryA(char *lpPathName);
BOOL WINAPI ffSetCurrentDirectoryW(wchar_t *lpPathName);
HANDLE WINAPI ffCreateFileMappingA(HANDLE hFile, LPSECURITY_ATTRIBUTES lpAttributes, DWORD flProtect, DWORD dwMaximumSizeHigh, DWORD dwMaximumSizeLow, char *lpName);
HANDLE WINAPI ffCreateFileMappingW(HANDLE hFile, LPSECURITY_ATTRIBUTES lpAttributes, DWORD flProtect, DWORD dwMaximumSizeHigh, DWORD dwMaximumSizeLow, wchar_t *lpName);
BOOL WINAPI ffLockFile(HANDLE hFile, DWORD dwFileOffsetLow, DWORD dwFileOffsetHigh, DWORD nNumberOfBytesToLockLow, DWORD nNumberOfBytesToLockHigh);
LPVOID WINAPI ffMapViewOfFile(HANDLE hFileMappingObject, DWORD dwDesiredAccess, DWORD dwFileOffsetHigh, DWORD dwFileOffsetLow, SIZE_T dwNumberOfBytesToMap);
HINSTANCE WINAPI ffShellExecuteA(HWND hwnd, char *lpOperation, char *lpFile, char *lpParameters, char *lpDirectory, INT nShowCmd);
HINSTANCE WINAPI ffShellExecuteW(HWND hwnd, wchar_t *lpOperation, wchar_t *lpFile, wchar_t *lpParameters, wchar_t *lpDirectory, INT nShowCmd);
BOOL WINAPI ffSHGetSpecialFolderPathA(HWND hwndOwner, char *lpszPath, int nFolder, BOOL fCreate);
BOOL WINAPI ffSHGetSpecialFolderPathW(HWND hwndOwner, wchar_t *lpszPath, int nFolder, BOOL fCreate);
BOOL WINAPI ffCreateDirectoryExA(char *lpTemplateDirectory, char *lpNewDirectory, LPSECURITY_ATTRIBUTES lpSecurityAttributes);
BOOL WINAPI ffCreateDirectoryExW(char *lpTemplateDirectory, char *lpNewDirectory, LPSECURITY_ATTRIBUTES lpSecurityAttributes);
BOOL WINAPI ffSetEndOfFile(HANDLE hFile);


Это конечно же не весь список — но идея я думаю понятна?!?!?!?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.