我有a previous post关于如何在wmp activex中播放内存流并得到一个带有boxedapp sdk链接的回复。它不是免费软件所以我研究了这个过程,我发现它正在使用一个虚拟文件来保存流,并将其文件名用作URL。所以,我的问题是如何创建一个返回句柄的虚拟文件,然后由THandleStream访问。我正在使用Delphi 7.谢谢。
如何在wmp activex或任何播放器中播放内存流的过程:
答案 0 :(得分:3)
如果您正在尝试创建隐藏在用户之外的内容,正如您的一条评论所暗示的那样,您现在也可能会忘记所有相关内容。不可能。从来没有工作过,从来没有。你可以让它变得更加困难,但是如果计算机能够阅读它,那么一天结束时,一个聪明的黑客可以阅读你的代码并复制你的技巧。即使是强加密的DRM方案,在被打破之前最多只能持续一个月左右,而你甚至都没有尝试过那么远。
答案 1 :(得分:1)
Boxedapp拦截所有IO调用,如果文件是使用他们的API创建的(I.E. BoxedAppSDK_CreateVirtualFile),他们将自己处理调用。这不是一件容易的事,你可以看看detours这是一个拦截框架,但至于拦截所有的IO调用,祝你好运。
你为什么需要那个?为什么你不能将内存流保存到临时文件夹并从那里播放文件?你需要在完成后清理文件吗?
答案 2 :(得分:1)
我相信你使用管道功能(来自msvcrt.dll):
function _pipe(phandles : pointer; psize : uint; textmode : integer) : integer; cdecl; external 'msvcrt.dll' name '_pipe';
一些伪代码:
var
_handles : array[0..1] of THandle;
begin
if _pipe(@_handles, size, 0) = -1 then
Exit;
FReadHandle := _handles[0];
FWriteHandle := _handles[1];
_write(FVirtualWriteHandle, Buffer, size);
close(FWriteHandle);
close(FReadHandle);
end;