动态链接库搜索顺序

动态链接库搜索顺序

  Windows XP启动后,动态链接库的搜索顺序由注册表的HKLM/System/CurrentControlSet/Control/Session Manager/SafeDllSearchMode

值指定。

Windows Server 2003:  默认值为1.
Windows XP:  默认值为 0.

如果 SafeDllSearchMode 值是1, 搜索顺序如下所示:

  1. 程序载入的目录.
  2. system目录. 使用GetSystemDirectory 函数获取这个目录路径.
  3. 16-bit system目录. 没有函数获取这个目录,但属于DLL搜索范围.
  4. Windows目录. 使用GetWindowsDirectory函数可以获取该目录路径.
  5. 当前目录.
  6. PATH 环境变量设置的目录列表.

如果 SafeDllSearchMode 值是0, 搜索顺序如下所示:

  1. 程序载入的目录. 
  2. 当前目录.
  3. system目录. 使用GetSystemDirectory 函数获取这个目录路径.
  4. 16-bit system目录. 没有函数获取这个目录,但属于DLL搜索范围.
  5. Windows目录. 使用GetWindowsDirectory函数可以获取该目录路径.
  6. PATH 环境变量设置的目录列表.  
替换搜索顺序

 

LoadLibraryEx 函数支持另一种搜索顺序,当该函数使用参数 LOAD_WITH_ALTERED_SEARCH_PATH ,并且lpFileName参数指定一个路径.

 

如果 SafeDllSearchMode 值是 1, 搜索顺序如下:

  1. lpFileName指定的路径.
  2. system目录. 使用GetSystemDirectory 函数获取这个目录路径.
  3. 16-bit system目录. 没有函数获取这个目录,但属于DLL搜索范围.
  4. Windows目录. 使用GetWindowsDirectory函数可以获取该目录路径.
  5. 当前目录.
  6. PATH 环境变量设置的目录列表.  

如果 SafeDllSearchMode 值是 0, 搜索顺序如下:

  1. lpFileName指定的路径.
  2. 当前目录.
  3. system目录. 使用GetSystemDirectory 函数获取这个目录路径.
  4. 16-bit system目录. 没有函数获取这个目录,但属于DLL搜索范围.
  5. Windows目录. 使用GetWindowsDirectory函数可以获取该目录路径.
  6. PATH 环境变量设置的目录列表.  

标准搜索策略与替换搜索策略有一点不同: 标准搜索从程序所在目录开始搜索, 替换搜索则从LoadLibraryEx 指定目录开始。如果你指定用替换搜索策略, 程序继续往下走直到所有相关可执行modules都被定位. 系统开始执行DLL初始化后,系统又切换回标准搜索策略.

 

传统搜索顺序

 

老版本的Windows 不支持SafeDllSearchMode 值. DLL搜索顺序如下:

Windows 2000/NT:  系统搜索顺序如下:
  1. 程序载入的目录.
  2. 当前目录.
  3. system目录. 使用GetSystemDirectory 函数获取这个目录路径.
  4. 16-bit system目录. 没有函数获取这个目录,但属于DLL搜索范围.
  5. Windows目录. 使用GetWindowsDirectory函数可以获取该目录路径.
  6. PATH 环境变量设置的目录列表.  

 

Windows Me/98/95:  系统DLL搜索顺序如下:

  1. 程序载入的目录.
  2. 当前目录.
  3. system目录. 使用GetSystemDirectory 函数获取这个目录路径.
  4. Windows目录. 使用GetWindowsDirectory函数可以获取该目录路径.
  5. PATH 环境变量设置的目录列表. 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值