Windows 核心编程读书笔记

 1. D L L模块中的函数转发器使用

#pragma comment(linker, "/export:SomeFunc=DllWork.SomeOtherFunc")

这个p r a g m a告诉链接程序,被编译的D L L应该输出一个名叫S o m e F u n c的函数。但是
S o m e F u n c函数的实现实际上位于另一个名叫S o m e O t h e r F u n c的函数中,该函数包含在称为
D l l Wo r k . d l l的模块中。必须为你想要转发的每个函数创建一个单独的p r a g m a代码行。

2. HKEY_LOCAL_MACHINE/SYSTEM/ControlSet001/Control/Session Manager/KnownDLLs添加

注册表关键字K n o w n D L L:

value name: SomeLib

value data: SomeOtherLib.dll

如果调用下面的函数,系统将会发现有一个匹配的值名字(记住,当系统检查注册
表的值名字时,它将删除扩展名. d l l)

LoadLibrary("SomeLib.dll");

这时,系统设法加载称为S o m e O t h e r L i b . d l l的文件,而不是加载S o m e L i b . d l l。它首先
在% S y s t e m R o o t % / S y s t e m 3 2目录中查找S o m e O t h e r L i b . d l l。如果它在该目录中找到了文件,它
就加载该文件。如果文件不在该目录中, L o a d L i b r a r y ( E x )运行失败并返回N U L L,同时,对
G e t L a s t E r r o r的调用将返回2(E R R O R _ F I L E _ N O T _ F O U N D)。

 

你可能感兴趣的:(编程,c,windows,读书,扩展,linker)