Создайте каталог и получите ручку, выполнив один IRP - PullRequest
4 голосов
/ 21 декабря 2010

Когда мы создаем файл с помощью CreateFile, файл создается и мы получаем дескриптор.
Но CreateDirectory не возвращает дескриптор каталога.

Я также хотел бы получить дескриптор при созданиикаталог.
Я хочу справиться с этим, выполнив только один пакет запроса ввода-вывода.

Итак, «создайте CreateDirectory, затем CreateFile с FILE_FLAG_BACKUP_SEMANTICS.»не будет ответа.
Он выдаст два Irps для файловой системы.

Есть ли API, который я могу использовать в режиме пользователя (Win32 Api)?

1 Ответ

4 голосов
/ 21 декабря 2010

NT может сделать это, но Win32 не предоставляет его.Для этого вам нужно использовать NT API.NtCreateFile, в частности.Он должен соответствовать тем же параметрам, что и ZwCreateFile .

. Вот иллюстративный пример (взломанный в спешке внутри веб-формы - YMMV):на что стоит обратить внимание ...

  • Пути NT имеют несколько другие соглашения, чем пути Win32 ... Возможно, вам придется санировать путь.

  • Говоря о HANDLE s, NT API, как правило, имеют дело с NULL, а не INVALID_HANDLE_VALUE.

  • Я не делал этого здесь, но изменил вызов InitializeObjectAttributesВы можете делать интересные вещи, такие как создание относительно другого дескриптора каталога.Конечно, все флаги, которые я здесь поставил, вы также можете изменить.Обратитесь к документации и / или в Интернете для достижения наилучших результатов.

...