static int DOKAN_CALLBACK FuseCreateFile( LPCWSTR FileName, DWORD AccessMode, DWORD ShareMode, DWORD CreationDisposition, DWORD FlagsAndAttributes, PDOKAN_FILE_INFO DokanFileInfo) { impl_fuse_context *impl=the_impl; if (impl->debug()) { FWPRINTF(stderr, L"CreateFile : %s\n", FileName); DebugConstantBit("\tAccessMode", AccessMode, cAccessMode); DebugConstantBit("\tShareMode", ShareMode, cShareMode); DebugConstant("\tDisposition", CreationDisposition, cDisposition); FWPRINTF(stderr, L"\tFlags: %u (0x%x)\n", FlagsAndAttributes, FlagsAndAttributes); fflush(stderr); } impl_chain_guard guard(impl,DokanFileInfo->ProcessId); return -win_error(impl->create_file(FileName,AccessMode,ShareMode, CreationDisposition,FlagsAndAttributes,DokanFileInfo)); }
static NTSTATUS DOKAN_CALLBACK FuseCreateFile( LPCWSTR FileName, PDOKAN_IO_SECURITY_CONTEXT SecurityContext, ACCESS_MASK DesiredAccess, ULONG FileAttributes, ULONG ShareAccess, ULONG CreateDisposition, ULONG CreateOptions, PDOKAN_FILE_INFO DokanFileInfo) { impl_fuse_context *impl = the_impl; if (impl->debug()) { FWPRINTF(stderr, L"CreateFile : %s\n", FileName); DebugConstantBit("\tDesiredAccess", DesiredAccess, cAccessMode); DebugConstantBit("\tShareAccess", ShareAccess, cShareMode); DebugConstant("\tDisposition", CreateDisposition, cDisposition); FWPRINTF(stderr, L"\tAttributes: %u (0x%x)\n", FileAttributes, FileAttributes); FWPRINTF(stderr, L"\tOptions: %u (0x%x)\n", CreateOptions, CreateOptions); fflush(stderr); } impl_chain_guard guard(impl,DokanFileInfo->ProcessId); if((CreateOptions & FILE_DIRECTORY_FILE) == FILE_DIRECTORY_FILE) { if(CreateDisposition == FILE_CREATE || CreateDisposition == FILE_OPEN_IF) { return errno_to_ntstatus_error(impl->create_directory(FileName, DokanFileInfo)); } else if(CreateDisposition == FILE_OPEN) { return errno_to_ntstatus_error(impl->open_directory(FileName, DokanFileInfo)); } } return -win_error(impl->create_file(FileName, CreateDisposition, ShareAccess, DesiredAccess, FileAttributes, DokanFileInfo)); }