/** * @file winfsp/winfsp.h * * @copyright 2015 Bill Zissimopoulos */ #ifndef WINFSP_WINFSP_H_INCLUDED #define WINFSP_WINFSP_H_INCLUDED #define WIN32_NO_STATUS #include #undef WIN32_NO_STATUS #include #include #if defined(WINFSP_DLL_INTERNAL) #define FSP_API __declspec(dllexport) #else #define FSP_API __declspec(dllimport) #endif #include #if 0 typedef struct _FSP_FILE_SYSTEM FSP_FILE_SYSTEM; typedef NTSTATUS FSP_FILE_SYSTEM_PROCESSREQ(FSP_FILE_SYSTEM *, FSP_FSCTL_TRANSACT_REQ *); typedef VOID FSP_FILE_SYSTEM_OPERATION(FSP_FILE_SYSTEM *, FSP_FSCTL_TRANSACT_REQ *); typedef struct _FSP_FILE_SYSTEM { /* private */ UINT16 Version; HANDLE VolumeHandle; FSP_FILE_SYSTEM_PROCESSREQ *ProcessRequest; /* public */ PVOID UserContext; FSP_FILE_SYSTEM_OPERATION *Operations[FspFsctlTransactKindCount]; } FSP_FILE_SYSTEM; FSP_API NTSTATUS FspFileSystemCreate(PWSTR DevicePath, const FSP_FSCTL_VOLUME_PARAMS *Params, FSP_FILE_SYSTEM_PROCESSREQ *ProcessRequest, FSP_FILE_SYSTEM **PFileSystem); FSP_API VOID FspFileSystemDelete(FSP_FILE_SYSTEM *FileSystem); FSP_API NTSTATUS FspFileSystemLoop(FSP_FILE_SYSTEM *FileSystem); FSP_API NTSTATUS FspProcessRequestDirect(FSP_FILE_SYSTEM *FileSystem, FSP_FSCTL_TRANSACT_REQ *Request); FSP_API NTSTATUS FspProcessRequestInPool(FSP_FILE_SYSTEM *FileSystem, FSP_FSCTL_TRANSACT_REQ *Request); FSP_API NTSTATUS FspProduceResponse(FSP_FILE_SYSTEM *FileSystem, FSP_FSCTL_TRANSACT_RSP *Response); FSP_API NTSTATUS FspProduceResponseWithStatus(FSP_FILE_SYSTEM *FileSystem, FSP_FSCTL_TRANSACT_REQ *Request, NTSTATUS Result); #endif FSP_API NTSTATUS FspNtStatusFromWin32(DWORD Error); FSP_API VOID FspDebugLog(const char *format, ...); #endif