我可以创建一个使用用户回调实现的假文件句柄吗?

问题描述 投票:0回答:1

我正在寻找一种方法来获取与

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
继承。然后,我提供的用户回调将根据需要实现生成算法。

我认为使用自定义文件系统驱动程序之类的东西是可能的,但是,这远远超出了该项目的范围。尤其是因为我不想需要管理员权限。

c windows handle filehandle
1个回答
0
投票

命名管道可能对您有用。它就像一个文件,您可以通过另一端提供和接收数据。 https://learn.microsoft.com/en-us/windows/win32/ipc/named-pipes

© www.soinside.com 2019 - 2024. All rights reserved.