#region Internals #region C# Code $type_NTFS1 = @' using System; using System.IO; using System.Collections; using System.Runtime.InteropServices; using Microsoft.Win32.SafeHandles; namespace NTFS { public class DriveInfoExt { [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Auto)] static extern bool GetDiskFreeSpace(string lpRootPathName, out uint lpSectorsPerCluster, out uint lpBytesPerSector, out uint lpNumberOfFreeClusters, out uint lpTotalNumberOfClusters); DriveInfo _drive = null; uint _sectorsPerCluster = 0; uint _bytesPerSector = 0; uint _numberOfFreeClusters = 0; uint _totalNumberOfClusters = 0; public uint SectorsPerCluster { get { return _sectorsPerCluster; } } public uint BytesPerSector { get { return _bytesPerSector; } } public uint NumberOfFreeClusters { get { return _numberOfFreeClusters; } } public uint TotalNumberOfClusters { get { return _totalNumberOfClusters; } } public DriveInfo Drive { get { return _drive; } } public string DriveName { get { return _drive.Name; } } public string VolumeName { get { return _drive.VolumeLabel; } } public DriveInfoExt(string DriveName) { _drive = new DriveInfo(DriveName); GetDiskFreeSpace(_drive.Name, out _sectorsPerCluster, out _bytesPerSector, out _numberOfFreeClusters, out _totalNumberOfClusters); } } public class FileInfoExt { [DllImport("kernel32.dll", SetLastError = true, EntryPoint = "GetCompressedFileSize")] static extern uint GetCompressedFileSize(string lpFileName, out uint lpFileSizeHigh); public static ulong GetCompressedFileSize(string filename) { uint high; uint low; low = GetCompressedFileSize(filename, out high); int error = Marshal.GetLastWin32Error(); if (high == 0 && low == 0xFFFFFFFF && error != 0) { throw new System.ComponentModel.Win32Exception(error); } else { return ((ulong)high << 32) + low; } } } } '@ #endregion #endregion Add-Type -TypeDefinition $type_NTFS1 Add-Type -Path $PSScriptRoot\Security2.dll Add-Type -Path $PSScriptRoot\PrivilegeControl.dll -ReferencedAssemblies $PSScriptRoot\ProcessPrivileges.dll Add-Type -Path $PSScriptRoot\ProcessPrivileges.dll #using Update-FormatData and not FormatsToProcess in the PSD1 as FormatsToProcess does not offer #putting format data in front of the default data. This is required to make the new formatter the default ones. Update-FormatData -PrependPath $PSScriptRoot\NTFSSecurity.format.ps1xml