文件复制
将文件复制到 VM 中的 %windir%\system32 和 %windir%\syswow64
在某些情况下,驱动程序用户模式 DLL 需要存在于 %windir%\system32 和 %windir%\syswow64 目录中。
OS 提供了一种方法,让驱动程序指定应从主机中的驱动程序存储复制到来宾中 %windir%\system32 or %windir%\syswow64 的文件。
在安装 INF 中,驱动程序可以在图形适配器注册表项的以下子项中定义多个值:
- CopyToVmOverwrite
- CopyToVmWhenNewer
- CopyToVmOverwriteWow64
- CopyToVmWhenNewerWow64
CopyToVmOverwrite 和 CopyToVmWhenNewer 子项用于将文件复制到 %windir%\system32 目录。
CopyToVmOverwriteWow64 和 CopyToVmWhenNewerWow64 子项用于将文件复制到 %windir%\syswow64 目录。
CopyToVmOverwrite 和 CopyToVmOverwriteWow64 下的文件始终会覆盖目标中的文件。
CopyToVmWhenNewer 和 CopyToVmWhenNewerWow64 下的文件只有在文件更改日期较新的情况下才会覆盖目标中的文件。 “较新”条件比较了两条信息:
- FileVersion
- 最后写入时间
当目标文件以 .dll 或 .exe 后缀结尾时,FileVersion 将用作最重要的比较值,其中最大版本被视为“较新”。 如果目标文件不以 .dll 或 .exe 后缀结尾或两个 FileVersion 相等,则 LastWriteTime 将用作最不重要的比较值,其中较晚的日期/时间被视为“较新”。
子项下的每个数值类型都必须是 REG_MULTI_SZ 或 REG_SZ。 如果值类型REG_MULTI_SZ,则值中最多应有两个字符串。 此要求意味着每个值定义单个字符串或一对字符串,其中第二个字符串可以为空。
配对中的首个名称是驱动程序存储区中文件的路径。 路径相对于驱动程序存储的根目录,可以包含子目录。
对中的第二个名称是文件的名称,因为它应出现在 %windir%\system32 或 %windir%\syswow64 目录中。 第二个名称应只是文件名,不包括路径。 如果第二个名称为空,则文件名与驱动程序存储(不包括子目录)中的文件名相同。
这种方法允许驱动程序在主机驱动程序存储区和来宾中就会使用不同的名称。
示例 1
以下示例演示了如何让 OS 将 <DriverStorePath>\CopyToVm\softgpu1.dll 复制到 %windir%\system32\softgpu2.dll。
INF [DDInstall] section
HKR,"softgpukmd\CopyToVmOverwrite",SoftGpuFiles,%REG_MULTI_SZ%,"CopyToVm\softgpu1.dll”, “softgpu2.dll”
The directive creates the registry key in the software (adapter) key:
"HKLM\SYSTEM\CurrentControlSet\Control\Class\{4d36e968-e325-11ce-bfc1-08002be10318}\<number>\CopyToVmOverwrite”, SoftGpuFiles = REG_MULTI_SZ, “CopyToVm\softgpu1.dll”, “softgpu2.dll"
示例 2
以下示例演示如何让 OS 将 <DriverStorePath>\softgpu1.dll 复制到 %windir%\system32\softgpu.dll,并将 <DriverStorePath>\softgpu2.dll 复制到 %windir%\system32\softgpu2.dll。
INF [DDInstall] section:
HKR,"CopyToVmOverwrite",SoftGpuFiles1,%REG_MULTI_SZ%,"softgpu1.dll”,”softgpu.dll"
HKR,"CopyToVmOverwrite",SoftGpuFiles2,%REG_SZ%, “softgpu2.dll"
The directive creates the registry key in the software (adapter) key:
“HKLM\SYSTEM\CurrentControlSet\Control\Class\{4d36e968-e325-11ce-bfc1-08002be10318}\<number>\CopyToVmOverwrite”, SoftGpuFiles1 = REG_MULTI_SZ, “softgpu1.dll”, “softgpu.dll"“HKLM\SYSTEM\CurrentControlSet\Control\Class\{4d36e968-e325-11ce-bfc1-08002be10318}\<number>\CopyToVmOverwrite”, SoftGpuFiles2 = REG_SZ, “softgpu2.dll””
示例 3
以下示例演示如何让 OS 将 <DriverStorePath>\Subdir1\Subdir2\softgpu2wow64.dll 复制到 %windir%\syswow64\softgpu.dll,以及将 <DriverStorePath>\softgpu.dll 复制到 %windir%\syswow64\softgpu2wow64.dll。
INF [DDInstall] section:
HKR,"CopyToVmOverwriteWow64",SoftGpuFiles,%REG_MULTI_SZ%,“Subdir1\Subdir2\softgpu2wow64.dll”,”softgpu.dll”.
The directive creates the registry key in the software (adapter) key:
“HKLM\SYSTEM\CurrentControlSet\Control\Class\{4d36e968-e325-11ce-bfc1-08002be10318}\<number>\CopyToVmOverwriteWow64”, SoftGpuFiles = REG_MULTI_SZ, “Subdir1\Subdir2\softgpu2wow64.dll”,”softgpu.dll