@@ -710,10 +710,13 @@ $RemoteScriptBlock = {
710710 $ImpersonateSelf = [System.Runtime.InteropServices.Marshal ]::GetDelegateForFunctionPointer($ImpersonateSelfAddr , $ImpersonateSelfDelegate )
711711 $Win32Functions | Add-Member - MemberType NoteProperty - Name ImpersonateSelf - Value $ImpersonateSelf
712712
713- $NtCreateThreadExAddr = Get-ProcAddress NtDll.dll NtCreateThreadEx
714- $NtCreateThreadExDelegate = Get-DelegateType @ ([IntPtr ].MakeByRefType(), [UInt32 ], [IntPtr ], [IntPtr ], [IntPtr ], [IntPtr ], [Bool ], [UInt32 ], [UInt32 ], [UInt32 ], [IntPtr ]) ([UInt32 ])
715- $NtCreateThreadEx = [System.Runtime.InteropServices.Marshal ]::GetDelegateForFunctionPointer($NtCreateThreadExAddr , $NtCreateThreadExDelegate )
716- $Win32Functions | Add-Member - MemberType NoteProperty - Name NtCreateThreadEx - Value $NtCreateThreadEx
713+ # NtCreateThreadEx is only ever called on Vista and Win7. NtCreateThreadEx is not exported by ntdll.dll in Windows XP
714+ if (([Environment ]::OSVersion.Version -ge (New-Object ' Version' 6 , 0 )) -and ([Environment ]::OSVersion.Version -lt (New-Object ' Version' 6 , 2 ))) {
715+ $NtCreateThreadExAddr = Get-ProcAddress NtDll.dll NtCreateThreadEx
716+ $NtCreateThreadExDelegate = Get-DelegateType @ ([IntPtr ].MakeByRefType(), [UInt32 ], [IntPtr ], [IntPtr ], [IntPtr ], [IntPtr ], [Bool ], [UInt32 ], [UInt32 ], [UInt32 ], [IntPtr ]) ([UInt32 ])
717+ $NtCreateThreadEx = [System.Runtime.InteropServices.Marshal ]::GetDelegateForFunctionPointer($NtCreateThreadExAddr , $NtCreateThreadExDelegate )
718+ $Win32Functions | Add-Member - MemberType NoteProperty - Name NtCreateThreadEx - Value $NtCreateThreadEx
719+ }
717720
718721 $IsWow64ProcessAddr = Get-ProcAddress Kernel32.dll IsWow64Process
719722 $IsWow64ProcessDelegate = Get-DelegateType @ ([IntPtr ], [Bool ].MakeByRefType()) ([Bool ])
@@ -909,24 +912,12 @@ $RemoteScriptBlock = {
909912 [IntPtr ]
910913 $StartAddress ,
911914
912- [Parameter (ParameterSetName = " EndAddress" , Position = 3 , Mandatory = $true )]
913- [IntPtr ]
914- $EndAddress ,
915-
916915 [Parameter (ParameterSetName = " Size" , Position = 3 , Mandatory = $true )]
917916 [IntPtr ]
918917 $Size
919918 )
920919
921- [IntPtr ]$FinalEndAddress = [IntPtr ]::Zero
922- if ($PsCmdlet.ParameterSetName -eq " Size" )
923- {
924- [IntPtr ]$FinalEndAddress = [IntPtr ](Add-SignedIntAsUnsigned ($StartAddress ) ($Size ))
925- }
926- else
927- {
928- $FinalEndAddress = $EndAddress
929- }
920+ [IntPtr ]$FinalEndAddress = [IntPtr ](Add-SignedIntAsUnsigned ($StartAddress ) ($Size ))
930921
931922 $PEEndAddress = $PEInfo.EndAddress
932923
0 commit comments