Как достать полное имя папки System32

Тема в разделе "WASM.NT.KERNEL", создана пользователем Hippey, 12 мар 2012.

  1. Hippey

    Hippey New Member

    Публикаций:
    0
    Регистрация:
    24 окт 2011
    Сообщения:
    49
    Здравствуйте!

    Столкнулся с проблемой, никак не могу решить, эта функция вроде как не работает, не могли бы вы оценить, что тут не так?
    Код (Text):
    1. PCWSTR GetSystemRootAddress()
    2. {
    3.     UNICODE_STRING     uniName;
    4.     UNICODE_STRING     fullName;
    5.     OBJECT_ATTRIBUTES  objAttr;
    6.     HANDLE         sysDirHandle;
    7.     ULONG          length;
    8.  
    9.     RtlInitUnicodeString(&uniName, L"\\SystemRoot");
    10.     RtlInitEmptyUnicodeString(&fullName, NULL, 0);
    11.     InitializeObjectAttributes(&objAttr, &uniName, OBJ_CASE_INSENSITIVE | OBJ_KERNEL_HANDLE, NULL, NULL);
    12.     ZwOpenSymbolicLinkObject( &sysDirHandle, GENERIC_READ, &objAttr );
    13.     ZwQuerySymbolicLinkObject( sysDirHandle, &fullName, &length);
    14.     return fullName.Buffer;
    15. }
    Спасибо!

    Ps проверку статусов удалил для темы, чтобы не мешало
     
  2. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    Первое, что бросается в глаза -- выделение структуры в стеке и возврат ее члена. При выходе из ф-ии члены структуры перетираются другими значениями (не сразу, но вскоре). Надо передавать указатель на структуру, а ф-ия будет ее заполнять. Что-то вроде:

    NTSTATUS GetSystemRootAddress(PUNICODE_STRING pusFullName)
    {
    ...
    return status;
    }
     
  3. x64

    x64 New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2008
    Сообщения:
    1.370
    Адрес:
    Россия
    А вот за такое не грех и забанить. Кто знать-то должен, работает или нет? А если работает, мы тут что, должны искать ошибку, которой нет? Такие вопросы или в .BEGINNERS или в .LANG.C надо, ибо язык подучить следует в первую очередь. Ну хоть исходник выложить не забыл, и то ладно, иначе был бы тебе бан неминуемый и беспощадный. Следующий раз чтоб был дамп или что-нибудь более конкретное, чем "вроде не работает". По теме: в документации к функции ZwQuerySymbolicLinkObject() написано русским языком:

     
  4. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    А чем не подходит старая добрая GetSystemDirectory? Или труъ хоцкеры не ищщут легких путей?
     
  5. litrovith

    litrovith Member

    Публикаций:
    0
    Регистрация:
    20 июн 2007
    Сообщения:
    509
    x64, баньте... копипастеров несмышлёных!
     
  6. sergegers

    sergegers New Member

    Публикаций:
    0
    Регистрация:
    8 июн 2008
    Сообщения:
    172
    Once upon a time in kernel...
     
  7. Malfoy

    Malfoy New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2012
    Сообщения:
    698
    Функции, которые возвращают юникод, но не имею непосредственно размера буфера получают его из UNICODE_STRING.MaximumLength и возвращают строку в UNICODE_STRING.Buffer; иначе если размер задаётся, то обычно в буфере формируется UNICODE_STRING. Действительно, откуда сервису знать какого размера буфер. Да и вообще сервисы статус вертают, по которому обычно однозначно можно понять что вы криво делаете.
     
  8. z0mailbox

    z0mailbox z0

    Публикаций:
    0
    Регистрация:
    3 фев 2005
    Сообщения:
    635
    Адрес:
    Russia СПБ
    а я бы из реестра прочитал
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SystemRoot