=) мне надо получить папку Application Data в драйвере , она находится именно у текущего пользователя. В вин32 есть апи сразу показывающая полный адрес до нее с именем пользователя. Но в дровине я не знаю как найти его лучше. Подскажите плиз =) Спасиб.
calidus так я и говорю что переменные среды, выставляются ведь по текущему пользователю, причем тут разные?
=) Вообщем вот так получилось Код (Text): CCOUNTED_UNICODE_STRING "\\Registry\\User\\Software\\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders", g_usMachineKeyName, 4 CCOUNTED_UNICODE_STRING "AppData", g_usValueName, 4 QueryValueKey proc local oa:OBJECT_ATTRIBUTES local hKey:HANDLE local cb:DWORD local ppi:PKEY_VALUE_PARTIAL_INFORMATION local as:ANSI_STRING local us:UNICODE_STRING invoke DbgPrint, $CTA0("\nRegistryWorks: *** Opening registry key to read value\n") InitializeObjectAttributes addr oa, addr g_usMachineKeyName, OBJ_CASE_INSENSITIVE + OBJ_KERNEL_HANDLE, NULL, NULL invoke ZwOpenKey, addr hKey, KEY_QUERY_VALUE, addr oa .if eax == STATUS_SUCCESS invoke DbgPrint, $CTA0("RegistryWorks: Registry key openeded\n") and cb, 0 invoke ZwQueryValueKey, hKey, addr g_usValueName, \ KeyValuePartialInformation, NULL, 0, addr cb .if cb != 0 invoke ExAllocatePool, PagedPool, cb .if eax != NULL mov ppi, eax invoke ZwQueryValueKey, hKey, addr g_usValueName, \ KeyValuePartialInformation, ppi, cb, addr cb .if ( eax == STATUS_SUCCESS ) && ( cb != 0 ) mov eax, ppi .if [KEY_VALUE_PARTIAL_INFORMATION PTR [eax]]._Type == REG_SZ lea eax, (KEY_VALUE_PARTIAL_INFORMATION PTR [eax]).Data invoke RtlInitUnicodeString, addr us, eax .endif .else invoke DbgPrint, \ $CTA0("RegistryWorks: Can't query registry key value. Status: %08X\n"), eax .endif invoke ExFreePool, ppi .else invoke DbgPrint, $CTA0("RegistryWorks: Can't allocate memory. Status: %08X\n"), eax .endif .else invoke DbgPrint, \ $CTA0("RegistryWorks: Can't get bytes count needed for key partial information. Status: %08X\n"), eax .endif invoke ZwClose, hKey invoke DbgPrint, $CTA0("RegistryWorks: Registry key handle closed\n") .else invoke DbgPrint, $CTA0("RegistryWorks: Can't open registry key. Status: %08X\n"), eax .endif ret QueryValueKey endp Проблема в том что когда я получу путь до апликатион дата мне надо опять делать CCOUNTED_UNICODE_STRING для пути к апликатион дата + мой путь до программы.Выше идет invoke RtlInitUnicodeString, addr us, eax тут вроде инициализация да ? и я могу просто адрес на стркутруру кинуть вот так , но мне нужно еще добавить путь к данным с реестра а известно что память выделена только на данные с реестра и прибавить еще на знаю как я не смогу . Как быть ??? Код (Text): InitializeObjectAttributes addr oa, == тут адрес структуры с адресом апликатион == , OBJ_CASE_INSENSITIVE + OBJ_KERNEL_HANDLE, NULL, NULL