diff options
Diffstat (limited to 'src/ToolBox/superpmi/superpmi/filecache.cpp')
-rw-r--r-- | src/ToolBox/superpmi/superpmi/filecache.cpp | 134 |
1 files changed, 62 insertions, 72 deletions
diff --git a/src/ToolBox/superpmi/superpmi/filecache.cpp b/src/ToolBox/superpmi/superpmi/filecache.cpp index dcd783a09b..0455fa9fe7 100644 --- a/src/ToolBox/superpmi/superpmi/filecache.cpp +++ b/src/ToolBox/superpmi/superpmi/filecache.cpp @@ -8,93 +8,89 @@ #include "standardpch.h" #include "filecache.h" -#define FileCacheSize 0xFFFFFF //needs to be bigger than the biggest read request. +#define FileCacheSize 0xFFFFFF // needs to be bigger than the biggest read request. -HANDLE FileCache::cachedHandle; -bool FileCache::openAsCache; -BYTE *FileCache::rawBuff; +HANDLE FileCache::cachedHandle; +bool FileCache::openAsCache; +BYTE* FileCache::rawBuff; unsigned int FileCache::offset; unsigned int FileCache::length; -__int64 FileCache::fileoffset; +__int64 FileCache::fileoffset; HANDLE -FileCache::CreateFileA( - _In_ LPCSTR lpFileName, - _In_ DWORD dwDesiredAccess, - _In_ DWORD dwShareMode, - _In_opt_ LPSECURITY_ATTRIBUTES lpSecurityAttributes, - _In_ DWORD dwCreationDisposition, - _In_ DWORD dwFlagsAndAttributes, - _In_opt_ HANDLE hTemplateFile - ) +FileCache::CreateFileA(_In_ LPCSTR lpFileName, + _In_ DWORD dwDesiredAccess, + _In_ DWORD dwShareMode, + _In_opt_ LPSECURITY_ATTRIBUTES lpSecurityAttributes, + _In_ DWORD dwCreationDisposition, + _In_ DWORD dwFlagsAndAttributes, + _In_opt_ HANDLE hTemplateFile) { openAsCache = false; - rawBuff = nullptr; - offset = 0; - length = 0; + rawBuff = nullptr; + offset = 0; + length = 0; - if((dwShareMode&CACHE_THIS_FILE)==CACHE_THIS_FILE) + if ((dwShareMode & CACHE_THIS_FILE) == CACHE_THIS_FILE) { dwShareMode ^= CACHE_THIS_FILE; openAsCache = true; } - HANDLE temp = ::CreateFileA(lpFileName, dwDesiredAccess, dwShareMode, lpSecurityAttributes, dwCreationDisposition, dwFlagsAndAttributes, hTemplateFile); - if(openAsCache) - cachedHandle = temp; //yes yes.. this is unsafe.. but one accessor now is okay. bswhack + HANDLE temp = ::CreateFileA(lpFileName, dwDesiredAccess, dwShareMode, lpSecurityAttributes, dwCreationDisposition, + dwFlagsAndAttributes, hTemplateFile); + if (openAsCache) + cachedHandle = temp; // yes yes.. this is unsafe.. but one accessor now is okay. bswhack return temp; } HANDLE -FileCache::CreateFileW( - _In_ LPCWSTR lpFileName, - _In_ DWORD dwDesiredAccess, - _In_ DWORD dwShareMode, - _In_opt_ LPSECURITY_ATTRIBUTES lpSecurityAttributes, - _In_ DWORD dwCreationDisposition, - _In_ DWORD dwFlagsAndAttributes, - _In_opt_ HANDLE hTemplateFile - ) +FileCache::CreateFileW(_In_ LPCWSTR lpFileName, + _In_ DWORD dwDesiredAccess, + _In_ DWORD dwShareMode, + _In_opt_ LPSECURITY_ATTRIBUTES lpSecurityAttributes, + _In_ DWORD dwCreationDisposition, + _In_ DWORD dwFlagsAndAttributes, + _In_opt_ HANDLE hTemplateFile) { openAsCache = false; - rawBuff = nullptr; - offset = 0; - length = 0; - return ::CreateFileW(lpFileName, dwDesiredAccess, dwShareMode, lpSecurityAttributes, dwCreationDisposition, dwFlagsAndAttributes, hTemplateFile); + rawBuff = nullptr; + offset = 0; + length = 0; + return ::CreateFileW(lpFileName, dwDesiredAccess, dwShareMode, lpSecurityAttributes, dwCreationDisposition, + dwFlagsAndAttributes, hTemplateFile); } - -//Somewhat sloppy quick copy... we don't treat lpNumberOfBytesRead etc correctly -BOOL -FileCache::ReadFile( - _In_ HANDLE hFile, - _Out_writes_bytes_to_opt_(nNumberOfBytesToRead, *lpNumberOfBytesRead) __out_data_source(FILE) LPVOID lpBuffer, - _In_ DWORD nNumberOfBytesToRead, - _Out_opt_ LPDWORD lpNumberOfBytesRead, - _Inout_opt_ LPOVERLAPPED lpOverlapped - ) +// Somewhat sloppy quick copy... we don't treat lpNumberOfBytesRead etc correctly +BOOL FileCache::ReadFile(_In_ HANDLE hFile, + _Out_writes_bytes_to_opt_(nNumberOfBytesToRead, *lpNumberOfBytesRead) __out_data_source(FILE) + LPVOID lpBuffer, + _In_ DWORD nNumberOfBytesToRead, + _Out_opt_ LPDWORD lpNumberOfBytesRead, + _Inout_opt_ LPOVERLAPPED lpOverlapped) { - if(!openAsCache) + if (!openAsCache) return ::ReadFile(hFile, lpBuffer, nNumberOfBytesToRead, lpNumberOfBytesRead, lpOverlapped); else { - if(rawBuff == nullptr) + if (rawBuff == nullptr) { rawBuff = new BYTE[FileCacheSize]; - length = FileCacheSize; - offset = FileCacheSize; + length = FileCacheSize; + offset = FileCacheSize; } - if(nNumberOfBytesToRead > FileCacheSize) + if (nNumberOfBytesToRead > FileCacheSize) { printf("ERROR: nNumberOfBytesToRead exceeds FileCacheSize %u > %u\n", nNumberOfBytesToRead, FileCacheSize); __debugbreak(); } - if((offset+nNumberOfBytesToRead) > length) + if ((offset + nNumberOfBytesToRead) > length) { - memmove(rawBuff, &rawBuff[offset], length-offset); //Use memmove since we have overlapping regions more than half the time - ::ReadFile(hFile, &rawBuff[length-offset], offset, lpNumberOfBytesRead, lpOverlapped); - if(*lpNumberOfBytesRead ==0) + memmove(rawBuff, &rawBuff[offset], + length - offset); // Use memmove since we have overlapping regions more than half the time + ::ReadFile(hFile, &rawBuff[length - offset], offset, lpNumberOfBytesRead, lpOverlapped); + if (*lpNumberOfBytesRead == 0) __debugbreak(); - length -= offset-(*lpNumberOfBytesRead); + length -= offset - (*lpNumberOfBytesRead); LARGE_INTEGER DataTemp; LARGE_INTEGER zero; zero.QuadPart = 0; @@ -104,23 +100,20 @@ FileCache::ReadFile( offset = 0; } memcpy(lpBuffer, &rawBuff[offset], nNumberOfBytesToRead); - offset+=nNumberOfBytesToRead; - if(offset > FileCacheSize) + offset += nNumberOfBytesToRead; + if (offset > FileCacheSize) __debugbreak(); return true; } } -BOOL -FileCache::WriteFile( - _In_ HANDLE hFile, - _In_reads_bytes_opt_(nNumberOfBytesToWrite) LPCVOID lpBuffer, - _In_ DWORD nNumberOfBytesToWrite, - _Out_opt_ LPDWORD lpNumberOfBytesWritten, - _Inout_opt_ LPOVERLAPPED lpOverlapped - ) +BOOL FileCache::WriteFile(_In_ HANDLE hFile, + _In_reads_bytes_opt_(nNumberOfBytesToWrite) LPCVOID lpBuffer, + _In_ DWORD nNumberOfBytesToWrite, + _Out_opt_ LPDWORD lpNumberOfBytesWritten, + _Inout_opt_ LPOVERLAPPED lpOverlapped) { - if(!openAsCache) + if (!openAsCache) return ::WriteFile(hFile, lpBuffer, nNumberOfBytesToWrite, lpNumberOfBytesWritten, lpOverlapped); else { @@ -130,17 +123,14 @@ FileCache::WriteFile( } } -BOOL -FileCache::CloseHandle( - _In_ HANDLE hObject - ) +BOOL FileCache::CloseHandle(_In_ HANDLE hObject) { - if(!openAsCache) + if (!openAsCache) return ::CloseHandle(hObject); else { - if(rawBuff!=nullptr) - delete []rawBuff; + if (rawBuff != nullptr) + delete[] rawBuff; return ::CloseHandle(hObject); } } |