@@ -710,10 +710,13 @@ $RemoteScriptBlock = {
710
710
$ImpersonateSelf = [System.Runtime.InteropServices.Marshal ]::GetDelegateForFunctionPointer($ImpersonateSelfAddr , $ImpersonateSelfDelegate )
711
711
$Win32Functions | Add-Member - MemberType NoteProperty - Name ImpersonateSelf - Value $ImpersonateSelf
712
712
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
+ }
717
720
718
721
$IsWow64ProcessAddr = Get-ProcAddress Kernel32.dll IsWow64Process
719
722
$IsWow64ProcessDelegate = Get-DelegateType @ ([IntPtr ], [Bool ].MakeByRefType()) ([Bool ])
@@ -909,24 +912,12 @@ $RemoteScriptBlock = {
909
912
[IntPtr ]
910
913
$StartAddress ,
911
914
912
- [Parameter (ParameterSetName = " EndAddress" , Position = 3 , Mandatory = $true )]
913
- [IntPtr ]
914
- $EndAddress ,
915
-
916
915
[Parameter (ParameterSetName = " Size" , Position = 3 , Mandatory = $true )]
917
916
[IntPtr ]
918
917
$Size
919
918
)
920
919
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 ))
930
921
931
922
$PEEndAddress = $PEInfo.EndAddress
932
923
0 commit comments