Системная информация. Информация о среде выполнения процесса, страница 8

Определение структуры SYSTEMJNFO

typedef struct _SYSTEM_INFO {

WORD      wProcessorArchitecture;

WORD       wReserved;

DWORD    dwPageSi ze;

LPVOID  IpMinimumApplicationAddress;

LPVOID  IpMaximumApplicationAddress;

DWORD_PTR    dwActiveProcessorMask;

DWORD    dwNumberOfProcessors;

DWORD    dwProces sorType;

DWORD    dwAllocationGranularity;

WORD    wProcessorLevel;

WORD wProcessorRevision; } SYSTEM_INFO, *LPSYSTEM_INPO;

Члены структуры SYSTEMJNFO

wProcessorArchitecture

WORD: Архитектура системного процессора. В Windows 2000 и Windows 98 этот член будет принимать значение PROCESSOR_ARCHITECTURE_INTEL для машин Intel. Кроме того, в Windows 2000 этот член может принимать значения PROCESSOR_ARCHITECTURE_MIPS, PROCESSOR_ARCHITECTURE_ALPHA,

PROCESSOR ARCHITECTURE_PPC или PROCESSOR_ARCHITECTURE_UNKNOWN

 

wReserved

WORD: Зарезервировано.

 

dwPageSize

DWORD: Размер страницы и уровень детализации, используемый для защиты и блокирования страницы. Этот размер страницы используется в функции VirtualAlloc.

 

IpMinimumApplicationAddress

 

LPVOID: Указатель на младший адрес памяти, доступный для приложений и библиотек DLL.

 

IpMaximumApplicationAddress

 

LPVOID: Указатель на старший адрес памяти, доступный для приложений и библиотек DLL.

 

dwActiveProcessorMask

 

DWORD: Маска, представляющая набор процессоров, сконфигурированных для данной системы. При этом разряд 0 соответствует первому процессору, а разряд 31— 31-му процессору.

 

dwNumberOfProcessors

 

DWORD: Количество процессоров в системе.

 

dwProcessorType

DWORD: В Windows 9.x этот член представляет собой тип процессора, используемого в системе. А в Windows 2000 этот член уже утратил свое значение. Вместо него для определения типа процессора следует использовать члены wProcessorAcrchitecture, wProcessorLevel и wProcessorRevision. В Windows 9.x используются следующие значения: PROCESSOR_INTEL_386, PROCESSOR INTEL_486 и PROCESSOR_INTEL_PENTIUM.

 

dwAlbcationGranularity

 

DWORD: Уровень детализации, используемый при распределении виртуальной памяти. Например, если при вызове функции VirtualAlloc запрашивается 1 байт, в результате фактически резервируется адресное пространство dwAllocationGranularity байт.

 

wProcessorLevel

WORD: В Windows 2000 этот член определяет уровень системы в зависимости от архитектуры используемого процессора. Возможные значения члена wProcessorLevel приводятся в табл. 21.5.

 

wProcessorRevision

 

WORD: В Windows 2000 этот член определяет модификацию процессора в зависимости от используемой архитектуры. В табл. 21.6 показано, каким образом значение модификации компонуется для каждого типа архитектуры процессора.

 

Таблица 21.5 Значения члена wProcessorLevel структуры SYSTEM INFO

 

Значение

Это означает

 

PROCESSOR_ARCHITECTURE_INTEL

 

3

Intel 80386

 

4

Intel 80486

 

5

Intel Pentium

 

Значение

Это означает

 

6

Intel Pentium Pro или  Pentium III

 

PROCESSOR_ARCHITECTURE_MIPS

Число в виде ООхх, где хх - это 8-разрядный номер реализации

 

0004

MIPS R4000

 

PROCESSOR_ARCHITECTURE_ALPHA

Число в виде  хххх, где  хххх — это  16-разрядный номер версии процессора

 

21064

Alpha 21064

 

21066

Alpha 21066

 

21164

Alpha 21164

 

PROCESSOR_ARCHITECTURE_PPC

Число в виде  хххх, где хххх — это  16-разрядный номер версии процессора

 

1

РРС 601

 

2

РРС 603

 

4

РРС 604

 

6

РРС 603+

 

9

РРС 604+

 

20

РРС 620

 

Таблица 21.6 Значение члена wProcessorRevision структуры SYSTEM INFO

 

Архитектура процессора

Значение

 

Intel 80386 или 80486

Значение в виде xxyz. Если хх равно OxFF, тогда у равно  ОхА и обозначает номер модели, a z — это идентификатор ступени. Например, система с процессором Intel 80486-DO возвращает значение OxFFDO. Если хх не равно OxFF, тогда хх+'А' — это буква следующей ступени модификации, a yz — более мелкая ступень модификации

 

Intel Pentium, Cyrex или NextGen 586

Значение в виде ххуу, где хх — это номер модели, а уу — это ступень модификации

 

MIPS

Значение в форме ООхх, где хх — это 8-разрядный номер модификации процессора

 

ALPHA

Значение в виде ххуу,  где ххуу — это младшие 16 разрядов номера модификации процессора, которые предоставляются встроенным программным обеспечением процессора. Это значение обычно отображается в следующем виде: Model 'A' + хх, Pass уу, где Model — это модель, a Pass — это модификация

 

PPC

Значение в виде  ххуу,  где ххуу — это младшие 16 разрядов номера модификации процессора в регистре версии процессора (Processor Version Register). Это значение обычно отображается в формате с фиксированной точкой (хх.уу)

 

GetSystemPowerStatus                  • Windows 98   • Windows 2000

 

Описание

Функция GetSystemPowerStatus сообщает состояние энергоснабжения системы. Эту функцию можно использовать для определения вероятности прекращения подачи питания в случае, когда компьютер подключен

 

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

 

Синтаксис

BOOLGetSystemPowerStatus(LPSYSTEM_POWER_STATUS IpSystemPowerStatus)

 

Параметры

 

IpSystemPowerStatus

 

LPSYSTEM_POWER_STATUS: Указатель на структуру SYSTEM_POWER_STATUS, в которую поступает состояние энергоснабжения системы. Определение структуры SYSTEM_POWER_STATUS показано ниже.

 

Возвращаемое значение

BOOL: Если выполнение функции оказывается успешным, возвращается значение TRUE. В противном случае возвращается значение FALSE.

 

Включаемый файл

winbase.h, pbt.h (для событий, связанных с сообщениями)

 

См. также

SetSystemPowerState.

 

Сообщения, связанные с данной функцией

 

WM_POWERBROADCAST

 

Пример

В приведенном ниже примере функция GetSystemPowerStatus используется для запроса системы при уведомлении о понижении питания.  Когда пользователь выбирает пункт меню Test!, функция SetSystemPowerState используется для проверки работоспособности системы.

 

См.    \local-sources\chap21\21-12. txt

 

Определение структуры SYSTEM_POWER_STATUS

typedef struct    SYSTEM POWER STATUS {

BYTE       ACLineStatus ;

BYTE       BatteryFlag;

BYTE      Battery LifePercent;

BYTE       Reserved! ;

DWORD    BatteryLif eTime ;

DWORD    BatteryFullLif eTime; }    SYSTEM_POWER_STATUS ,    *LPSYSTEM_PO«ER_STATUS ;

 

Члены структуры SYSTEM_POWER_STATUS

 

ACLineStatus

BYTE: Состояние питания системы от электросети переменного тока. Если для данного члена установлено значение 0, питание от электросети отключено. Если же установлено значение 1, тогда питание от электросети подключено. Значение 255 указывает на неизвестное состояние.

 

Battery flag

BYTE: Состояние зарядки аккумуляторной батареи. Значение 1 данного члена указывает на состояние полной зарядки. Значение 2 указывает на состояние слабой зарядки, значение 4 — на состояние критической зарядки, а значение 8 — на состояние подзарядки системной аккумуляторной батареи. Если аккумуляторная батарея в системе отсутствует, устанавливается значение 128, а иначе для указания неизвестного состояния — значение 255.

 

BatteryLifePercent

 

BYTE: Остаточный заряд аккумуляторной батареи в процентах. Этот член может принимать значение в пределах от 0 до 100. Если же установлено его значение 255, это указывает на неизвестное состояние.

 

Reservedl

BYTE: Зарезервировано. Для этого члена устанавливается значение 0.

 

BatteryLifeTinn

•   DWORD: Количество секунд оставшегося срока службы аккумуляторной батареи либо значение OxFFFFFFFF, если указанное число секунд неизвестно.

 

BatteryJFullLifelime

 

BYTE: Количество секунд, определяющее срок службы аккумуляторной батареи при полной ее зарядке либо значение OxFFFFFFFF, если полный срок службы батареи неизвестен.

 

GetSystemTime                           • Windows 98   • Windows 2000

 

Описание

Функция   GetSystemTime осуществляет выборку данных их структуры SYSTEMTIME, в которой время сообщается в виде среднего времени по Гринвичу в формате UTC (Universal Time Coordinated — Универсальное синхронизированное время).

 

Синтаксис

VOID GetSystemTime(LPSYSTEMTIME Ipst)

 

Параметры

 

Ipst

LPSYSTEMTIME: Указатель на структуру SYSTEMTIME, в которую поступает текущее системное время. Описание структуры SYSTEMTIME приводится ниже.

 

Включаемый файл

winbase.h

 

См. также

SetLocalTime, GetLocalTime.

 

Пример

См. пример применения функции GetLocatTbHe.

 

Определений структуры SYSTEMTIME

typedef struct    SYSTEMTIME {

WORD wYear;

WORD wMonth;

WORD WDayOfWeek;

WORD wDay;

WORD wHour;

WORD wMinute;

WORD wSecond;

WORD wMilliseconds; }    SYSTEMTIME ;

 

Члены структуры SYSTEMTIME

 

wYear

WORD: Текущий год.

 

wMonth

WORD: Текущий месяц. Значение 1 соответствует январю, 2 — февралю и т.д.

 

wDayOfWeek

WORD: Текущий день недели. Значение 0 соответствует воскресенью, значение 1 — понедельнику и т.д.

 

wDay

WORD: Текущий день месяца.

 

wHour

WORD: Текущий час.

 

wMinute

WORD: Текущая минута.

 

wSecond

WORD: Текущая секунда.

 

wMilliseconds

WORD: Текущая миллисекунда.

 

GetSvstemWindowsDirectory            * Windows 98   + Windows 2000

 

Описание

Функция GetSystemWindowsDirectory осуществляет выборку пути к общему каталогу Windows в многопользовательской системе. В системном каталоге Windows должны храниться файлы инициализации и справки конкретного приложения, доступ к которым распространяется на всех пользователей.

 

Синтаксис

UINT GetSystemWindowsDirectory(LPTSTR IpszSysPath, UINT uSysPathCount)

 

Параметры

 

IpszSysPath

LPTSTR Указатель на буфер, в который поступает имя системного каталога Windows. В связи с тем что имя системного каталога может оказаться длиной МАХ_РАТН символов, в данном случае, возможно, потребуется размер буфера МАХ_РАТН+1 символов.

 

uSysPathCount

UINT: Размер в символах, определяемый значением TCHAR и указываемый для буфера, в который поступает имя системного каталога Windows.

 

Возвращаемое значение

UINT: Если выполнение рассматриваемой функции оказывается успешным, возвращается количество символов, записанных в буфер, за исключением нулевого. В противном случае возвращается 0. Если же рассматриваемая функция не может завершиться успешно вследствие того, что буфер оказался недостаточно велик, возвращаемое значение указывает, сколько байтов необходимо для сохранения имени системного каталога Windows. В это значение входит один нулевой символ, который завершает строку. Чтобы определить, указывает ли возвращаемое значение на упомянутое выше условие либо на успешное выполнение данной функции, следует прибегнуть к функции GetLastError.

 

Включаемый файл

winbase.h

 

См. также

GetWindowsDirectory

 

Пример

См. пример применения функции GetWindowsDirectory.

 

GetTimeZonelnformation                 «• Windows 98   + Windows 2000

 

Описание

Функция GetTimeZonelnformation осуществляет выборку данных из структуры TIME_ZONE_INFORMATION, которая описывает конкретный временной пояс.   В  эту структуру  входят также две структуры типа SYSTEMTIME, в которых определяется время начала и завершения периода летнего времени, а также различные сдвиги во времени, позволяющие изменить системное время на местное. Даты начала летнего и обычного (зимнего) времени могут быть указаны в приложении в виде абсолютных или относительных дат. При указании абсолютного времени устанавливается точный день и месяц года. Например, для указания момента перехода на зимнее время в 1 час ночи 28 октября 1995 следует установить значение 10 члена wMonth, значение 28 члена wDay, значение 1995 члена wYear и значение 1 члена wHour указанной структуры. С помощью относительной даты упомянутый момент перехода на зимнее время определяется в приложении в третий четверг октября за счет установки значения 4 (четверг) члена wDayO/Week, значения 10 члена wMonth (октябрь) и значения 3 члена wDay (третий четверг) указанной структуры. При установке значения 5 члена \vDay указывается последнее появление конкретного дня недели wDayOjWeek в месяце. Например, для определения последнего четверга ноября следует установить значение 4 (четверг) члена wDayOJWeek, значение 1 1 члена wMonth и значение 5 члена wDay.

 

Синтаксис

DWORD GetTimeZoneInformation(LPTIME_ZONE_INFORMATION Iptzi)

 

Параметры

 

Iptzi

LPTIME_ZONE_INFORMATION: Указатель на структуру TIME_ZONE_INFORMATION, в которую поступают данные об указанном временном поясе. Определение структуры TIME_ZONE_INFORMATION приведено ниже.

 

Возвращаемое значение

Если возвращается значение TIME_ZONE_ID_UNKNOWN, это означает, что Windows не может обнаружить текущую временную зону. Подобное может произойти в случае, когда в результате' вызова функции SetTiraeZonelnformation структура TIME_ZONE_INFORMATION не содержит даты перехода на летнее или зимнее время. Возвращаемое значение TIME_ZONE_ID_STANDARD означает следующее: Windows обнаружила, что в данном временном поясе установлено обычное (зимнее) время. Значение TIME_ZONE_ID_DAYLIGHT указывает на то, что Windows обнаружила, что в данном временном поясе установлено летнее время. Если же возвращается значение Ох^'И'КИ'К!1', тогда для определения причины ошибки потребуется воспользоваться функцией GetLastError.

 

Включаемый файл

winbase.h

 

См. также

SetTimeZonelnformation, GetLocalTime .

 

Пример

В приведенном ниже примере показано, как изменять информацию о временном поясе. Когда пользователь выбирает пункт меню Test!, в окне сообщения появляется сдвиг во времени, который прибавляется или вычитается из среднего времени по Гринвичу для получения местного времени, после чего к этому сдвигу прибавляется еще один час. По завершении данного примера информация о данном временном поясе восстанавливается. (Следует заметить, что при изменении данных временного пояса изменяется системное, но не местное время!)

 

См.    \local-sources\chap21\21-13.txt

 

Определение структуры TIME_ZONE_INFORMATION

 

typedef struct _TIME ZONE INFORMATION {

LONG                Bias ;

TCHAR              StandardName[32] ;

SYSTEMTIME StandardDate;

LONG                StandardBias ;

TCHAR              DaylightName [32] ;

SYSTEMTIME DaylightDate;

LONG                DaylightBias ; }    TIME_ZONE INFORMATION,   *TIME ZONE INFORMATION;

 

Члены структуры TIME_ZONE_INFORMATION

 

Bias

LONG: Текущий сдвиг во времени (в минутах) для перехода на местное время на данном компьютере. Этот сдвиг во времени представляет собой разность (в минутах) между временем UTC и местным временем. Все преобразования времени UTC в местное осуществляются по следующей формуле: UTC = Местное время + Сдвиг во времени.

 

Standard Date

SYSTEMTIME: Структура SYSTEMTIME, которая содержит дату и время в формате UTC, определяющие момент перехода с летнего на зимнее время в данной операционной системе. Если упомянутая выше дата не указана, должно быть установлено значение   0 члена   wMonth структуры SYSTEMTIME. А если эта дата указана, должно быть указано соответствующее значение члена DayLightDate рассматриваемой структуры. Переход на местное время в период действия обычного (зимнего времени) осуществляется относительно значения, предоставляемого членом StandardBias. Определение структуры SYSTEMTIME приводится при в описании функции GetSytemTime.

 

StandardBias

LONG: Величина сдвига во времени, используемого при перехода на местное в время в период действия обычного (зимнего) времени. Значение этого члена игнорируется в случае, если не предоставляется значение StandardDate. Для образования сдвига во времени, используемого в период действия обычного (зимнего) времени, указанное значение прибавляется к значению члена Bias. В большинстве временных поясов значение данного члена равно 0.

 

DaylightName

ТСНАЩ32]: Строка, завершающаяся нулевым символом и связанная с летним временем, установленным в конкретной операционной системе. Для указания центрального летнего времени данный член может иметь значение "CDT".

 

DaylightDate

SYSTEMTIME: Этот член аналогичен члену StandardDate, за исключением того что он содержит дату и время в формате UTC перехода с зимнего на летнее время в данной операционной системе.

 

DaylighBias

LONG: Величина сдвига во времени, используемого при переходе на местное время в период действия летнего времени. Этот член игнорируется, если не задано значение члена DaylightDate. Для образования сдвига во времени, используемого в период действия летнего времени, указанное значение прибавляется к значению члена Bias. В большинстве временных поясов значение данного члена равно -60.

 

GetUserDefaultLangID                    • Windows 98   • Windows 2000

 

Описание

Функция GetUserDefaultLangID возвращает идентификатор языка (LANGID), характерный для используемой по умолчанию региональной установки текущего пользователя.

 

Синтаксис

LANGID GetUserDefaultLanglD(VOID)

 

Параметры

Параметры отсутствуют.

 

Возвращаемое значение

LANGID: Идентификатор языка для используемой по умолчанию региональной установки текущего пользователя.

 

Включаемый файл

winbase.h

 

См. также Пример

GetThreadLocale, SetThreadLocale, VerLanguageName, GetUserDefaultLCID.См. пример применения функции GetSystemDefaultLanglD.

 

GetUserDefaultLCID                      • Windows 98   •  Windows 2000

 

Описание

Функция GetUserDefaultLCID возвращает идентификатор региональной установки (LCID) для используемой по умолчанию региональной установки текущего пользователя. Если в результате вызова функции SetThreadLocale не задана региональная установка нити, текущей становится указанная выше региональная установка.

 

Синтаксис

LCID GetUserDefaultLCID(VOlD)

 

Параметры

Параметры отсутствуют.

 

Возвращаемое значение

LCID: Идентификатор (LCID) используемой по умолчанию региональнойустановки текущего пользователя.

 

Включаемый файл

winbase.h

 

См. также

GetSystemDefaultLCID, SetThreadLocale, GetThreadLocale.

 

Пример      :

См. пример применения функции GetSystemDefaultLanglD.

 

GetUserName                             • Windows 98   • Windows 2000

 

Описание

Функция GetUserName возвращает имя пользователя текущей нити, зарегистрированного в данный момент в системе. Если текущая нить заимствует права другого клиента, функция GetUserName возвращает имя пользователя клиента, права которого заимствованы данной нитью.

 

Синтаксис

BOOL GetUserName(LPTSTR IpBuffer, LPDWORD IpdwSize)

 

Параметры

 

IpBuffer

LPTSTR: Указатель на буфер,*в который поступает строка, завершающаяся нулевым символом и содержащая регистрационное имя пользователя. Если буфер оказывается недостаточно велик для хранения всего имени пользователя, функция не сможет быть выполнена.

 

IpdwSize

LPDWORD: Указатель на переменную типа DWORD, определяющую при вводе значение типа TCHAR, задающее максимальный размер (в символах) буфера, на который указывает параметр IpBuffer. Если буфер оказывается недостаточно велик для хранения всего имени пользователя, функция не сможет быть выполнена. В случае успешного выполнения рассматриваемой функции данный параметр принимает количество символов, скопированных в буфер и определяемых значением типа TCHAR.

 

Возвращаемое значение

BOOL: Если выполнение рассматриваемой функции оказывается успешным, . возвращается значение TRUE, а переменная, на которую указывает параметр IpdwSize, будет содержать число символов, скопированных в буфер, определяемый параметром IpBuffer. В это число не входит завершающий нулевой символ. Если же функция не завершается успешно, возвращается значение   FALSE. Для получения более подробной информации об ошибке следует прибегнуть к функции GetLastError.

 

Включаемый файл.

winbase.h

 

См. также

GetUserNameEx, GetComputerName.

 

Пример

Когда пользователь выбирает в приведенном ниже примере пункт меню Test!, отображается его имя.

 

См.    \local-sources\chap21\21-14.txt

 

GetUserNameEx                          • Windows 98   • Windows 2000

 

Описание

Функция GetUserNameEx возвращает имя пользователя текущей нити в указанном формате. Если текущая нить заимствует права другого клиента, тогда функция GetUserNameEx возвращает имя пользователя клиента, права которого заимствованы данной нитью.

 

Синтаксис

BOOL GetUserNameEx (EXTENDED NAME FORMAT NameFormat, LPTSTR IpBuffer, PULONG puSize)

 

Параметры

 

NameFormat

EXTENDED_NAME_FORMAT: Перечисляемые значения из табл. 21.7.

 

IpBuffer

LPTSTR Указатель на буфер, в который поступает строка, завершающаяся нулевым символом и содержащая регистрационное имя пользователя. Если буфер оказывается недостаточно велик для хранения всего имени пользователя, рассматриваемая функция не сможет быть выполнена.

 

Таблица 21.7 Значения перечисляемого типа EXTENDED_NAME_FORMAT

 

Значение

Что означает

 

NameUknown

Имя неизвестного типа

 

NameFullyQualifiedDN

Полностью уточненное отличительное имя. Например,   CN=Richard Simon, OU=Users, DC=Development, DC=Somewhere, DC=Com

 

NameSamCompatible

Учетное имя пользователя в Windows 2000. Например, Development\RSimon. При указании в учетном имени только одного домена это имя завершается двумя обратными косыми чертами (\\)

 

NameDisplay

Имя, отображаемое в читабельном виде, например, Richard Simon. Отображаемое имя отнюдь не обязательно должно определять относительное отличительное имя   (RDN)

 

Namellniqueld

Строка глобального уникального идентификатора (GUID), которую возвращает функция IIDFromString, например, {4fa50fO-f 561-1 1cf-bdd9-ООаООЗа77Ь6}

 

NameCanonical

Полное каноническое имя. Например,   development.somewhere.com/ software/someone. При указании в каноническом имени только одного домена это имя завершается косой чертой (/)

 

NameUserPrincipal

Основное имя пользователя. Например, someone@development.somewhere.com

 

NameCanonicalEx

То же, что и каноническое имя, за исключением того, что крайняя справа косая черта в данном случае заменяется символом новой строки (\п) даже при указании только одного домена. Например, development, somewhere. com/software\nsomeone

 

NameServicePrincipal

Обобщенное основное имя службы. Например, www/ www. somewhere, com@somewhere.com

 

puSize

PULONG: Указатель на переменную типа ULONG, определяющую при вводе значение типа TCHAR, обозначающее максимальный размер (в сим-