mirror of https://github.com/raandree/NTFSSecurity
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
81 lines
2.5 KiB
81 lines
2.5 KiB
#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
|