static NTSTATUS DOKAN_CALLBACK FuseUnmount(PDOKAN_FILE_INFO DokanFileInfo) { impl_fuse_context *impl=the_impl; if (impl->debug()) FWPRINTF(stderr, L"Unmount\n"); impl_chain_guard guard(impl,DokanFileInfo->ProcessId); return errno_to_ntstatus_error(impl->unmount(DokanFileInfo)); }
static void DOKAN_CALLBACK FuseCleanup(LPCWSTR FileName, PDOKAN_FILE_INFO DokanFileInfo) { impl_fuse_context *impl = the_impl; if (impl->debug()) FWPRINTF(stderr, L"Cleanup: %s\n\n", FileName); impl_chain_guard guard(impl, DokanFileInfo->ProcessId); impl->cleanup(FileName, DokanFileInfo); }
static NTSTATUS DOKAN_CALLBACK FuseDeleteFile(LPCWSTR FileName, PDOKAN_FILE_INFO DokanFileInfo) { impl_fuse_context *impl = the_impl; if (impl->debug()) FWPRINTF(stderr, L"DeleteFile %s\n", FileName); impl_chain_guard guard(impl, DokanFileInfo->ProcessId); return errno_to_ntstatus_error(impl->delete_file(FileName, DokanFileInfo)); }
static int DOKAN_CALLBACK FuseCloseFile( LPCWSTR FileName, PDOKAN_FILE_INFO DokanFileInfo) { impl_fuse_context *impl=the_impl; if (impl->debug()) FWPRINTF(stderr, L"Close: %s\n\n", FileName); impl_chain_guard guard(impl,DokanFileInfo->ProcessId); return -errno_to_win32_error(impl->close_file(FileName,DokanFileInfo)); }
static NTSTATUS DOKAN_CALLBACK FuseSetFileAttributes( LPCWSTR FileName, DWORD FileAttributes, PDOKAN_FILE_INFO DokanFileInfo) { impl_fuse_context *impl = the_impl; if (impl->debug()) FWPRINTF(stderr, L"SetFileAttributes %s\n", FileName); impl_chain_guard guard(impl, DokanFileInfo->ProcessId); return errno_to_ntstatus_error( impl->set_file_attributes(FileName, FileAttributes, DokanFileInfo)); }
static NTSTATUS DOKAN_CALLBACK FuseSetEndOfFile( LPCWSTR FileName, LONGLONG ByteOffset, PDOKAN_FILE_INFO DokanFileInfo) { impl_fuse_context *impl = the_impl; if (impl->debug()) FWPRINTF(stderr, L"SetEndOfFile %s, %I64d\n", FileName, ByteOffset); impl_chain_guard guard(impl, DokanFileInfo->ProcessId); return errno_to_ntstatus_error( impl->set_end_of_file(FileName, ByteOffset, DokanFileInfo)); }
static int DOKAN_CALLBACK FuseDeleteDirectory( LPCWSTR FileName, PDOKAN_FILE_INFO DokanFileInfo) { impl_fuse_context *impl=the_impl; if (impl->debug()) FWPRINTF(stderr, L"DeleteDirectory %s\n", FileName); impl_chain_guard guard(impl,DokanFileInfo->ProcessId); return -errno_to_win32_error(impl->delete_directory(FileName,DokanFileInfo)); }
static int DOKAN_CALLBACK FuseGetDiskFreeSpace(PULONGLONG FreeBytesAvailable, PULONGLONG TotalNumberOfBytes, PULONGLONG TotalNumberOfFreeBytes, PDOKAN_FILE_INFO DokanFileInfo) { impl_fuse_context *impl=the_impl; if (impl->debug()) FWPRINTF(stderr, L"GetDiskFreeSpace\n"); impl_chain_guard guard(impl,DokanFileInfo->ProcessId); return -errno_to_win32_error(impl->get_disk_free_space(FreeBytesAvailable,TotalNumberOfBytes, TotalNumberOfFreeBytes, DokanFileInfo)); }
static NTSTATUS DOKAN_CALLBACK FuseGetFileInformation( LPCWSTR FileName, LPBY_HANDLE_FILE_INFORMATION HandleFileInformation, PDOKAN_FILE_INFO DokanFileInfo) { impl_fuse_context *impl = the_impl; if (impl->debug()) FWPRINTF(stderr, L"GetFileInfo : %s\n", FileName); impl_chain_guard guard(impl, DokanFileInfo->ProcessId); return errno_to_ntstatus_error(impl->get_file_information( FileName, HandleFileInformation, DokanFileInfo)); }
static NTSTATUS DOKAN_CALLBACK FuseUnlockFile(LPCWSTR FileName, LONGLONG ByteOffset, LONGLONG Length, PDOKAN_FILE_INFO DokanFileInfo) { impl_fuse_context *impl = the_impl; if (impl->debug()) FWPRINTF(stderr, L"UnlockFile %s\n", FileName); impl_chain_guard guard(impl, DokanFileInfo->ProcessId); return errno_to_ntstatus_error( impl->unlock_file(FileName, ByteOffset, Length, DokanFileInfo)); }
static NTSTATUS DOKAN_CALLBACK FuseMoveFile(LPCWSTR FileName, // existing file name LPCWSTR NewFileName, BOOL ReplaceIfExisting, PDOKAN_FILE_INFO DokanFileInfo) { impl_fuse_context *impl = the_impl; if (impl->debug()) FWPRINTF(stderr, L"MoveFile %s -> %s\n\n", FileName, NewFileName); impl_chain_guard guard(impl, DokanFileInfo->ProcessId); return errno_to_ntstatus_error( impl->move_file(FileName, NewFileName, ReplaceIfExisting, DokanFileInfo)); }
static int DOKAN_CALLBACK FuseFindFiles( LPCWSTR FileName, PFillFindData FillFindData, // function pointer PDOKAN_FILE_INFO DokanFileInfo) { impl_fuse_context *impl=the_impl; if (impl->debug()) FWPRINTF(stderr, L"FindFiles :%s\n", FileName); impl_chain_guard guard(impl,DokanFileInfo->ProcessId); return -errno_to_win32_error(impl->find_files(FileName,FillFindData, DokanFileInfo)); }
static NTSTATUS DOKAN_CALLBACK FuseReadFile(LPCWSTR FileName, LPVOID Buffer, DWORD BufferLength, LPDWORD ReadLength, LONGLONG Offset, PDOKAN_FILE_INFO DokanFileInfo) { impl_fuse_context *impl = the_impl; if (impl->debug()) FWPRINTF(stderr, L"ReadFile : %s from %I64d len %u\n", FileName, (__int64)Offset, (unsigned)BufferLength); impl_chain_guard guard(impl, DokanFileInfo->ProcessId); return errno_to_ntstatus_error(impl->read_file( FileName, Buffer, BufferLength, ReadLength, Offset, DokanFileInfo)); }
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 FuseSetFileTime(LPCWSTR FileName, CONST FILETIME *CreationTime, CONST FILETIME *LastAccessTime, CONST FILETIME *LastWriteTime, PDOKAN_FILE_INFO DokanFileInfo) { impl_fuse_context *impl = the_impl; if (impl->debug()) FWPRINTF(stderr, L"SetFileTime %s\n", FileName); impl_chain_guard guard(impl, DokanFileInfo->ProcessId); return errno_to_ntstatus_error(impl->set_file_time( FileName, CreationTime, LastAccessTime, LastWriteTime, 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)); }
static NTSTATUS DOKAN_CALLBACK FuseWriteFile(LPCWSTR FileName, LPCVOID Buffer, DWORD NumberOfBytesToWrite, LPDWORD NumberOfBytesWritten, LONGLONG Offset, PDOKAN_FILE_INFO DokanFileInfo) { impl_fuse_context *impl = the_impl; if (impl->debug()) FWPRINTF(stderr, L"WriteFile : %s, offset %I64d, length %lu\n", FileName, Offset, NumberOfBytesToWrite); impl_chain_guard guard(impl, DokanFileInfo->ProcessId); return errno_to_ntstatus_error( impl->write_file(FileName, Buffer, NumberOfBytesToWrite, NumberOfBytesWritten, Offset, DokanFileInfo)); }
static NTSTATUS DOKAN_CALLBACK GetVolumeInformation(LPWSTR VolumeNameBuffer, DWORD VolumeNameSize, LPDWORD VolumeSerialNumber, LPDWORD MaximumComponentLength, LPDWORD FileSystemFlags, LPWSTR FileSystemNameBuffer, DWORD FileSystemNameSize, PDOKAN_FILE_INFO DokanFileInfo) { impl_fuse_context *impl = the_impl; if (impl->debug()) FWPRINTF(stderr, L"GetVolumeInformation\n"); impl_chain_guard guard(impl, DokanFileInfo->ProcessId); *VolumeSerialNumber = 0; *MaximumComponentLength = 255; return errno_to_ntstatus_error(impl->get_volume_information( VolumeNameBuffer, VolumeNameSize, FileSystemNameBuffer, FileSystemNameSize, DokanFileInfo, FileSystemFlags)); }
//*************************************************************************** // Function: PrintError // Purpose: Formats and prints the error message //*************************************************************************** void PrintError(char *pszFailureReason, SCODE psc, DWORD dwMode) { VARIANT varString; SCODE sc; IWbemClassObject *pErrorObject = NULL; IErrorInfo* pEI = NULL; fprintf(stdout, "%s\n", pszFailureReason); fprintf(stdout, "FunctionReturn: %S(0x%08lx)\n", WbemErrorString(psc), psc); if (GetErrorInfo(0, &pEI) == S_OK) { pEI->QueryInterface(IID_IWbemClassObject, (void**)&pErrorObject); pEI->Release(); } if (pErrorObject != NULL) { VariantInit(&varString); if (dwMode == ERROR_MODE_PRINTFIELDS) { if (pErrorObject->InheritsFrom(L"__NotifyStatus") != WBEM_NO_ERROR) { fprintf(stdout, "Unrecognized Error Object type\n"); } else if (pErrorObject->InheritsFrom(L"__ExtendedStatus") == WBEM_NO_ERROR) { sc = pErrorObject->Get(L"Description", 0L, &varString, NULL, NULL); if (sc != S_OK) { fprintf(stdout, "Can't get Description: %d\n", sc); } else if (V_VT(&varString) == VT_BSTR) { FWPRINTF(stdout, L"Description: %wS\n", V_BSTR(&varString)); } VariantClear(&varString); pErrorObject->Get(L"Operation", 0L, &varString, NULL, NULL); if (sc != S_OK) { fprintf(stdout, "Can't get Operation: %d\n", sc); } else if (V_VT(&varString) == VT_BSTR) { FWPRINTF(stdout, L"Operation: %wS\n", V_BSTR(&varString)); } VariantClear(&varString); pErrorObject->Get(L"ParameterInfo", 0L, &varString, NULL, NULL); if (sc != S_OK) { fprintf(stdout, "Can't get ParameterInfo: %d\n", sc); } else if (V_VT(&varString) == VT_BSTR) { FWPRINTF(stdout, L"ParameterInfo: %wS\n", V_BSTR(&varString)); } VariantClear(&varString); pErrorObject->Get(L"ProviderName", 0L, &varString, NULL, NULL); if (sc != S_OK) { fprintf(stdout, "Can't get ProviderName: %d\n", sc); } else if (V_VT(&varString) == VT_BSTR) { FWPRINTF(stdout, L"ProviderName: %wS\n", V_BSTR(&varString)); } VariantClear(&varString); } } else { BSTR bstrObjectText = NULL; if (SUCCEEDED(pErrorObject->GetObjectText(0, &bstrObjectText))) { fprintf(stdout, "%wS", bstrObjectText); SysFreeString(bstrObjectText); } } RELEASE(pErrorObject); } }