Application Data in kernel

Тема в разделе "WASM.NT.KERNEL", создана пользователем calidus, 1 июн 2008.

  1. calidus

    calidus Member

    Публикаций:
    0
    Регистрация:
    27 дек 2005
    Сообщения:
    618
    =) мне надо получить папку Application Data в драйвере , она находится именно у текущего пользователя. В вин32 есть апи сразу показывающая полный адрес до нее с именем пользователя. Но в дровине я не знаю как найти его лучше. Подскажите плиз =) Спасиб.
     
  2. 6arrep

    6arrep New Member

    Публикаций:
    0
    Регистрация:
    10 мар 2006
    Сообщения:
    92
    Адрес:
    London
    А в переменных средах?
     
  3. calidus

    calidus Member

    Публикаций:
    0
    Регистрация:
    27 дек 2005
    Сообщения:
    618
    Да именно в переменных =) пользователи везде же разные.
     
  4. 6arrep

    6arrep New Member

    Публикаций:
    0
    Регистрация:
    10 мар 2006
    Сообщения:
    92
    Адрес:
    London
    calidus
    так я и говорю что переменные среды, выставляются ведь по текущему пользователю, причем тут разные?
     
  5. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders
     
  6. calidus

    calidus Member

    Публикаций:
    0
    Регистрация:
    27 дек 2005
    Сообщения:
    618
    n0name
    Спасибо =) тогда я смогу с реестром поработать и найти путь. Как то не подумал.
     
  7. calidus

    calidus Member

    Публикаций:
    0
    Регистрация:
    27 дек 2005
    Сообщения:
    618
    =) Вообщем вот так получилось
    Код (Text):
    1. CCOUNTED_UNICODE_STRING "\\Registry\\User\\Software\\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders", g_usMachineKeyName, 4
    2. CCOUNTED_UNICODE_STRING "AppData", g_usValueName, 4
    3.  
    4.  
    5. QueryValueKey proc
    6.  
    7. local oa:OBJECT_ATTRIBUTES
    8. local hKey:HANDLE
    9. local cb:DWORD
    10. local ppi:PKEY_VALUE_PARTIAL_INFORMATION
    11. local as:ANSI_STRING
    12. local us:UNICODE_STRING
    13.  
    14.     invoke DbgPrint, $CTA0("\nRegistryWorks: *** Opening registry key to read value\n")
    15.  
    16.     InitializeObjectAttributes addr oa, addr g_usMachineKeyName, OBJ_CASE_INSENSITIVE + OBJ_KERNEL_HANDLE, NULL, NULL
    17.     invoke ZwOpenKey, addr hKey, KEY_QUERY_VALUE, addr oa
    18.  
    19.     .if eax == STATUS_SUCCESS
    20.         invoke DbgPrint, $CTA0("RegistryWorks: Registry key openeded\n")
    21.  
    22.         and cb, 0
    23.  
    24.         invoke ZwQueryValueKey, hKey, addr g_usValueName, \
    25.                                 KeyValuePartialInformation, NULL, 0, addr cb
    26.         .if cb != 0
    27.  
    28.             invoke ExAllocatePool, PagedPool, cb
    29.  
    30.             .if eax != NULL
    31.                 mov ppi, eax
    32.  
    33.                 invoke ZwQueryValueKey, hKey, addr g_usValueName, \
    34.                                     KeyValuePartialInformation, ppi, cb, addr cb
    35.                 .if ( eax == STATUS_SUCCESS ) && ( cb != 0 )
    36.  
    37.                     mov eax, ppi
    38.                     .if [KEY_VALUE_PARTIAL_INFORMATION PTR [eax]]._Type == REG_SZ
    39.                         lea eax, (KEY_VALUE_PARTIAL_INFORMATION PTR [eax]).Data
    40.                         invoke RtlInitUnicodeString, addr us, eax
    41.                     .endif
    42.                 .else
    43.                     invoke DbgPrint, \
    44.                             $CTA0("RegistryWorks: Can't query registry key value. Status: %08X\n"), eax
    45.                 .endif
    46.                 invoke ExFreePool, ppi
    47.             .else
    48.                 invoke DbgPrint, $CTA0("RegistryWorks: Can't allocate memory. Status: %08X\n"), eax
    49.             .endif
    50.         .else
    51.             invoke DbgPrint, \
    52.             $CTA0("RegistryWorks: Can't get bytes count needed for key partial information. Status: %08X\n"), eax
    53.         .endif
    54.         invoke ZwClose, hKey
    55.         invoke DbgPrint, $CTA0("RegistryWorks: Registry key handle closed\n")
    56.     .else
    57.         invoke DbgPrint, $CTA0("RegistryWorks: Can't open registry key. Status: %08X\n"), eax
    58.     .endif
    59.  
    60.     ret
    61.  
    62. QueryValueKey endp
    Проблема в том что когда я получу путь до апликатион дата мне надо опять делать CCOUNTED_UNICODE_STRING для пути к апликатион дата + мой путь до программы.Выше идет invoke RtlInitUnicodeString, addr us, eax тут вроде инициализация да ? и я могу просто адрес на стркутруру кинуть вот так , но мне нужно еще добавить путь к данным с реестра а известно что память выделена только на данные с реестра и прибавить еще на знаю как я не смогу . Как быть ???

    Код (Text):
    1. InitializeObjectAttributes addr oa, == тут адрес структуры с адресом апликатион == , OBJ_CASE_INSENSITIVE + OBJ_KERNEL_HANDLE, NULL, NULL