NtGdiFillPath内核函数逆向分析
0x00前言
函数作用关闭当前路径中的任何打开的图形,并使用当前笔刷和多边形填充模式填充路径的内部。
0x01分析
NtGdiFillPath会直接调用EPATHOBJ::bStrokeAndOrFill 进行当前画笔填充路径的内部
EPATHOBJ::bStrokeAndOrFill(&ppo, (struct XDCOBJ *)v9, 0i64, 0i64, 2u);
第一步判断ppo->cCurves 是否空 有无点,接着模2 就是清除低位1 更具点的类型修改不同a5值
DestSurfaceAccessCheck 调用成功走
EPATHOBJ::bSimpleFill
接着调用EngFillPath 进行路径填写
EngFastFill 文件填写 整体流程关键函数就是
win32kfull!bFill
win32kfull!bEngFastFillEnum+0xcd15c
win32kfull!bPaintPath+0xdc
win32kfull!EngFastFill+0xa3
win32kfull!EngFillPath+0x133
win32kfull!EPATHOBJ::bSimpleFill+0x10b
win32kfull!EPATHOBJ::bStrokeAndOrFill+0x2fe
win32kfull!NtGdiFillPath+0xa6