问题标签 [dokan]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - Python ctypes:使用函数指针时出现WindowsError
我正在尝试使用 Python 的 ctypes 来处理 DLL,但是当我尝试调用作为指向另一个函数的指针传递的函数时,我偶尔会遇到问题。
一点背景...我正在尝试使用Dokan(版本 0.6.0)构建用户空间文件系统。有点松散地说,Dokan 基本上是 Windows 的FUSE。我已经使用 ctypes 包装了 dokan 头文件(类似于pydokan)。该头文件包含一个函数指针的定义,如下所示
它还包含另一个函数的原型
对应的 ctypes 定义如下所示
后一个函数 (FindFilesWithPattern) 的实现必须调用它所传递的 FillFindData 函数。一个基本的实现看起来像这样
调用此函数时,我偶尔会收到以下错误:
我很烦。乍一看,这看起来像是我正在尝试访问超出范围的内存。但是这个错误只是偶尔发生。有时一切正常,结果按预期返回。(澄清一下,当我偶尔说的时候,我的意思是错误发生在程序的某些运行上,而不是在其他运行上。错误似乎在一次运行中发生或不一致发生。)
然后我想知道我是否得到了错误代码而不是内存地址。我在这里发现,如果这是一个错误代码,那么它可能表示“内存不足”。当我查看系统监视器时,这似乎不是问题。我尝试过运行各种内存分析器,如Heapy和Meliae,但它们似乎都不适用于 Windows 64 位上的 Python 2.7。
我的下一个最佳猜测是,这是使用 64 位操作系统的问题。也许用于函数指针的类型不足以正确处理它。在进行了一些谷歌搜索之后,似乎其他人在 Win64 中使用 ctypes 时遇到了问题。我已经为 64 位架构构建了我的 Dokan 库。那我的python代码有问题吗?
任何帮助将不胜感激。我已经为此苦苦挣扎了一段时间。
可以在此处找到类似的帖子。不过,它似乎并不是非常相似。
注意:在 python 代码中,您将看到一些此处未定义的类型(例如 PDOKAN_FILE_INFO)。这些要么是结构,要么是指向结构的指针,为了简洁起见,我没有包括在内。
c# - 使用我的 C# 应用程序以编程方式安装 Dokan?
我有一个需要Dokan的应用程序。
当应用程序启动时,我希望检查是否安装了 Dokan。
如果不是,我该如何安装它?
我有安装程序文件,但如何静默安装呢?我不想用另一个 GUI 来打扰用户。
c# - Dokan/Dokan.NET(不)是否支持同步 I/O?
我使用 Dokan(.NET) 库在 C# 中创建了一个虚拟驱动器,它运行良好。
但是,当我尝试在另一个应用程序中从驱动器中读取文件时,只要使用同步读取的操作(例如System.IO.File.ReadAllText(...)
.
异常的文本是:“句柄不支持同步操作。可能需要更改 FileStream 构造函数的参数以指示句柄是异步打开的”。
因此,如果我正确解释这一点,.NET 显然会尝试在单个同步操作中读取文件的全部内容,但 Dokan 似乎不允许这样做。
但是,当使用像ReadAllText
我这样的方法时,我并不能真正控制它的FileStream
构造方式(这不是该方法的全部意义吗,毕竟,只需获取文件内容而不必打扰 Streams 和 Readers 和 Buffers还有什么?)。
我可以让 Dokan 以某种方式支持对其文件句柄的同步 I/O 访问吗?或者我是否必须以某种方式忍受在 Dokan 托管的文件上不可能进行同步操作的事实(并希望可能永远不会在我的虚拟驱动器上运行的应用程序依赖于它们)?
virtualfilesystem - 是否有用于卸载挂载点的 Windows API
我正在使用 dokan.lib 编写一个虚拟文件系统。这个库没有 unmountPoint 功能,它有 unmountDrive。
我正在寻找一个支持卸载点调用的 dokan 库或 Windows API,它将在离开应用程序时删除这个安装点。
最好的
c# - 如何为以下场景使用的树结构实现线程安全?
我正在使用以下链接中的 C# 代码来实现 Ram-disk 项目。
总而言之,上述代码使用简单的树结构来存储目录、子目录和文件。根是MemoryFolder
存储零个或多个“MemoryFolder”对象和/或对象的MemoryFile
对象。每个MemoryFolder
对象依次存储零个或多个MemoryFolder
对象和/或MemoryFile
对象等,直至无限深度。
但是,代码不是线程安全的。实现线程安全的最优雅的方式是什么?此外,如何通过使用适当的锁定策略来强制执行以下典型文件系统的多线程要求的非详尽列表?
如果线程安全实现允许,可以同时在同一个父文件夹下创建两个不同的文件夹(每个由不同的线程创建)。否则,应该实施一些锁定策略以仅允许顺序创建。
包含特定文件(当前由另一个线程读取)一直传播到根文件夹的文件夹的直接或间接父文件夹都不能被另一个线程移动或删除,直到
ReadFile
线程完成其执行。对于每个唯一文件,允许多个
ReadFile
线程并发访问,但限制对单个WriteFile
线程的访问。如果两个单独的
ReadFile
线程(几乎同时触发),每个来自不同应用程序的线程都试图创建一个同名文件夹(假设在两个线程触发之前该文件夹不存在),进入 Ram-Disk 的第一个线程总是成功,而第二个总是失败。换句话说,线程执行的顺序是确定的。在单独线程下运行的总磁盘空间计算方法
GetDiskFreeSpace
不应完成其执行,直到WriteFile
已经在进行中的所有线程完成其执行。所有未开始执行的后续WriteFile
线程都将被阻塞,直到GetDiskFreeSpace
线程完成其执行。
c# - 使用 Dokan 实现虚拟驱动器。卡在 WriteFile
我正在使用 C# 和 Dokan 库编写我的文件系统并卡在 WriteFile 上。
当我运行应用程序并从 Dokan 的虚拟驱动器打开 txt 文件时,添加一些行并尝试保存它。我从记事本收到错误“参数不正确”。
在代码中,我在 File.OpenWrite() 调用上遇到异常。异常是 System.IO.IOException。消息:“该进程无法访问文件 foo.txt,因为它正被另一个进程使用。”
- 文件只能用记事本打开。
- 使用 Dokan 库提供的 Mirror 示例可以观察到相同的行为
- 我在清单中为我的程序添加了管理员权限,但没有帮助
Dokan 应该作为代理工作,允许调用用户定义的 WriteFile,对吗?如果它被锁定以进行写作,我该怎么做?
请帮忙。也许您对 Dokan 有任何经验或任何线索为什么它不起作用。
我正在使用 - Win 7 Pro x64 - 64 位 Dokan 驱动程序 - 应用程序编译为 x86
python - python - 从虚拟文件系统中运行应用程序
任何知道答案的人的快速问题。我正在使用虚拟文件系统和 python。我的文件系统中有一个 EXE 文件,是否可以运行此应用程序而不必使用 Dokan 之类的东西公开文件系统?
如果不可能,有没有办法在不需要像 Windows 中的 Dokan 那样需要驱动程序/管理员权限的情况下公开文件系统?
任何帮助表示赞赏,谢谢!
android - Android/Monodroid 上的 Dokan (DokanNet.dll) - 代码迁移问题
上下文: 我有一个 Windows 桌面应用程序(c#),它加载 dokan 库,每次运行时创建一个新的文件系统/驱动器,然后在新创建的驱动器中部署财务数据文件和受版权保护的文件 - 只允许有限的进程(我声明)可以访问新创建的文件系统中的这些文件(使用 dokan)。现在我们正在将相同的 C# 代码迁移到 android。虽然代码没有给出错误,但(在运行 apk 时)没有创建新驱动器。虽然我只能在一定程度上调试(突然退出调试模式)
问题的假设: 权限问题:
问题:
Dokan 是否适用于 Android?如果是权限问题,该怎么办?在市场上,大多数安装我的应用程序的设备可能没有“root”!有没有人在 Android/Monodroid 上使用 DokanNet 实现了新的文件系统/驱动器并面临类似的问题?解决方案???
c# - 识别 Dokan 文件系统上的 Office 文件写入操作
我使用 dokan 作为文件系统,不知道如何识别 office 文件写入操作。特别是锁定和临时文件。我必须识别它们,因为只有主文件必须上传到外部数据库。
从理论上讲,我得到了办公室的话,但这更像是一种解决方法。我希望有一个特殊的属性来识别临时文件。
问候克里斯
dokan - 为 Windows (.net C#) 开发虚拟驱动器
我的要求。
在 Windows 中开发一个 ntfs/fat 可格式化的原始虚拟驱动器 - 类似于 truecrypt。我想知道某处是否有 C# 实现。
dokan、callbackfs 等不完全适合,因为必须实现文件系统本身。filedisk、imdisk 等在内核空间中,代码看起来很复杂。
像 callbackdisk 或者 eterlogic 提供的那种是完美的,可惜它们很贵,我不想仅仅为了一个小项目而购买它们。
是否有任何其他免费提供的替代方案,如上述两个。最好是一个简单的 C# 包装器,它在我可以编码的用户空间中提供 read()/write() 回调函数。