Собственно сабж. Очень желательно без юзания апи, ну или на крайняк токо при юзании ZwQuerySystemInformation. Если задать с инфоклассом SystemProcessorInformation, то моно получить следующие данные. Код (Text): SYSTEM_PROCESSOR_INFORMATION struct ProcessorArchitecture USHORT ? ;PROCESSOR_ARCHITECTURE_* (PROCESSOR_ARCHITECTURE_INTEL) ProcessorLevel USHORT ? ;PROCESSOR_* (PROCESSOR_INTEL_PENTIUM) ProcessorRevision USHORT ? ;Pentium: H=model, L=stepping Unknown USHORT ? ;0 FeatureBits ULONG ? SYSTEM_PROCESSOR_INFORMATION ends Нету необходимых данный. В TEB'e и в PEB'e поискал, тоже ничего путного не нашел, в структуре KUSER_SHARED_DATA нашел поле ProcessorFeatures, но кажется этого тоже самое что FeatureBits. Подскажите пожалуйста как быстро и безболезненно получить данную инфу.
PROCESSOR_ARCHITECTURE_AMD64 = 9; PROCESSOR_ARCHITECTURE_IA64 = 6; Для проверки что 32-бит программа выполяется под 64-бит ОС МicroSoft рекомендует юзать IsWow64Process
Спасибо всем. Думаю ProcessorArchitecture то что надо.. Но у себя в windows.inc нашел еще и PROCESSOR_ARCHITECTURE_ALPHA64 equ 7 Надеюсь кроме этих 3х больще нет 64-битных констант
#define PROCESSOR_ARCHITECTURE_INTEL 0 #define PROCESSOR_ARCHITECTURE_MIPS 1 #define PROCESSOR_ARCHITECTURE_ALPHA 2 #define PROCESSOR_ARCHITECTURE_PPC 3 #define PROCESSOR_ARCHITECTURE_SHX 4 #define PROCESSOR_ARCHITECTURE_ARM 5 #define PROCESSOR_ARCHITECTURE_IA64 6 #define PROCESSOR_ARCHITECTURE_ALPHA64 7 #define PROCESSOR_ARCHITECTURE_MSIL 8 #define PROCESSOR_ARCHITECTURE_AMD64 9 #define PROCESSOR_ARCHITECTURE_IA32_ON_WIN64 10 #define PROCESSOR_ARCHITECTURE_UNKNOWN 0xFFFF
И еще один момент.. ZwQuerySystemInformation вить возвращает данные о процессоре, а мне надо инфо об оси, вить на 64 битный процессор можно 32 битную ось поставить... Это значит что задача еще не решена..
Не совсем так. Например, процессоры x86-64 (AMD64\EM64T) строго говоря не являются "64-битными", т.к. они могут работать как в 32- так и в 64-битном режиме. Поэтому для них под 32-битной ОС будет возвращаться PROCESSOR_ARCHITECTURE_INTEL, а под 64-битной соотв-но PROCESSOR_ARCHITECTURE_AMD64 или PROCESSOR_ARCHITECTURE_IA32_ON_WIN64 PS: PROCESSOR_ARCHITECTURE можно также опредилить по соответсвующей переменной окружения (или через GetEnvirnomentVariable или если "без юзанья апи", то самому "пошукать" в блоке окружения
На ту же тему что сказал dendi - запускать мелкий тестовый exe с установленым в PE Header ofs=4 / 18h (не помню точно второе смещение) значением "64 битный файлег". Если успешна, то...
censored Код (Text): cs ss gs fs es ds 23 2b 2b 53 2b 2b x64, Compatibility Mode 33 2b 2b 53 2b 2b x64, Long Mode 1b 23 00 ** 23 23 x86 Ещё способ - прочитать стабы из ntdll.dll. В 32х-битной ntdll.dll под х64 выглядят так: Код (Text): ZwQuerySystemInformation: mov eax,0x33 xor ecx,ecx ; WOW64_TURBO_SERVICE_TYPE (0 - ServiceNoTurbo, 1f - Wow64ServiceTypesCount) lea edx,[esp+4] call fs:[0xC0] retn 0x10 ZwTerminateJobObject: mov eax,0x174 mov ecx,7 ; WOW64_TURBO_SERVICE_TYPE (0 - ServiceNoTurbo, 1f - Wow64ServiceTypesCount) lea edx,[esp+4] call fs:[0xC0] ; Teb32.WOW32Reserved: pointer to wow64cpu!X86SwitchTo64BitMode retn 8 Кроме того, в 32х-разрядных приложениях под 64х битной виндой Teb32.GdiBatchCount — это указатель на Teb64: dword fs:[f70] == dword gs:[30] (Числа для server2008). Y_Mur Только сначала переключиться в длинный режим нужно... А вот и функция переключения лол: wow64cpu!X86SwitchTo64BitMode: ea373657753300 jmp 0033:75573637
Нет, возращается информация именно об оси. В данном случае PROCESSOR_ARCHITECTURE - это не архитектура физического процессора, а того, под который написана ось.