Scripts/New-UsnJournal.ps1
Function New-UsnJournal { [cmdletbinding( SupportsShouldProcess = $True )] Param ( [parameter()] [ValidateScript({ If ($_ -notmatch '^\w:$') { Throw "$($_) must match this format: C:" } Else {$True} })] [string]$DriveLetter = 'C:', [parameter()] [int64]$Size = 30MB, [parameter()] [int64]$Allocation = 4MB ) [uint32]$AvailableBytes = 0 #Create structure $CREATE_USN_JOURNAL_DATA = New-Object CREATE_USN_JOURNAL_DATA $CREATE_USN_JOURNAL_DATA.MaximumSize = $Size $CREATE_USN_JOURNAL_DATA.AllocationData = $Allocation #Allocate buffers $CUJD_Size = [System.Runtime.InteropServices.Marshal]::SizeOf($CREATE_USN_JOURNAL_DATA) $CUJD_Buffer = [System.Runtime.InteropServices.Marshal]::AllocHGlobal($CUJD_Size) [PoshChJournal]::ZeroMemory($CUJD_Buffer, $CUJD_Size) [void][System.Runtime.InteropServices.Marshal]::StructureToPtr($CREATE_USN_JOURNAL_DATA, $CUJD_Buffer, $True) If ($PSCmdlet.ShouldProcess($Drive, 'Create Usn Journal')) { $VolumeHandle = OpenUSNJournal -DriveLetter $DriveLetter $Return = [PoshChJournal]::DeviceIoControl( $VolumeHandle, [EIOControlCode]::FSCTL_CREATE_USN_JOURNAL, $CUJD_Buffer, $CUJD_Size, [intptr]::Zero, 0, [ref]$AvailableBytes, [intptr]::Zero ) If (-Not $Return) { Write-Warning "Could not create Usn Journal on $($DriveLetter)" } } #Cleanup [System.Runtime.InteropServices.Marshal]::FreeHGlobal($CUJD_Buffer) Get-UsnJournal } |