Где я могу найти dll бинарных ресурсов DSC?

Я хочу расширить исходный ресурс File DSC, добавив поддержка обеспечения того, чтобы файлы, отсутствующие в источнике, удалялись в месте назначения. Для этого хотелось бы хотя бы узнать, как реализован оригинальный, проверив его код на дизассемблере или попытаться найти его реализацию в таких местах, как ReferenceSource, но я не могу найти, где на моем компьютере находится dll, реализующая ресурс.

Когда я запускаю команду Get-DscResource File в PowerShell, свойство Module пусто. Затем я попытался проверить сам объект, чтобы увидеть, не появилось ли что-нибудь, но свойство Path также пусто, а свойство ParentPath указывает на C:\Windows\system32\Configuration\Schema\MSFT_FileDirectoryConfiguration, который содержит только файлы метаданных, а не двоичную dll.

Я знаю, что, вероятно, мог бы обойти это, используя метод, описанный в другом вопросе, который я связал, но нам нужно много папок с таким поведением, и было бы проблемой поддерживать такие сценарии.

В идеале было бы возможно расширить исходный класс и добавить к нему такое поведение, но я не рассчитываю, что это возможно. Я просто хотел использовать исходную реализацию в качестве основы для добавления этой функции.

Имея все это в виду, где я могу найти реальную dll, которая реализует функциональность данного двоичного ресурса DSC?


person julealgon    schedule 15.05.2015    source источник


Ответы (1)


Я немного покопался, и если я не пропустил что-то болезненно очевидное, я думаю, что ресурс File находится в «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...}

и это обрабатывается поставщиками WMI dsccore и DSCCoreProviders:

> 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, найдите dll за CLSID:

> 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, поэтому у вас могут возникнуть проблемы с его дизассемблированием.

person mclayton    schedule 15.05.2015
comment
Удивительные вещи... Я чувствую себя разочарованным из-за того, что не знаю, как это работает. Я ничего не знаю ни о WMI, ни даже о CLSID, хотя слышал и видел их несколько раз. Это то же самое чувство, когда работаешь с веб-формами ASP.Net, почти ничего не зная о CSS, html и JavaScript. Однако тот факт, что это родная dll, облом... Я надеялся на .Net dll. Я действительно не хочу заново реализовывать потенциально сложную логику, которую уже делает этот ресурс. Я даже не могу подтвердить ваш ответ, поэтому, если бы вы могли подтвердить, что он там, я бы отметил его как ответ. - person julealgon; 15.05.2015