我正在寻找一种方法来获取与
HANDLE
、ReadFile
和 WriteFile
兼容的 SetFilePointer
,但我不是访问文件系统或[虚拟]内存中的文件,而是访问希望操作由用户提供的回调处理,如下所示(例如):
HANDLE CreateFakeFile(
DWORD (*lpRead)(LPVOID, DWORD, LPVOID),
DWORD (*lpWrite)(LPVOID, DWORD, LPVOID),
LARGE_INTEGER (*lpSeek)(LARGE_INTEGER, DWORD, LPVOID)
)
当在文件 API 中使用句柄时,必须调用提供的回调。
背景:
我有可以(至少大部分)按程序生成的数据,但处理数据的 API 需要一个文件
HANDLE
。这不能轻易改变。然而,在任何给定时间只需要一小部分数据(我事先不知道它的范围),并且数据总量足够大,以至于将整个数据预先生成为一个in是不可行的。 -首先是内存文件,因为它需要我计算整个可能的数据范围,即使只访问其中的一小部分。
本质上,我需要一个 Win32 API 级别的假文件流,这可以在 C# 中完成,例如通过从
System.IO.Stream
继承。然后,我提供的用户回调将根据需要实现生成算法。
我认为使用自定义文件系统驱动程序之类的东西是可能的,但是,这远远超出了该项目的范围。尤其是因为我不想需要管理员权限。
命名管道可能对您有用。它就像一个文件,您可以通过另一端提供和接收数据。 https://learn.microsoft.com/en-us/windows/win32/ipc/named-pipes