Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Так, тут попутно выяснил вроде бы как можно ограниченно реализовать 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.

Отправлено: 09:03, 15-03-2017 | #10