На сайте есть ntifs.h - там описание функций библиотеки ntdll.dll. ЮЗАЙ FASM! Еще NtQueryInformationToken~advapi32.GetTokenInformation
Ай, опоздал. Под масм не сложно переделать. Подключай advapi32. Там есть аналог ConvertSidToStringSid(sid,ppSidResult) Второй параметр указывает на переменную, которая получит адрес строки.
Получается, примерно, следующее. LOCAL hTokenWORD LOCAL tu_sizeWORD LOCAL stringWORD invoke GetCurrentProcess invoke OpenProcessToken,eax,TOKEN_QUERY,hToken invoke GetTokenInformation,hToken,TokenUser,0,0,addr tu_size invoke ConvertSidToStringSid,TokenUser,addr string Ошибок не выдаёт. Но и нужной строки тоже не выдаёт. Как правильно?
OpenProcessTojen,..., ADDR hToken Потом именно два вызова GetTokenInformation: после первого получаем количество байтов под структуру USER_TOKEN, заполняемую вторым вызовом В вызове ...Convert... первый параметр- TOKEN_USER.User.Sid Адрес в примере на эту структуру в edi
Адрес ессно после первого выделения памяти ---- Добей задачу до конца-с Token часто прийдется работать, например для вырубания компа
vg 1) Последний параметр OpenProcessToken - указатель на HANDLE, который потом надо CloseHandle; 2) третий параметр GetTokenInformation - указатель на область памяти в которую будет заполнена структура TOKEN_USER; 3) четвертый параметр GetTokenInformation - размер области памяти адрес которой передан в третьем параметре; 4) не понятно что ты передаешь в качестве первого параметра в ConvertSidToStringSid. Как правильно? Примерно так Код (Text): local hToken : dword; local buf[1024] : byte; local string : dword local tu_size : dword invoke GetCurrentProcess mov ecx,eax mov hToken,0 invoke OpenProcessToken, ecx, TOKEN_QUERY, addr hToken or eax,eax jz error invoke GetTokenInformation, hToken, TokenUser, addr buf, 1024, addr tu_size or eax,eax jz error mov ecx,dword ptr buf mov string,0 invoke ConvertSidToStringSid, ecx, addr string or eax,eax jz error cmp string,0 jz error invoke MessageBox, 0, string, 0, 0 invoke LocalFree, string ... error: cmp hToken,0 jz @F invoke CloseHandle, hToken @@: ps Imho зря копаешь в эту сторону. Этот метод не даст название основой папки.
q_q Хе-хе. Да, кстати. Просто по привычке win32wxp подключаю А что значит "не даст название основной папки"? У меня все работает нормально
dr_dred А что значит "не даст название основной папки"? Заголовок темы - "путь к корзине Windows". Ты подсказал как найти имя _подпапки_. Afaik на FAT32 в корзине разделения по подпапкам пользователей нет.
В ниже следующем коде MessageBox №1 показывает правильную строку, а после её присоединения к строке text в MessageBox №2 появляются text+какие-то каракули. Как исправить? invoke GetCurrentProcess mov ecx,eax mov hToken,0 invoke OpenProcessToken, ecx, TOKEN_QUERY, addr hToken or eax,eax jz error invoke GetTokenInformation, hToken, TokenUser, addr buf, 1024, addr tu_size or eax,eax jz error mov ecx,dword ptr buf mov string,0 invoke ConvertSidToStringSid, ecx, addr string or eax,eax jz error cmp string,0 jz error invoke MessageBox,0,string,0,0 ;№1 invoke LocalFree,string error: invoke CloseHandle, hToken invoke lstrcat,addr text,addr string invoke lstrlen,text invoke MessageBox,0,addr text,0,0 ;№2
vg 1) переменная string содержит адрес строки, а не строку, поэтому в lstrcat надо передавать string, а не addr string; 2) после MessageBox №1 используется LocalFree, поэтому дальнейшее обращение к string не корректны.
Я не понял, вы что хотите найти путь к корзине с помощю WASM или какимито другими сложными путями? если вам подойдёт простейший способ найти путь к корзине то могу поделится советом, я по русски плохо пишу, но надеюсь вы поймёте =) я делал это в ХР, там в контроль панели есть "настройки папки или свойства папки", там вроде есть вкладка "вид" или что то в этом роде, там где много галочек =) Так вот, попробуйте: 1. УБРАТЬ галочку с "спрятать защищёные файлы оперативной системы" 2. ПОСТАВИТЬ галочку на "показывать содержимое системных папок" 3. проверить можно ли дойти до корзины через explorer примерно по такому пути: D:\RECYCLER\S-1-5-21-796845957-1417001333-1177238915-500 я не знаю что такое WASM поэтому зарание прошу прощение за флуд если недoпонял вопрос темы и за мой русский =) всем щастъя!