Как я проверяю, работает ли wscript/cscript на хосте x64 ОС?

Если это установлено в соответствии с результатом, это от младших 8 битов. например add ax, bx устанавливает PF в соответствии с AL.

1112 Однако не все инструкции делают это. Обратитесь к руководству. Например, mul https://www.felixcloutier.com/x86/mul оставляет PF неопределенным.


Кстати, название вашего вопроса совсем не соответствует вашему вопросу. Чтобы проверить PF, вы должны использовать такую ​​инструкцию, как jp или jnp

или lahf / and ah, 1<<2, чтобы сохранить флаги в AH, а затем AND, чтобы изолировать PF немного. https://en.wikipedia.org/wiki/FLAGS_register

Или на более поздних процессорах, setp al или cmovp eax, edx также могут быть вариантами.

5
задан Helen 9 July 2010 в 16:33
поделиться

2 ответа

Я не уверен, что необходимо проверить, выполняется ли сценарий под x64.

Попытайтесь читать из HKLM\Software\Wow6432Node\xyz, если это перестало работать, попытайтесь читать из HKLM\Software\xyz, если это перестало работать, Ваш ключ реестра не существует, принимает любые меры, является соответствующим.

Конечно, если Ваш дизайн более сложен (например, Вы пишете значение в тот ключ реестра, если это не существует), затем, что предложение не будет работать.

Вот VBScript для исследования операционной системы. Вам, вероятно, также будет нужно объяснение Свойств, доступных от Класса Win32_OperatingSystem

strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")        

Set colOperatingSystems = objWMIService.ExecQuery _
    ("Select * from Win32_OperatingSystem")

For Each objOperatingSystem in colOperatingSystems
    msg = objOperatingSystem.Caption & " " & _
            objOperatingSystem.Version & " " & _
                objOperatingSystem.OSArchitecture
    msgbox msg
Next

Обратите внимание на это Windows XP и 2003, OSArchitecture не доступно, в этом случае необходимо будет, вероятно, исследовать любого Caption или Version определить, является ли Ваша ОС 64-разрядной.

Вы могли также использовать что-то вроде этого в зависимости от уровня сложности, которой Вы требуете.

3
ответ дан 13 December 2019 в 22:17
поделиться

Вы не упомянули, какой API вы используете для чтения из реестра. Например, если вы используете класс StdRegProv WMI, вы можете использовать флаг __ProviderArchitecture для запроса доступа к 32-битной ветке реестра независимо от того, запущен ли сценарий под 32-битным или 64-битным Windows Script Host. Эта техника описана в статье Запрос данных WMI на 64-битной платформе в MSDN.

Вот пример чтения из 32-битного реестра:

strComputer = "."
Const HKLM = &h80000002

''# Specify the required registry bitness
Set oCtx = CreateObject("WbemScripting.SWbemNamedValueSet")
oCtx.Add "__ProviderArchitecture", 32
oCtx.Add "__RequiredArchitecture", True

''# Load the 32-bit registry provider
Set oLocator = CreateObject("WbemScripting.SWbemLocator")
Set oWMI = oLocator.ConnectServer(strComputer, "root\default",,,,,, oCtx)
Set oReg = oWMI.Get("StdRegProv") 

''# Specify input parameters for the GetStringValue method call
Set oInParams = oReg.Methods_("GetStringValue").InParameters
oInParams.hDefKey     = HKLM
oInParams.sSubKeyName = "Software\xyz"
oInParams.sValueName  = "foobar"

''# Read a string value from the registry
Set oOutParams = oReg.ExecMethod_("GetStringValue", oInParams,, oCtx)
WScript.Echo oOutParams.sValue

Заметим также, что в данном случае имена 32-битных ключей должны быть указаны обычным образом HKLM\Software\xyz вместо HKLM\Software\Wow6432Node\xyz.

1
ответ дан 13 December 2019 в 22:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: