Функция GetSystemInfo(…) позволяет получить различную информацию о работе операционной системы, в том числе и по работе с памятью. Эта функция принимает по ссылке один параметр типа TSystemInfo и заполняет его соответствующими значениями. Запись TsystemInfo определяется следующим описанием:
typedef struct_SYSTEM_INFO { // sinf
union {
DWORD dwOemId;
struct {
WORD wProcessorArchitecture;
WORD wReserved;
};
};
DWORD dwPageSize;
LPVOID lpMinimumApplicationAddress;
LPVOID lpMaximumApplicationAddress;
DWORD dwActiveProcessorMask;
DWORD dwNumberOfProcessors;
DWORD dwProcessorType;
DWORD dwAllocationGranularity;
WORD wProcessorLevel;
WORD wProcessorRevision;
} SYSTEM_INFO;
Поле dwOemld используется для Windows 95. Это поле всегда устанавливается равным нулю или значению PROCESSOR_ARCHITECTURE_INTEL.
Под управлением Windows NT используется поле wProcessorArchitecture, которое описывает тип архитектуры используемого процессора. В этом поле может храниться одно из следующих значений:
PROCESSOR_ARCHITECTURE_INTEL;
PROCESSOR_ARCHITECTURE_MIPS;
PROCESSOR_ARCHITECTURE_ALPHA;
PROCESSOR_ARCHITECTURE_PPC.
Поле wReserved не используется.
Поле dwPageSize содержит размер страницы в килобайтах и определяет степень разбиения при защите и фиксации страниц. Например, на компьютерах Intel x86 это значение равно 4 Кб.
В поле lpMinimumApplicationAddress хранится самый младший адрес памяти, доступный для приложений и DLL. Попытка получить доступ к адресу памяти ниже этого значения приведет, вероятнее всего, к нарушению прав доступа.
Поле lpMaximumApplicationAddress содержит самый старший адрес памяти, доступный для приложений и DLL.
Поле dwActiveProcessorMask возвращает маску, представляющую набор процессоров, сконфигурированных в системе. Бит 0 представляет первый процессор, а бит 31 – 32-й. Поскольку Windows 95/98 поддерживает только один процессор, то в данном случае устанавливается лишь бит 0.
Поле dwNumberOfProcessor также возвращает количество процессоров в системе.
Поле dwProcessorType в настоящее время неактуально. Оно составлено для обратной совместимости. Это поле может иметь одно из следующих значений:
PROCESSOR_INTEL_386;
PROCESSOR_INTEL_486;
PROCESSOR_INTEL_PENTIUM;
PROCESSOR_MIPS_R4000;
PROCESSOR_ALPHA_21064.
Под управлением Windows 95/98 возможно только значение PROCESSOR_INTEL_x, в то время как под управлением Windows NT, 2000, XP допустимы все значения.
Поле dwAllocationGranularity возвращает степень разбиения, которая учитывается при распределении памяти. В Windows 95/98 этот параметр имеет фиксированное значение 64 Кб.
Поле wProcessorLevel определяет уровень процессора, зависящий от архитектуры системы. Для процессоров ряда Intel этот параметр может принимать любое из перечисленных ниже значений:
Поле wProcessorRevision определяет модификацию процессора, зависящую от архитектуры системы. Подобно полю wProcessorLevel, оно может содержать различные значения для разных процессоров. Для архитектур Intel в этом поле будет записано число в формате xxyy. Для процессоров 386, 486 ряда Intel запись xx + $OA означает уровень модификации, а yy – саму модификацию (например, D300 означает микросхему D0).
|