Конфигурация ОС

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

В качестве входного параметра этой функции задаются: указатель на буфер (строку), в которую будет занесен искомый путь и размер этого буфера в символах не включая завершающий эту строку 0. С учетом того, что функция GetWindowsDirectory существует как в Unicode (GetWindowsDirectoryW), так и в ANSI (GetWindowsDirectoryA) форматах, размер символа будет разным - для Unicode он составит 16 бит, для ANSI - 8 бит.

Таким образом, в сегменте данных объявляются необходимые данные

PATH_BUF DB 255 DUP (0); буфер данных для хранения строки с адресом каталога Windows

PATH_LEN DD 255; длина буфера данных для хранения строки с адресом каталога Windows

А в тексте программы вызов функции осуществляется следующим образом:

PUSH PATH_LEN;

PUSH OFFSET PATH_BUF;

CALL GetWindowsDirectoryA@8;

Динамические библиотеки, драйвера и шрифты хранятся в системном каталоге Windows (обычно System32). Определить путь к системному каталогу Windows можно с помощью функции GetSystemDirectory. Данная функция аналогична функции GetWindowsDirectory. Использовать ее можно следующим образом:

Содержимое сегмента данных не изменяется:

PATH_BUF DB 255 DUP (0); буфер данных для хранения строки с адресом систменого каталога Windows

PATH_LEN DD 255; длина буфера данных для хранения строки с адресом системного каталога Windows

А в тексте программы вызов функции осуществляется следующим образом:

PUSH PATH_LEN;

PUSH OFFSET PATH_BUF;

CALL GetSystemDirectoryA@8;

Для определения имени пользователя, в настоящее время работающего с ОС и от имени которого запускается поток, содержащий функцию определения имени пользователя, используется функция GetUserName. Имя пользователя - это либо имя под которым он начал сеанс, либо полное имя пользователя. В качестве входного параметра задается размер строки и указатель на строку, хранящую имя пользователя. Размер строки выражается в символах. В этой же переменной функция возвращает реальное число символов, из которых состоит имя пользователя. Поскольку функция GetUserName может быть использована как в Unicode (GetUserNameW), так и в ANSI (GetUserNameA) версиях, длина строки символов в байтах может представлять собой разные значения. Максимальное число символов, используемое для задания имени пользователя, определено в заголовочном файле Lmcons.h, поставляемом в составе среды проектирования Microsoft Visual Studio, равным 256. Исходя из этого значения и следует задавать максимальную длину имени пользователя.

Таким образом, в сегменте данных объявляются необходимые данные

NAME_BUF DB 255 DUP (0); буфер данных для хранения строки с именем пользователя

NAME_LEN DD 257; длина буфера данных для хранения строки с именем пользователя - максимальный размер (256) +1

А в тексте программы вызов функции осуществляется следующим образом:

PUSH NAME_LEN;

PUSH OFFSET NAME_BUF;

CALL GetUserNameA@8;

В случае успешного выполнения функции GetUserName в буферной строке будет находиться цепочка символов - имя пользователя, в переменной NAME_LEN - число символов, составляющих имя пользователя, включая 0, а в регистре EAX - ненулевое значение. Если функции GetUserName успешно выполниться не удалось (задан слишком маленький буфер или по каким-то другим причинам) то в регистре EAX будет возвращен 0.