@@ -284,20 +284,30 @@ Blog on this script: http://clymb3r.wordpress.com/2013/11/03/powershell-and-toke
284
284
$Procedure
285
285
)
286
286
287
- # Get a reference to System.dll in the GAC
288
- $SystemAssembly = [AppDomain ]::CurrentDomain.GetAssemblies() |
289
- Where-Object { $_.GlobalAssemblyCache -And $_.Location.Split (' \\' )[-1 ].Equals(' System.dll' ) }
290
- $UnsafeNativeMethods = $SystemAssembly.GetType (' Microsoft.Win32.UnsafeNativeMethods' )
291
- # Get a reference to the GetModuleHandle and GetProcAddress methods
292
- $GetModuleHandle = $UnsafeNativeMethods.GetMethod (' GetModuleHandle' )
293
- $GetProcAddress = $UnsafeNativeMethods.GetMethod (' GetProcAddress' )
294
- # Get a handle to the module specified
295
- $Kern32Handle = $GetModuleHandle.Invoke ($null , @ ($Module ))
296
- $tmpPtr = New-Object IntPtr
297
- $HandleRef = New-Object System.Runtime.InteropServices.HandleRef($tmpPtr , $Kern32Handle )
298
-
299
- # Return the address of the function
300
- Write-Output $GetProcAddress.Invoke ($null , @ ([System.Runtime.InteropServices.HandleRef ]$HandleRef , $Procedure ))
287
+ # Get a reference to System.dll in the GAC
288
+ $SystemAssembly = [AppDomain ]::CurrentDomain.GetAssemblies() |
289
+ Where-Object { $_.GlobalAssemblyCache -And $_.Location.Split (' \\' )[-1 ].Equals(' System.dll' ) }
290
+ $UnsafeNativeMethods = $SystemAssembly.GetType (' Microsoft.Win32.UnsafeNativeMethods' )
291
+
292
+ # Get a reference to the GetModuleHandle and GetProcAddress methods
293
+ $GetModuleHandle = $UnsafeNativeMethods.GetMethod (' GetModuleHandle' )
294
+ $GetProcAddress = $UnsafeNativeMethods.GetMethod (' GetProcAddress' , [Type []]@ ([System.Runtime.InteropServices.HandleRef ], [String ]))
295
+
296
+ # Get a handle to the module specified
297
+ $Kern32Handle = $GetModuleHandle.Invoke ($null , @ ($Module ))
298
+
299
+ # Return the address of the function
300
+ try
301
+ {
302
+ $tmpPtr = New-Object IntPtr
303
+ $HandleRef = New-Object System.Runtime.InteropServices.HandleRef($tmpPtr , $Kern32Handle )
304
+ Write-Output $GetProcAddress.Invoke ($null , @ ([System.Runtime.InteropServices.HandleRef ]$HandleRef , $Procedure ))
305
+ }
306
+ catch
307
+ {
308
+ # Windows 10 v1803 needs $Kern32Handle as a System.IntPtr instead of System.Runtime.InteropServices.HandleRef
309
+ Write-Output $GetProcAddress.Invoke ($null , @ ($Kern32Handle , $Procedure ))
310
+ }
301
311
}
302
312
303
313
# ##############################
0 commit comments