WINDOWS9X下每个程序都是独立4GB空间(其实只有2GB是私有的),第一个参数是实例句柄也就是加载程序的地址,9X下一般是0X400000,NT下是0X10000,多看看WINDOWS编程的书

解决方案 »

  1.   

    我知道啊, 可选择子相同,那么相同的偏移地址所对应的线性地址不是相同了吗?
    下面是我在知识库中看到的别人的一篇文章中的一节,怎么解释呢??
    二、Windows95 Win32 应 用 程 序 运 行 一 个 映 射 到 全 部4G 内 存 的 段 中, 选 择 子 为0137h,Ring0 中 的VxD 运 行 在 另 一 个 映 射 到 全 部4G 内 存 的 段 中, 选 择 子028h, 这 两 个 段 除 了 选 择 子 决 定 的 访 问 权 限 不 同 外, 没 什 么 不 同, 各 自 段 中 相 同 的 偏 移 量 对 应 了 相 同 的 线 性 地 址。 
      

  2.   

    二、Windows95 Win32 应 用 程 序 运 行 一 个 映 射 到 全 部4G 内 存 的 段 中, 选 择 子 为0137h,Ring0 中 的VxD 运 行 在 另 一 个 映 射 到 全 部4G 内 存 的 段 中, 选 择 子028h, 这 两 个 段 除 了 选 择 子 决 定 的 访 问 权 限 不 同 外, 没 什 么 不 同, 各 自 段 中 相 同 的 偏 移 量 对 应 了 相 同 的 线 性 地 址。 所 以 我 们 放 在Win32 应 用 程 序 中 的 中 断 服 务 程 序 可 以 以Ring3 的 段 偏 移 量 被Ring0 中 的VMM 寻 址。 
    也就是说相同的线性地址决定了内存中相同的页啊,
    比如两个应用程序,都起始于0x400000, 其中一个有中断服务,而多线程运行是轮流的,
    那系统怎么正确寻址到中断服务呢(中断描述子中只有线性地址吧?)。
      

  3.   

    系统不会把你给的地址换成物理地址么,对于系统来说有了线性地址就有了选择子和物理地址,系统可以再分配一个特权选择子,并使它指向你所给的线性地址所在的那块物理地址,给VMM使用。