Так, тут попутно выяснил вроде бы как можно
ограниченно реализовать IsWow64Process на WSH
, оставлю для себя для памяти на будущее:
Скрытый текст
Код:
Option Explicit
Dim objSWbemObjectEx
For Each objSWbemObjectEx In WScript.CreateObject("WbemScripting.SWbemLocator").ConnectServer(".", "root\cimv2").InstancesOf("Win32_Process")
With objSWbemObjectEx
WScript.Echo Left(.Name & Space(24), 24), Right(Space(12) & CStr(.ProcessID), 12), Array("32-bit", "64-bit")(CInt(IsWow64Process(.ProcessID)) + 1)
End With
Next
WScript.Quit 0
Function IsWow64Process(lngProcessID)
Const SystemFolder = 1
Dim objSWbemObjectEx
IsWow64Process = False
For Each objSWbemObjectEx In WScript.CreateObject("WbemScripting.SWbemLocator").ConnectServer(".", "root\cimv2").Get("Win32_Process.Handle='" & CStr(lngProcessID) & "'").Associators_(, "CIM_DataFile")
With WScript.CreateObject("Scripting.FileSystemObject")
If StrComp(.BuildPath(.GetSpecialFolder(SystemFolder), "wow64.dll"), objSWbemObjectEx.Name, vbTextCompare) = 0 Then
IsWow64Process = True
Exit Function
End If
End With
Next
End Function
Понятно, что это ни разу не натуральная IsWow64Process и близко. Просто тупо смотрим — есть ли у заданного процесса библиотека %SystemRoot%\System32\wow64.dll. Если есть — с некоторой долей вероятности это x86 процесс под x64 ОС. Разумеется, подобный упрощённый подход чреват ошибками, скажем, дочерний procexp64.exe (являющийся вполне себе x64) будет некорректно определён как x86.