27 #define WIN32_NO_STATUS 29 #undef WIN32_NO_STATUS 37 #define DOKANAPI __stdcall 40 #define DOKANAPI __declspec(dllimport) __stdcall 44 #define DOKAN_CALLBACK __stdcall 59 #define DOKAN_VERSION 220 61 #define DOKAN_MINIMUM_COMPATIBLE_VERSION 200 63 #define DOKAN_DRIVER_NAME L"dokan" DOKAN_MAJOR_API_VERSION L".sys" 65 #define DOKAN_NP_NAME L"Dokan" DOKAN_MAJOR_API_VERSION 77 #define DOKAN_OPTION_DEBUG 1 79 #define DOKAN_OPTION_STDERR (1 << 1) 85 #define DOKAN_OPTION_ALT_STREAM (1 << 2) 87 #define DOKAN_OPTION_WRITE_PROTECT (1 << 3) 89 #define DOKAN_OPTION_NETWORK (1 << 4) 96 #define DOKAN_OPTION_REMOVABLE (1 << 5) 104 #define DOKAN_OPTION_MOUNT_MANAGER (1 << 6) 111 #define DOKAN_OPTION_CURRENT_SESSION (1 << 7) 113 #define DOKAN_OPTION_FILELOCK_USER_MODE (1 << 8) 120 #define DOKAN_OPTION_CASE_SENSITIVE (1 << 9) 122 #define DOKAN_OPTION_ENABLE_UNMOUNT_NETWORK_DRIVE (1 << 10) 127 #define DOKAN_OPTION_DISPATCH_DRIVER_LOGS (1 << 11) 133 #define DOKAN_OPTION_ALLOW_IPC_BATCHING (1 << 12) 137 typedef VOID *DOKAN_HANDLE, **PDOKAN_HANDLE;
144 typedef struct _DOKAN_OPTIONS {
174 CHAR VolumeSecurityDescriptor[VOLUME_SECURITY_DESCRIPTOR_MAX_SIZE];
181 typedef struct _DOKAN_FILE_INFO {
219 #define DOKAN_EXCEPTION_NOT_INITIALIZED 0x0f0ff0ff 220 #define DOKAN_EXCEPTION_INITIALIZATION_FAILED 0x0fbadbad 221 #define DOKAN_EXCEPTION_SHUTDOWN_FAILED 0x0fbadf00 251 typedef struct _DOKAN_OPERATIONS {
284 PDOKAN_IO_SECURITY_CONTEXT SecurityContext,
285 ACCESS_MASK DesiredAccess,
286 ULONG FileAttributes,
288 ULONG CreateDisposition,
290 PDOKAN_FILE_INFO DokanFileInfo);
308 PDOKAN_FILE_INFO DokanFileInfo);
322 PDOKAN_FILE_INFO DokanFileInfo);
348 PDOKAN_FILE_INFO DokanFileInfo);
373 DWORD NumberOfBytesToWrite,
374 LPDWORD NumberOfBytesWritten,
376 PDOKAN_FILE_INFO DokanFileInfo);
388 PDOKAN_FILE_INFO DokanFileInfo);
401 LPBY_HANDLE_FILE_INFORMATION Buffer,
402 PDOKAN_FILE_INFO DokanFileInfo);
420 PDOKAN_FILE_INFO DokanFileInfo);
442 LPCWSTR SearchPattern,
444 PDOKAN_FILE_INFO DokanFileInfo);
457 DWORD FileAttributes,
458 PDOKAN_FILE_INFO DokanFileInfo);
473 CONST FILETIME *CreationTime,
474 CONST FILETIME *LastAccessTime,
475 CONST FILETIME *LastWriteTime,
476 PDOKAN_FILE_INFO DokanFileInfo);
503 PDOKAN_FILE_INFO DokanFileInfo);
531 PDOKAN_FILE_INFO DokanFileInfo);
546 BOOL ReplaceIfExisting,
547 PDOKAN_FILE_INFO DokanFileInfo);
562 PDOKAN_FILE_INFO DokanFileInfo);
577 PDOKAN_FILE_INFO DokanFileInfo);
595 PDOKAN_FILE_INFO DokanFileInfo);
613 PDOKAN_FILE_INFO DokanFileInfo);
636 PULONGLONG TotalNumberOfBytes,
637 PULONGLONG TotalNumberOfFreeBytes,
638 PDOKAN_FILE_INFO DokanFileInfo);
675 DWORD VolumeNameSize,
676 LPDWORD VolumeSerialNumber,
677 LPDWORD MaximumComponentLength,
678 LPDWORD FileSystemFlags,
679 LPWSTR FileSystemNameBuffer,
680 DWORD FileSystemNameSize,
681 PDOKAN_FILE_INFO DokanFileInfo);
696 NTSTATUS(
DOKAN_CALLBACK *Mounted)(LPCWSTR MountPoint, PDOKAN_FILE_INFO DokanFileInfo);
729 PSECURITY_INFORMATION SecurityInformation,
730 PSECURITY_DESCRIPTOR SecurityDescriptor,
733 PDOKAN_FILE_INFO DokanFileInfo);
751 PSECURITY_INFORMATION SecurityInformation,
752 PSECURITY_DESCRIPTOR SecurityDescriptor,
754 PDOKAN_FILE_INFO DokanFileInfo);
771 PVOID FindStreamContext,
772 PDOKAN_FILE_INFO DokanFileInfo);
785 #define DOKAN_SUCCESS 0 787 #define DOKAN_ERROR -1 789 #define DOKAN_DRIVE_LETTER_ERROR -2 791 #define DOKAN_DRIVER_INSTALL_ERROR -3 793 #define DOKAN_START_ERROR -4 799 #define DOKAN_MOUNT_ERROR -5 804 #define DOKAN_MOUNT_POINT_ERROR -6 809 #define DOKAN_VERSION_ERROR -7 847 PDOKAN_OPERATIONS DokanOperations);
865 _In_ PDOKAN_OPERATIONS DokanOperations,
866 _Out_ DOKAN_HANDLE *DokanInstance);
884 _In_ DWORD dwMilliseconds);
897 _In_ DOKAN_HANDLE DokanInstance, _Out_ PHANDLE WaitHandle,
898 _In_ WAITORTIMERCALLBACKFUNC Callback, _In_ PVOID Context,
899 ULONG dwMilliseconds);
909 BOOL WaitForCallbacks);
1031 ACCESS_MASK DesiredAccess, ULONG FileAttributes, ULONG CreateOptions,
1032 ULONG CreateDisposition, ACCESS_MASK *outDesiredAccess,
1033 DWORD *outFileAttributesAndFlags, DWORD *outCreationDisposition);
1064 _In_ LPCWSTR FilePath, _In_ BOOL IsDirectory);
1075 _In_ LPCWSTR FilePath, _In_ BOOL IsDirectory);
1085 _In_ LPCWSTR FilePath);
1095 _In_ LPCWSTR FilePath);
1109 _In_ LPCWSTR OldPath, _In_ LPCWSTR NewPath,
1110 _In_ BOOL IsDirectory,
1111 _In_ BOOL IsInSameDirectory);
#define DOKAN_CALLBACK
Definition: dokan.h:44
HANDLE DokanOpenRequestorToken(PDOKAN_FILE_INFO DokanFileInfo)
Get the handle to Access Token.
Definition: access.c:26
PDOKAN_OPTIONS DokanOptions
Definition: dokan.h:191
BOOL DokanIsFileSystemRunning(_In_ DOKAN_HANDLE DokanInstance)
Check if the FileSystem is still running or not.
Definition: dokan.c:605
VOID DokanShutdown()
Release all allocated resources by DokanInit when they are no longer needed.
Definition: dokan.c:1418
USHORT Version
Definition: dokan.h:146
PDOKAN_MOUNT_POINT_INFO DokanGetMountPointList(BOOL uncOnly, PULONG nbRead)
Get active Dokan mount points.
Definition: dokan.c:1232
LPCWSTR MountPoint
Definition: dokan.h:154
BOOL DokanUnregisterWaitForFileSystemClosed(_In_ HANDLE WaitHandle, BOOL WaitForCallbacks)
Unregister callback for FileSystem unmount.
Definition: dokan.c:636
ULONG64 GlobalContext
Definition: dokan.h:152
ULONG ProcessId
Definition: dokan.h:201
BOOL DokanRemoveMountPoint(LPCWSTR MountPoint)
Unmount a Dokan device from a mount point.
Definition: mount.c:649
BOOL DokanResetTimeout(ULONG Timeout, PDOKAN_FILE_INFO DokanFileInfo)
Extends the timeout of the current IO operation in driver.
Definition: timeout.c:26
#define DOKANAPI
Definition: dokan.h:40
UCHAR Nocache
Definition: dokan.h:214
ULONG Timeout
Definition: dokan.h:166
VOID DokanReleaseMountPointList(PDOKAN_MOUNT_POINT_INFO list)
Release Mount point list resources from DokanGetMountPointList.
Definition: dokan.c:1280
UCHAR WriteToEndOfFile
Definition: dokan.h:216
BOOL DokanNotifyXAttrUpdate(_In_ DOKAN_HANDLE DokanInstance, _In_ LPCWSTR FilePath)
Notify dokan that file or directory extended attributes have changed.
Definition: dokan.c:1502
DWORD DokanWaitForFileSystemClosed(_In_ DOKAN_HANDLE DokanInstance, _In_ DWORD dwMilliseconds)
Wait until the FileSystem is unmount.
Definition: dokan.c:614
UCHAR SynchronousIo
Definition: dokan.h:212
BOOL DokanNotifyDelete(_In_ DOKAN_HANDLE DokanInstance, _In_ LPCWSTR FilePath, _In_ BOOL IsDirectory)
Notify dokan that a file or a directory has been deleted.
Definition: dokan.c:1488
NTSTATUS DokanNtStatusFromWin32(DWORD Error)
Convert WIN32 error to NTSTATUS.
Definition: ntstatus.c:25
LPCWSTR UNCName
Definition: dokan.h:159
BOOL DokanRegisterWaitForFileSystemClosed(_In_ DOKAN_HANDLE DokanInstance, _Out_ PHANDLE WaitHandle, _In_ WAITORTIMERCALLBACKFUNC Callback, _In_ PVOID Context, ULONG dwMilliseconds)
Register callback for FileSystem unmount.
Definition: dokan.c:623
Dokan mount options used to describe Dokan device behavior.
Definition: dokan.h:144
BOOL DokanNotifyCreate(_In_ DOKAN_HANDLE DokanInstance, _In_ LPCWSTR FilePath, _In_ BOOL IsDirectory)
Notify dokan that a file or a directory has been created.
Definition: dokan.c:1480
int(WINAPI * PFillFindData)(PWIN32_FIND_DATAW, PDOKAN_FILE_INFO)
FillFindData Used to add an entry in FindFiles operation.
Definition: dokan.h:227
BOOL(WINAPI * PFillFindStreamData)(PWIN32_FIND_STREAM_DATA, PVOID)
FillFindStreamData Used to add an entry in FindStreams.
Definition: dokan.h:233
int DokanCreateFileSystem(_In_ PDOKAN_OPTIONS DokanOptions, _In_ PDOKAN_OPERATIONS DokanOperations, _Out_ DOKAN_HANDLE *DokanInstance)
Mount a new Dokan Volume.
Definition: dokan.c:670
ULONG DokanVersion()
Get the version of Dokan. The returned ULONG is the version number without the dots.
Definition: version.c:26
Dokan file information on the current operation.
Definition: dokan.h:181
ULONG SectorSize
Definition: dokan.h:170
BOOLEAN SingleThread
Definition: dokan.h:148
VOID DokanMapKernelToUserCreateFileFlags(ACCESS_MASK DesiredAccess, ULONG FileAttributes, ULONG CreateOptions, ULONG CreateDisposition, ACCESS_MASK *outDesiredAccess, DWORD *outFileAttributesAndFlags, DWORD *outCreationDisposition)
Convert DOKAN_OPERATIONS::ZwCreateFile parameters to CreateFile parameters.
Definition: dokan.c:1301
ULONG DokanDriverVersion()
Get the version of the Dokan driver. The returned ULONG is the version number without the dots...
Definition: version.c:28
ULONG64 Context
Definition: dokan.h:187
UCHAR DeleteOnClose
Definition: dokan.h:208
UCHAR PagingIo
Definition: dokan.h:210
UCHAR IsDirectory
Definition: dokan.h:206
BOOL DokanIsNameInExpression(LPCWSTR Expression, LPCWSTR Name, BOOL IgnoreCase)
Checks whether Name matches Expression.
Definition: directory.c:748
VOID DokanCloseHandle(_In_ DOKAN_HANDLE DokanInstance)
Unmount the Dokan instance.
Definition: dokan.c:642
ULONG AllocationUnitSize
Definition: dokan.h:168
BOOL DokanNotifyUpdate(_In_ DOKAN_HANDLE DokanInstance, _In_ LPCWSTR FilePath)
Notify dokan that file or directory attributes have changed.
Definition: dokan.c:1496
BOOL DokanUnmount(WCHAR DriveLetter)
Unmount a Dokan device from a driver letter.
Definition: mount.c:296
int DokanMain(PDOKAN_OPTIONS DokanOptions, PDOKAN_OPERATIONS DokanOperations)
Mount a new Dokan Volume.
Definition: dokan.c:656
Dokan API callbacks interface.
Definition: dokan.h:251
ULONG64 DokanContext
Definition: dokan.h:189
VOID DokanInit()
Initialize all required Dokan internal resources.
Definition: dokan.c:1393
BOOL DokanNotifyRename(_In_ DOKAN_HANDLE DokanInstance, _In_ LPCWSTR OldPath, _In_ LPCWSTR NewPath, _In_ BOOL IsDirectory, _In_ BOOL IsInSameDirectory)
Notify dokan that a file or a directory has been renamed. This method supports in-place rename for fi...
Definition: dokan.c:1508
ULONG VolumeSecurityDescriptorLength
Definition: dokan.h:172
PVOID ProcessingContext
Definition: dokan.h:197
ULONG Options
Definition: dokan.h:150