示例#1
0
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));
}
示例#2
0
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);
}
示例#3
0
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));
}
示例#4
0
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));
}
示例#5
0
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));
}
示例#6
0
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));
}
示例#7
0
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));
}
示例#8
0
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));
}
示例#9
0
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));
}
示例#10
0
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));
}
示例#11
0
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));
}
示例#12
0
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));
}
示例#13
0
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));
}
示例#14
0
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));
}
示例#15
0
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));
}
示例#16
0
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));
}
示例#17
0
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));
}
示例#18
0
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));
}
示例#19
0
//***************************************************************************
// 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);
    }
}