Advertisement
vanhoivo

Source code of Windows 10 Login Screen Background Changer!

Aug 12th, 2015
485
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.70 KB | None | 0 0
  1. $priPath = $args[0]
  2. $outputPath = $args[1]
  3. $replacementPath = $args[2]
  4. $ErrorActionPreference = "Stop"
  5.  
  6. $inputStream = [System.IO.File]::OpenRead($priPath)
  7. $outputStream = [System.IO.File]::Create($outputPath)
  8. $replacementStream = [System.IO.File]::OpenRead($replacementPath)
  9.  
  10. $inputReader = New-Object System.IO.BinaryReader -ArgumentList $inputStream
  11. $outputWriter = New-Object System.IO.BinaryWriter -ArgumentList $outputStream
  12.  
  13. $inputStream.CopyTo($outputStream)
  14.  
  15. $replacementLengthAligned = ([Math]::Ceiling($replacementStream.Length / 8) * 8)
  16.  
  17. # header
  18. $inputStream.Seek(0x14, "Begin") | Out-Null
  19. $headerLength = $inputReader.ReadUInt32()
  20. $inputStream.Seek(0xB8, "Begin") | Out-Null
  21. $dataitemOffset = $inputReader.ReadUInt32()
  22. $origDataitemLength = $inputReader.ReadUInt32()
  23. $dataitemLength = $origDataitemLength + $replacementLengthAligned
  24. $outputStream.Seek(0xBC, "Begin") | Out-Null
  25. $outputWriter.Write([int]$dataitemLength)
  26.  
  27. # dataitem
  28. $outputStream.Seek($headerLength + $dataitemOffset + 0x18, "Begin") | Out-Null
  29. $outputWriter.Write([int]$dataitemLength)
  30. $inputStream.Seek($headerLength + $dataitemOffset + 0x24, "Begin") | Out-Null
  31. $stringCount = $inputReader.ReadUInt16()
  32. $blobCount = $inputReader.ReadUInt16()
  33. $origDataLength = $inputReader.ReadUInt32()
  34. $outputStream.Seek(0xC, "Current") | Out-Null
  35. $outputWriter.Write([int]($origDataLength + $replacementLengthAligned))
  36. $outputStream.Seek($stringCount * 4, "Current") | Out-Null
  37. for ($i = 0; $i -lt 10; $i++)
  38. {
  39.     $outputWriter.Write($origDataLength)
  40.     $outputWriter.Write([int]$replacementStream.Length)
  41. }
  42. $outputStream.Seek(($blobCount - 10) * 8, "Current") | Out-Null
  43.  
  44. # data
  45. $outputStream.Seek($origDataLength, "Current") | Out-Null
  46. if ($outputStream.Length - $outputStream.Position -ne 0x18)
  47. {
  48.     Write-Error "Not compatible with this PRI file."
  49. }
  50. $replacementStream.CopyTo($outputStream)
  51.  
  52. # footer
  53. $outputStream.Seek($replacementLengthAligned - $replacementStream.Length, "Current") | Out-Null
  54. $outputWriter.Write(0xDEF5FADE)
  55. $outputWriter.Write([int]$dataitemLength)
  56. $outputWriter.Write(0xDEFFFADE)
  57. $outputWriter.Write(0x00000000)
  58. $outputWriter.Write([char[]]"mrm_pri2")
  59.  
  60. $outputStream.Seek(0xC, "Begin") | Out-Null
  61. $outputWriter.Write([int]$outputStream.Length)
  62. $outputStream.Seek(-0xC, "End") | Out-Null
  63. $outputWriter.Write([int]$outputStream.Length)
  64.  
  65. $inputReader.Close()
  66. $outputWriter.Close()
  67. $replacementStream.Close()
  68. ==============================================================================================================================================
  69. - Command Line Syntax from a Command Prompt:
  70. powershell -ExecutionPolicy Bypass -file script.ps1 OriginalPRIFile WhereToSavePRI ImageToUse
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement