Какое имя передавать в ZwCreateFile?

Тема в разделе "WASM.WIN32", создана пользователем ANDLL, 21 фев 2006.

  1. ANDLL

    ANDLL New Member

    Публикаций:
    0
    Регистрация:
    17 фев 2006
    Сообщения:
    24
    Адрес:
    Russia
    Я передаю в ZwCreateFile имя файла, скажем "\\?\C:\A.dat" но он возвращает STATUS_OBJECT_NAME_INVALID. Так как надо правильно ее называть?
     
  2. VooDooo

    VooDooo New Member

    Публикаций:
    0
    Регистрация:
    26 авг 2005
    Сообщения:
    30
    Адрес:
    Russia
    По-моему вот так:

    \\??\C:\A.dat
     
  3. ANDLL

    ANDLL New Member

    Публикаций:
    0
    Регистрация:
    17 фев 2006
    Сообщения:
    24
    Адрес:
    Russia
    Хм. Нет.

    Давайте я приведу полный код, может тут гдето ошибка?
    Код (Text):
    1.         UNICODE_STRING pSTR;
    2.         OBJECT_ATTRIBUTES pAttr;
    3.         HANDLE hFile;
    4.         IO_STATUS_BLOCK pStat;
    5.         RtlInitUnicodeString(&pSTR,L"\\\\??\\C:\\The.dat");
    6.         InitializeObjectAttributes(&pAttr,&pSTR,OBJ_KERNEL_HANDLE,0,0);
    7.         DbgPrint("%S",pSTR.Buffer);
    8.         DbgPrint("-bbu-  ZwCreateFile: %X",
    9.             (int)ZwCreateFile(&hFile,GENERIC_ALL,&pAttr,&pStat,0,0,0,FILE_CREATE,0,0,0)
    10.         );
    11.         DbgPrint("-bbu-  pStat: %i", (int)pStat.Information);
    12.         ZwClose(hFile);
    13.  
     
  4. Morgenstern

    Morgenstern New Member

    Публикаций:
    0
    Регистрация:
    20 фев 2006
    Сообщения:
    14
    Адрес:
    Петербург
    [опоздал]
     
  5. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.552
    Адрес:
    Russia
    хм.. что-то я не помню, чтоб в этой функции надо передавать имя файла. В прототипе такого параметра нет.

    (А вот второй пост все обьясняет). Попробуй так (если строка проинициализированна верно):

    InitializeObjectAttributes(&pAttr,&pSTR,OBJ_CASE_INSENSITIVE,0,0);
     
  6. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    Убери первые два бэкслэша:

    L"\\??\\c:\\1.log"
     
  7. ANDLL

    ANDLL New Member

    Публикаций:
    0
    Регистрация:
    17 фев 2006
    Сообщения:
    24
    Адрес:
    Russia


    Спасибо! Действительно, теперь работает.
     
  8. ANDLL

    ANDLL New Member

    Публикаций:
    0
    Регистрация:
    17 фев 2006
    Сообщения:
    24
    Адрес:
    Russia
    Еще вопрос. Можно как то с его помощью обойти ошибку STATUS_SHARING_VIOLATION, т.е. открыть файл даже тогда, когда он уже открыт userмодным процессом?
     
  9. DelExe

    DelExe New Member

    Публикаций:
    0
    Регистрация:
    22 авг 2005
    Сообщения:
    165
  10. ANDLL

    ANDLL New Member

    Публикаций:
    0
    Регистрация:
    17 фев 2006
    Сообщения:
    24
    Адрес:
    Russia
    Спасибо
     
  11. DelExe

    DelExe New Member

    Публикаций:
    0
    Регистрация:
    22 авг 2005
    Сообщения:
    165
    ANDLL

    Только возьми во внимание, что второй вариант, с аттачем к жертве, довольно наряжный. Ведь при чтении с файла указатель позиции будет изменяться. В многопоточных приложнеиях это чревато гемороем.
     
  12. ANDLL

    ANDLL New Member

    Публикаций:
    0
    Регистрация:
    17 фев 2006
    Сообщения:
    24
    Адрес:
    Russia
    Спасибо :)
     
  13. ANDLL

    ANDLL New Member

    Публикаций:
    0
    Регистрация:
    17 фев 2006
    Сообщения:
    24
    Адрес:
    Russia
    Кстати, ведь можно приаттачась к примеру просто поменять у всех хэндлов атрибуты шаринга на SHARE_READWRITE? И потом заново открыть файл?
     
  14. DelExe

    DelExe New Member

    Публикаций:
    0
    Регистрация:
    22 авг 2005
    Сообщения:
    165
    Ms-Rem в своей статье так и делает. Для этого он использует драйвер.
     
  15. SheriFF

    SheriFF New Member

    Публикаций:
    0
    Регистрация:
    23 июл 2009
    Сообщения:
    14
    а если получать хэндл из fileobject'a, который в свою очередь будет браться из стека перехваченного ирп-пакета драйвером фильтром, то это будет работать или нет?
     
  16. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Так в чем проблема просто скопировать себе хендл, даже не аттачась к чужому процессу?
    1. ZwQuerySystemInformation (SystemHandleInformation) - перечисляем хендлы
    2. ZwQueryObject (ObjectNameInformation) - сравниванием имена объектов
    3. ZwDuplicateObject - копируем себе хендл, не забывая его потом закрыть после использования.