-
-
[原创]win10自带截图和草图的截图流程
-
发表于: 2023-3-7 16:34 5490
-
svchost.exe 创建ScreenClippingHost.exe和RuntimeBroker.exe
基础流程:ScreenClippingHost.exe 进程将截图数据存储到内存中,然后调用应用程序通信 API,将截图数据发送给 RuntimeBroker.exe 进程。RuntimeBroker.exe 进程接收到截图数据后,将其保存到屏幕截图文件夹中。
在这个过程中,ScreenClippingHost.exe 作为一个 UWP 应用程序,拥有访问图形硬件和输入设备的权限,可以进行高效的截图操作。
而 RuntimeBroker.exe 作为一个受限制的进程,只能执行一些受限的任务,如保存截图数据到文件系统中。
通过应用程序通信 API,ScreenClippingHost.exe 和 RuntimeBroker.exe 之间实现了数据的安全传输和处理。
1.ScreenClippingHost.exe是如何截图的?
ScreenClippingHost.exe具体利用D3D11进行截图的(也有hook其他可能进行截图的dll,比如dwmapi.dll,相关截图的api没有走)
HRESULT D3D11CreateDevice(
[in, optional] IDXGIAdapter pAdapter,
D3D_DRIVER_TYPE DriverType,
HMODULE Software,
UINT Flags,
[in, optional] const D3D_FEATURE_LEVEL pFeatureLevels,
UINT FeatureLevels,
UINT SDKVersion,
[out, optional] ID3D11Device ppDevice,
[out, optional] D3D_FEATURE_LEVEL *pFeatureLevel,
[out, optional] ID3D11DeviceContext ppImmediateContext
);
1.先通过hook D3D11CreateDevice 然后获取到ID3D11DeviceContext指针,然后在hook这张虚表,里面实现截图的api如下:
ID3D11DeviceContext::CopyResource
使用 GPU 将源资源的全部内容复制到目标资源。(ID3D11DeviceContext.CopyResource)
ID3D11DeviceContext::CopySubresourceRegion
将区域从源资源复制到目标资源。(ID3D11DeviceContext.CopySubresourceRegion)
通过hook虚表之后,当截图的时候调用了这zpi之后,在返回false即可实现限制截图。
流程上是否正确,各位可以验证一下,我也是初学者,对与不对的,可以评论留言探讨一下。
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!