1 // Copyright 2016-2018 Keybase Inc. All rights reserved. 2 // Use of this source code is governed by a BSD 3 // license that can be found in the LICENSE file. 4 5 #ifndef KBFS_DOKAN_BRIDGE_H__ 6 #define KBFS_DOKAN_BRIDGE_H__ 7 8 #if defined(_WIN32) || defined(WIN32) || defined(__CYGWIN__) || defined(__MINGW32__) || defined(__BORLANDC__) 9 10 #define UNICODE 1 11 #define _UNICODE 1 12 13 #include <stdint.h> 14 #include <windows.h> 15 #include <ntdef.h> 16 #include <ntstatus.h> 17 18 /* Compatibility for older toolchains */ 19 #define PWIN32_FIND_DATAW LPWIN32_FIND_DATAW 20 typedef struct kbfs_WIN32_FIND_STREAM_DATA_ { 21 LARGE_INTEGER StreamSize; 22 WCHAR cStreamName[MAX_PATH + 36]; 23 } kbfs_WIN32_FIND_STREAM_DATA,*kbfs_PWIN32_FIND_STREAM_DATA; 24 #define PWIN32_FIND_STREAM_DATA kbfs_PWIN32_FIND_STREAM_DATA 25 26 27 #include "dokan_header/dokan.h" 28 29 typedef int32_t error_t; 30 typedef uint32_t go_fs_id; 31 32 struct kbfsLibdokanCtx { 33 DOKAN_OPERATIONS dokan_operations; 34 DOKAN_OPTIONS dokan_options; 35 }; 36 37 struct kbfsLibdokanCtx* kbfsLibdokanAllocCtx(ULONG64 fsslot); 38 error_t kbfsLibdokanFree(struct kbfsLibdokanCtx* ctx); 39 error_t kbfsLibdokanRun(struct kbfsLibdokanCtx* ctx); 40 void kbfsLibdokanSet_path(struct kbfsLibdokanCtx* ctx, void*); 41 42 int kbfsLibdokanFill_find(PFillFindData, PWIN32_FIND_DATAW, PDOKAN_FILE_INFO); 43 44 BOOL kbfsLibdokan_RemoveMountPoint(LPCWSTR MountPoint); 45 HANDLE kbfsLibdokan_OpenRequestorToken(PDOKAN_FILE_INFO DokanFileInfo); 46 47 enum { 48 kbfsLibdokanDebug = DOKAN_OPTION_DEBUG, 49 kbfsLibdokanStderr = DOKAN_OPTION_STDERR, 50 kbfsLibdokanRemovable = DOKAN_OPTION_REMOVABLE, 51 kbfsLibdokanMountManager = DOKAN_OPTION_MOUNT_MANAGER, 52 kbfsLibdokanCurrentSession = DOKAN_OPTION_CURRENT_SESSION, 53 kbfsLibdokanUseFindFilesWithPattern = 1<<24, 54 55 kbfsLibDokan_ERROR = DOKAN_ERROR, 56 kbfsLibDokan_DRIVE_LETTER_ERROR = DOKAN_DRIVE_LETTER_ERROR, 57 kbfsLibDokan_DRIVER_INSTALL_ERROR = DOKAN_DRIVER_INSTALL_ERROR, 58 kbfsLibDokan_START_ERROR = DOKAN_START_ERROR, 59 kbfsLibDokan_MOUNT_ERROR = DOKAN_MOUNT_ERROR, 60 kbfsLibDokan_MOUNT_POINT_ERROR = DOKAN_MOUNT_POINT_ERROR, 61 kbfsLibDokan_VERSION_ERROR = DOKAN_VERSION_ERROR, 62 kbfsLibDokan_DLL_LOAD_ERROR = -99, 63 }; 64 65 extern uintptr_t kbfsLibdokanPtr_RemoveMountPoint; 66 extern uintptr_t kbfsLibdokanPtr_OpenRequestorToken; 67 extern uintptr_t kbfsLibdokanPtr_Main; 68 69 ULONG kbfsLibDokan_GetVersion(uintptr_t proc); 70 71 #endif /* windows check */ 72 73 #endif /* KBFS_DOKAN_BRIDGE_H__ */ 74