Получить полный путь до appdata
Мне нужно узнать путь к папке %appdata%, и записать этот путь в регистр, и использовать данный регистр в коде.
Примерный мой код (использую winapi):
global start
extern SHGetSpecialFolderPathA ; https://docs.microsoft.com/en-us/windows/win32/api/shlobj_core/nf-shlobj_core-shgetspecialfolderpatha
section .data
CSIDL_LOCAL_APPDATA equ 001ch
section .text
start:
push 0
push CSIDL_LOCAL_APPDATA
push 0
push 0
call [SHGetSpecialFolderPathA]
Ответы (1 шт):
Первое что нужно сделать - посмотреть документацию: SHGetSpecialFolderPathA function (shlobj_core.h). В документации написано, что в параметре pszPath нужно передать указатель на буфер (адрес буфера) размером минимум MAX_PATH символов, куда будет записан путь:
pszPath
Type: LPTSTR
A pointer to a null-terminated string that receives the drive and path of the specified folder. This buffer must be at least MAX_PATH characters in size.
global start
extern SHGetSpecialFolderPathA ; https://docs.microsoft.com/en-us/windows/win32/api/shlobj_core/nf-shlobj_core-shgetspecialfolderpatha
section .data
CSIDL_LOCAL_APPDATA equ 001ch
MAX_PATH equ 260
buffer times MAX_PATH db 0
section .text
start:
push 0
push CSIDL_LOCAL_APPDATA
push buffer
push 0
call [SHGetSpecialFolderPathA]
; После выполнения в буфере buffer будет путь
Результат в отладчике:
Также в документации функция SHGetSpecialFolderPathA помечена как неподдерживаемая, вместо нее нужно использовать SHGetFolderPathA (которая тоже deprecated, вместо нее нужно использовать SHGetKnownFolderPath, но мне не удалось получить рабочий результат с помощью этой функции (aka. "ниасилил"), поэтому ниже пример с SHGetFolderPathA):
global start
extern SHGetFolderPathA
section .data
CSIDL_LOCAL_APPDATA equ 001ch
MAX_PATH equ 260
buffer times MAX_PATH db 0
section .text
start:
push buffer
push 0
push 0
push CSIDL_LOCAL_APPDATA
push 0
call [SHGetFolderPathA]
; После выполнения в буфере buffer будет путь
