2

我想扩展原始的FileDSC 资源以添加对确保源中不存在的文件在目标中被删除的支持。为此,我想至少通过在反汇编程序上检查它的代码来了解原始版本是如何实现的,或者尝试在ReferenceSource之类的地方找到它的实现,但我终生无法找到 dll 的位置实现资源的位于我的计算机上。

Get-DscResource File当我在 PowerShell 中发出命令时,该Module属性为空。然后我尝试检查对象本身以查看是否出现任何问题,但该Path属性也是空的,而该ParentPath属性指向C:\Windows\system32\Configuration\Schema\MSFT_FileDirectoryConfiguration,它只包含元数据文件而不包含二进制 dll。

我知道我可能可以使用我链接的另一个问题中描述的方法来解决这个问题,但是我们需要很多具有这种行为的文件夹,这样维护这些脚本将是一个问题。

理想情况下,可以扩展原始类并将此行为添加到其中,但我不指望这是可能的。我只是想将原始实现作为添加此功能的基线。

考虑到这一切,我在哪里可以找到实现给定二进制 DSC 资源功能的实际 dll?

4

1 回答 1

2

我已经做了一些挖掘,除非我错过了一些非常明显的东西,否则我认为文件资源位于“C:\Windows\System32\DscCoreConfProv.dll”中。

您已经找到了 MSFT_FileDirectoryConfiguration - 用于此的 WMI 类位于 root\Microsoft\Windows\DesiredStateConfiguration 命名空间中:

> Get-WmiObject -Namespace "root\Microsoft\Windows\DesiredStateConfiguration" -List | `
  Where-Object { $_.Name -eq "MSFT_FileDirectoryConfiguration" } | `
  ft

   NameSpace: ROOT\Microsoft\Windows\DesiredStateConfiguration

Name                                Methods              Properties
----                                -------              ----------
MSFT_FileDirectoryConfiguration     {GetTargetResourc... {Attributes,     Checksum, Contents, CreatedDate...}

这由dsccoreDSCCoreProviders WMI Providers 处理:

> Get-WmiObject -Namespace "root\Microsoft\Windows\DesiredStateConfiguration" -Class "__Win32Provider" | `
  Select-Object @( "Name", "CLSID" ) | `
  ft *

Name             CLSID
----             -----
dsccore          {BADCC35D-8542-4A5C-A457-0ECCCF62508A}
DSCCoreProviders {F04C3F9B-20B3-40E1-A824-3A41FE3D7931}

假设它是DSCCoreProviders提供程序,找到 CLSID 后面的 dll:

> New-PSDrive -Name "HKCR" -PSProvider "Registry" -Root "HKEY_CLASSES_ROOT"
> (Get-ItemProperty -LiteralPath "HKCR:\CLSID\{F04C3F9B-20B3-40E1-A824-3A41FE3D7931}\InProcServer32")."(default)"

C:\Windows\system32\DscCoreConfProv.dll

但是,毕竟,该文件不是 .NET Framework dll,因此您可能无法反汇编它。

于 2015-05-15T18:21:00.157 回答