1/** 2 * This file is part of the mingw-w64 runtime package. 3 * No warranty is given; refer to the file DISCLAIMER within this package. 4 */ 5 6#ifndef _FILEHC_H_ 7#define _FILEHC_H_ 8#include <winapifamily.h> 9 10#if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP) 11 12#ifndef WINAPI 13#if defined(_ARM_) 14#define WINAPI 15#else 16#define WINAPI __stdcall 17#endif 18#endif 19 20#ifdef _FILEHC_IMPLEMENTATION_ 21#define FILEHC_EXPORT __declspec (dllexport) 22#else 23#define FILEHC_EXPORT __declspec (dllimport) 24#endif 25 26#ifdef __cplusplus 27extern "C" { 28#endif 29 30 typedef VOID (*PFN_IO_COMPLETION) (struct FIO_CONTEXT *pContext, struct FH_OVERLAPPED *lpo, DWORD cb, DWORD dwCompletionStatus); 31 32 struct FH_OVERLAPPED { 33 UINT_PTR Internal; 34 UINT_PTR InternalHigh; 35 DWORD Offset; 36 DWORD OffsetHigh; 37 HANDLE hEvent; 38 PFN_IO_COMPLETION pfnCompletion; 39 UINT_PTR Reserved1; 40 UINT_PTR Reserved2; 41 UINT_PTR Reserved3; 42 UINT_PTR Reserved4; 43 }; 44 45 typedef struct FH_OVERLAPPED *PFH_OVERLAPPED; 46 47 struct FIO_CONTEXT { 48 DWORD m_dwTempHack; 49 DWORD m_dwSignature; 50 HANDLE m_hFile; 51 DWORD m_dwLinesOffset; 52 DWORD m_dwHeaderLength; 53 }; 54 55 typedef FIO_CONTEXT *PFIO_CONTEXT; 56 57 struct NAME_CACHE_CONTEXT { 58 DWORD m_dwSignature; 59 }; 60 61 typedef struct NAME_CACHE_CONTEXT *PNAME_CACHE_CONTEXT; 62 63 typedef HANDLE (WINAPI *FCACHE_CREATE_CALLBACK) (LPSTR lpstrName, LPVOID lpvData, DWORD *cbFileSize, DWORD *cbFileSizeHigh); 64 typedef HANDLE (WINAPI *FCACHE_RICHCREATE_CALLBACK) (LPSTR lpstrName, LPVOID lpvData, DWORD *cbFileSize, DWORD *cbFileSizeHigh, WINBOOL *pfDidWeScanIt, WINBOOL *pfIsStuffed, WINBOOL *pfStoredWithDots, WINBOOL *pfStoredWithTerminatingDot); 65 typedef int (WINAPI *CACHE_KEY_COMPARE) (DWORD cbKey1, LPBYTE lpbKey1, DWORD cbKey2, LPBYTE lpbKey2); 66 typedef DWORD (WINAPI *CACHE_KEY_HASH) (LPBYTE lpbKey, DWORD cbKey); 67 typedef WINBOOL (WINAPI *CACHE_READ_CALLBACK) (DWORD cb, LPBYTE lpb, LPVOID lpvContext); 68 typedef void (WINAPI *CACHE_DESTROY_CALLBACK) (DWORD cb, LPBYTE lpb); 69 typedef WINBOOL (WINAPI *CACHE_ACCESS_CHECK) (PSECURITY_DESCRIPTOR pSecurityDescriptor, HANDLE hClientToken, DWORD dwDesiredAccess, PGENERIC_MAPPING GenericMapping, PRIVILEGE_SET *PrivilegeSet, LPDWORD PrivilegeSetLength, LPDWORD GrantedAccess, LPBOOL AccessStatus); 70 71 FILEHC_EXPORT WINBOOL WINAPI FIOInitialize (DWORD dwFlags); 72 FILEHC_EXPORT WINBOOL WINAPI FIOTerminate (VOID); 73 FILEHC_EXPORT WINBOOL WINAPI FIOReadFile (PFIO_CONTEXT pContext, LPVOID lpBuffer, DWORD BytesToRead, FH_OVERLAPPED *lpo); 74 FILEHC_EXPORT WINBOOL WINAPI FIOReadFileEx (PFIO_CONTEXT pContext, LPVOID lpBuffer, DWORD BytesToRead, DWORD BytesAvailable, FH_OVERLAPPED *lpo, WINBOOL fFinalWrite, WINBOOL fIncludeTerminator); 75 FILEHC_EXPORT WINBOOL WINAPI FIOWriteFile (PFIO_CONTEXT pContext, LPCVOID lpBuffer, DWORD BytesToWrite, FH_OVERLAPPED *lpo); 76 FILEHC_EXPORT WINBOOL WINAPI FIOWriteFileEx (PFIO_CONTEXT pContext, LPVOID lpBuffer, DWORD BytesToWrite, DWORD BytesAvailable, FH_OVERLAPPED *lpo, WINBOOL fFinalWrite, WINBOOL fIncludeTerminator); 77 FILEHC_EXPORT WINBOOL WINAPI InitializeCache (); 78 FILEHC_EXPORT WINBOOL WINAPI TerminateCache (); 79 FILEHC_EXPORT PFIO_CONTEXT WINAPI AssociateFile (HANDLE hFile); 80 FILEHC_EXPORT PFIO_CONTEXT WINAPI AssociateFileEx (HANDLE hFile, WINBOOL fStoreWithDots, WINBOOL fStoredWithTerminatingDot); 81 FILEHC_EXPORT void WINAPI AddRefContext (PFIO_CONTEXT); 82 FILEHC_EXPORT void WINAPI ReleaseContext (PFIO_CONTEXT); 83 FILEHC_EXPORT WINBOOL WINAPI CloseNonCachedFile (PFIO_CONTEXT); 84 FILEHC_EXPORT FIO_CONTEXT * WINAPI CacheCreateFile (LPSTR lpstrName, FCACHE_CREATE_CALLBACK pfnCallBack, LPVOID lpv, WINBOOL fAsyncContext); 85 FILEHC_EXPORT FIO_CONTEXT * WINAPI CacheRichCreateFile (LPSTR lpstrName, FCACHE_RICHCREATE_CALLBACK pfnCallBack, LPVOID lpv, WINBOOL fAsyncContext); 86 FILEHC_EXPORT void WINAPI CacheRemoveFiles (LPSTR lpstrName, WINBOOL fAllPrefixes); 87 FILEHC_EXPORT WINBOOL WINAPI InsertFile (LPSTR lpstrName, FIO_CONTEXT *pContext, WINBOOL fKeepReference); 88 FILEHC_EXPORT DWORD WINAPI GetFileSizeFromContext (FIO_CONTEXT *pContext, DWORD *pcbFileSizeHigh); 89 FILEHC_EXPORT PNAME_CACHE_CONTEXT WINAPI FindOrCreateNameCache (LPSTR lpstrName, CACHE_KEY_COMPARE pfnKeyCompare, CACHE_KEY_HASH pfnKeyHash, CACHE_DESTROY_CALLBACK pfnKeyDestroy, CACHE_DESTROY_CALLBACK pfnDataDestroy); 90 FILEHC_EXPORT __LONG32 WINAPI ReleaseNameCache (PNAME_CACHE_CONTEXT pNameCache); 91 FILEHC_EXPORT WINBOOL WINAPI SetNameCacheSecurityFunction (PNAME_CACHE_CONTEXT pNameCache, CACHE_ACCESS_CHECK pfnAccessCheck); 92 FILEHC_EXPORT WINBOOL WINAPI FindContextFromName (PNAME_CACHE_CONTEXT pNameCache, LPBYTE lpbName, DWORD cbName, CACHE_READ_CALLBACK pfnCallback, LPVOID lpvClientContext, HANDLE hToken, ACCESS_MASK accessMask, FIO_CONTEXT **ppContext); 93 FILEHC_EXPORT WINBOOL WINAPI FindSyncContextFromName (PNAME_CACHE_CONTEXT pNameCache, LPBYTE lpbName, DWORD cbName, CACHE_READ_CALLBACK pfnCallback, LPVOID lpvClientContext, HANDLE hToken, ACCESS_MASK accessMask, FIO_CONTEXT **ppContext); 94 FILEHC_EXPORT WINBOOL WINAPI AssociateContextWithName (PNAME_CACHE_CONTEXT pNameCache, LPBYTE lpbName, DWORD cbName, LPBYTE lpbData, DWORD cbData, PGENERIC_MAPPING pGenericMapping, PSECURITY_DESCRIPTOR pSecurityDescriptor, FIO_CONTEXT *pContext, WINBOOL fKeepReference); 95 FILEHC_EXPORT WINBOOL WINAPI InvalidateName (PNAME_CACHE_CONTEXT pNameCache, LPBYTE lpbName, DWORD cbName); 96 FILEHC_EXPORT FIO_CONTEXT * WINAPI ProduceDotStuffedContext (FIO_CONTEXT *pContext, LPSTR lpstrName, WINBOOL fWantItDotStuffed); 97 FILEHC_EXPORT WINBOOL WINAPI ProduceDotStuffedContextInContext (FIO_CONTEXT *pContextSource, FIO_CONTEXT *pContextDestination, WINBOOL fWantItDotStuffed, WINBOOL *pfModified); 98 FILEHC_EXPORT WINBOOL WINAPI GetIsFileDotTerminated (FIO_CONTEXT *pContext); 99 FILEHC_EXPORT void WINAPI SetIsFileDotTerminated (FIO_CONTEXT *pContext, WINBOOL fIsDotTerminated); 100 FILEHC_EXPORT WINBOOL WINAPI SetDotStuffingOnWrites (FIO_CONTEXT *pContext, WINBOOL fEnable, WINBOOL fStripDots); 101 FILEHC_EXPORT WINBOOL WINAPI SetDotScanningOnWrites (FIO_CONTEXT *pContext, WINBOOL fEnable); 102 FILEHC_EXPORT void WINAPI CompleteDotStuffingOnWrites (FIO_CONTEXT *pContext, WINBOOL fStripDots); 103 FILEHC_EXPORT WINBOOL WINAPI SetDotScanningOnReads (FIO_CONTEXT *pContext, WINBOOL fEnable); 104 FILEHC_EXPORT WINBOOL WINAPI GetDotStuffState (FIO_CONTEXT *pContext, WINBOOL fReads, WINBOOL *pfStuffed, WINBOOL *pfStoredWithDots); 105 FILEHC_EXPORT void WINAPI SetDotStuffState (FIO_CONTEXT *pContext, WINBOOL fKnown, WINBOOL fRequiresStuffing); 106 107#ifdef __cplusplus 108} 109#endif 110 111#endif 112#endif 113