Конфигурация ОС
Инициализационные файлы, файлы помощи и приложения 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.