コード例 #1
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));
}
コード例 #2
0
ファイル: docanfuse.cpp プロジェクト: CrAsH1101/dokany
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));
}