关于LdrRegisterDllNotification()注册的通知行为变更起始版本的技术问询
关于LdrRegisterDllNotification()注册的通知行为变更起始版本的技术问询
各位大佬好,我最近在核对LdrRegisterDllNotification()函数的实际行为和官方文档描述时,发现了一个跨版本的明显差异,想请教下大家有没有相关的经验或者官方说明:
微软官方文档里明确说明,通过这个函数注册的DLL加载通知满足:
该通知在动态链接发生之前触发。
为了验证这个描述,我专门写了一个测试程序。结果发现在Windows 7 x64系统上,通知的触发时机完全符合文档所说;但切换到Windows 10 x64系统后,它的表现却截然不同——通知是在DLL的导入表已经解析完成,而且导入函数的入口点已经写入到导入地址表(IAT)之后才触发的。这里的IAT具体是指IMAGE_NT_HEADERS.OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress指向结构中的FirstThunk.u1.Function字段。
我使用的通知回调函数原型如下:
VOID CALLBACK NotificationFunction(_In_ ULONG NotificationReason, _In_ PLDR_DLL_NOTIFICATION_DATA NotificationData, _In_opt_ PVOID Context)
目前我还没找到官方关于这个行为变更的明确说明,想问问这个行为变更是从Windows 10的哪个具体版本开始的?或者有没有其他开发者遇到过类似的情况,能分享下相关的细节吗?
备注:内容来源于stack exchange,提问作者George Robinson
相关产品推荐
相关产品推荐

