Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Разница в атрибутах при уничтожении объекта.


Страницы:   1 2

Riply ©   (2007-11-10 01:40:00) 

Здравствуйте !
Реализация функций DeleteFile и RemoveDirectory очень похожи.
В обоих случаях используется NtCreateFile.
Но кроме логичных отличий в параметрах, есть разница в "SHARE" параметре.
Для DeleteFile ShareAccess устанавливается
FILE_SHARE_READ or FILE_SHARE_WRITE or FILE_SHARE_DELETE,
а для RemoveDirectory - ноль.
Поясните, пожалуйста, чем это обусловлено.


Riply   (2007-11-11 21:33:00) [1]

> [19] guav ©   (11.11.07 16:25)
> 3начит сабж есть специфика ReactOS и не имеет отношения к поведению Windows XP.

> [20] Zeqfreed ©   (11.11.07 18:45)
> Да, видимо так. Можно даже, наверное, сообщить об этом команде
> разработчиков — возможно, это не было их сознательным решением.

Ребят, спасибо огромное за помощь и
"сампожертванное написание и тестирование кода" :)

Я не успокоилась и чутка "поперехватывала"  Nt - ф-ии.
Со своей стороны добавлю, что под Windows RemoveDirectoryW
NtCreateFile вовсе и не вызывает :)
Она обходится NtOpenFile` ом, передавая ему в качестве ShareAccess
FILE_SHARE_READ or FILE_SHARE_WRITE or FILE_SHARE_DELETE.
Так что прав был guav, заподозрив липу в сабжевом вопросе :)

P.S.
Очень полезная ветка.
Из нее я выяснила, что не стоит делать заключения о Карузо,
базируясь только на знании Рабиновича :)
А это ценное знание для программиста :)


Zeqfreed   (2007-11-11 18:45:00) [2]

> guav ©   (11.11.07 16:25) [19]

Да, видимо так. Можно даже, наверное, сообщить об этом команде разработчиков — возможно, это не было их сознательным решением.


guav   (2007-11-11 16:25:00) [3]

> [18] Zeqfreed ©   (11.11.07 16:06)

Спасибо.
3начит сабж есть специфика ReactOS и не имеет отношения к поведению Windows XP.


Zeqfreed   (2007-11-11 16:06:00) [4]

Фуф. Получилось наконец закинуть файл на виртуальную машину :)

После запуска выдает:

Cannot open directory, error 32
ERROR SHARING VIOLATION - The process cannot access the file because it is being used by another process
Cannot remove directory, error 32
ERROR SHARING VIOLATION - The process cannot access the file because it is being used by another process


guav   (2007-11-11 15:50:00) [5]

> [14] Zeqfreed ©   (11.11.07 15:45)

До запуска дошло ? Если да, то что выдаёт ?


Riply   (2007-11-11 15:47:00) [6]

>  [15] guav ©   (11.11.07 15:46)
> 'С:\test1'


guav   (2007-11-11 15:46:00) [7]

Там хоть в бинарнике hardcoded 'D:\test1' именено на ReadLn ?


Zeqfreed   (2007-11-11 15:45:00) [8]

Что-то не получается у меня :(
Буду еще пытаться. Если получится сообщу :)


Riply   (2007-11-11 15:27:00) [9]

> [11] guav ©   (11.11.07 15:20)

>Попробуй "поотлаживать" саму ntdll, если сабж действительно интересует.

САБЖ интересует, ибо прежде чем самой соваться в MFT, как "слону в посудную лавку",
иногда бывает не вредно посмотреть, как это делают другие :)

> Тогда образ на почту, Windows поддерживает NTFS с 8 МБ,
> а если форматировать нестандартными утилитами, то ещё меньше.
Хорошо. Подготавливаю и высылаю.


guav   (2007-11-11 15:20:00) [10]

> Но что они должны совпадать в ключевых идеологических моментах
> - мне кажется логичным.

В подобных "идеологических" мометах исходники Майкрософт не всегда совпадают с мнением, изложенным в MSDN.
Что уж говорить об исходниках, не от Майкрософт.

Попробуй "поотлаживать" саму ntdll, если сабж действительно интересует.


> Трудно добиться стабильности возникновения "нестандартного
> случая",
> что бы заявить: "после таких-то и таких-то действий, имеем
> то-то и то-то" :)

Тогда образ на почту, Windows поддерживает NTFS с 8 МБ, а если форматировать нестандартными утилитами, то ещё меньше. Детали обсудить можно тоже по почте. Кстати, если дело касаестя разреженных или сжатых, опиши заранее, бо может это я уже видел.


Riply   (2007-11-11 15:20:00) [11]

>  [10] Zeqfreed ©   (11.11.07 15:17)

http://slil.ru/25087818


Zeqfreed   (2007-11-11 15:17:00) [12]

> Riply ©   (11.11.07 15:15) [9]

Да хоть куда :) filesurf.ru, например.
Можно и на почту послать. zeqfreed@gmail.com


Riply   (2007-11-11 15:15:00) [13]

> [8] guav ©   (11.11.07 15:08)

> Это хорошо. Предоставляю это Riply ©, может она захочет изменить код.

Наверное менять не буду. Куда лучше выложить ?

<off>
> [4] Riply ©   (11.11.07 14:44)
> Есть прогресс со сложными случаями в MFT ?
Продвигается, но медленно.
Трудно добиться стабильности возникновения "нестандартного случая",
что бы заявить: "после таких-то и таких-то действий, имеем то-то и то-то" :)

</off>


guav   (2007-11-11 15:08:00) [14]


> [6] Zeqfreed ©   (11.11.07 15:00)

Это хорошо. Предоставляю это Riply ©, может она захочет изменить код.

<off>

> [4] Riply ©   (11.11.07 14:44)

Есть прогресс со сложными случаями в MFT ?
</off>


Riply   (2007-11-11 15:05:00) [15]

> [5] guav ©   (11.11.07 14:53)

:)

> Ты наверное на таком же основании считаешь,
> что исходники драйвера NTFS у MS и линуксоидов одинаковые ? :-)

Нет. Не считаю. :)
Но что они должны совпадать в ключевых идеологических моментах - мне кажется логичным.
А то как открывать на удаление - это важно. :)


Zeqfreed   (2007-11-11 15:00:00) [16]

Если выложите скомпилированный экзешник на файлопомойку какую-нибудь, то могу в виртуальной машине запустить его в ReactOS :)


guav   (2007-11-11 14:53:00) [17]

> [4] Riply ©   (11.11.07 14:44)


Встречаются двое.
Один другому говорит:
- Не понимаю почему все так восхищаются этим Карузо? Слуха у него нет, голоса нет, картавит, шепелявит, пришептывает.
- Ооо! А вы слышали Карузо?
- Да нет. Мне Рабинович его вчера напел.


Я считаю, что без подтверждения того что в настоящей Windows поведение аналогично не стоит искать глубокий смысл в сабже.

Если эту самую ReactOS можно запустить, можно проверить мой код там.

Ты наверное на таком же основании считаешь, что исходники драйвера NTFS у MS и линуксоидов одинаковые ? :-)


Riply   (2007-11-11 14:44:00) [18]

> [3] guav ©   (11.11.07 14:36)

> Это исходник Windows ?

Я еще (пока) не заслужила, что бы Microsoft давала мне исходники
по первому моему требованию, поэтому вынуждена обходиться ReactOS` овскими :)


guav   (2007-11-11 14:36:00) [19]

> [2] Riply ©   (11.11.07 14:28)

Это исходник Windows ?


Riply   (2007-11-11 14:28:00) [20]

> [1] guav ©   (11.11.07 13:57)
> На основании чего был сделан такой вывод ?

На основании следующего исходника:

BOOL WINAPI RemoveDirectoryW  (  LPCWSTR    )
00520 {
00521         FILE_DISPOSITION_INFORMATION FileDispInfo;
00522         OBJECT_ATTRIBUTES ObjectAttributes;
00523         IO_STATUS_BLOCK IoStatusBlock;
00524         UNICODE_STRING NtPathU;
00525         HANDLE DirectoryHandle;
00526         NTSTATUS Status;
00527
00528         DPRINT("lpPathName %S\n", lpPathName);
00529
00530         if (!RtlDosPathNameToNtPathName_U (lpPathName,
00531                                            &NtPathU,
00532                                            NULL,
00533                                            NULL))
00534                 return FALSE;
00535
00536         InitializeObjectAttributes(&ObjectAttributes,
00537                                    &NtPathU,
00538                                    OBJ_CASE_INSENSITIVE,
00539                                    NULL,
00540                                    NULL);
00541
00542         DPRINT("NtPathU '%S'\n", NtPathU.Buffer);
00543
00544         Status = NtCreateFile (&DirectoryHandle,
00545                                DELETE,
00546                                &ObjectAttributes,
00547                                &IoStatusBlock,
00548                                NULL,
00549                                FILE_ATTRIBUTE_DIRECTORY, /* 0x7 */
00550                                0,
00551                                FILE_OPEN,
00552                                FILE_DIRECTORY_FILE,      /* 0x204021 */
00553                                NULL,
00554                                0);
00555
00556         RtlFreeHeap (RtlGetProcessHeap (),
00557                      0,
00558                      NtPathU.Buffer);
00559
00560         if (!NT_SUCCESS(Status))
00561         {
00562                 CHECKPOINT;
00563                 SetLastErrorByStatus (Status);
00564                 return FALSE;
00565         }
00566
00567         FileDispInfo.DeleteFile = TRUE;
00568
00569         Status = NtSetInformationFile (DirectoryHandle,
00570                                        &IoStatusBlock,
00571                                        &FileDispInfo,
00572                                        sizeof(FILE_DISPOSITION_INFORMATION),
00573                                        FileDispositionInformation);
00574         NtClose(DirectoryHandle);
00575
00576         if (!NT_SUCCESS(Status))
00577         {
00578                 SetLastErrorByStatus (Status);
00579                 return FALSE;
00580         }
00581
00582         return TRUE;
00583 }


> Я считаю что успешное выполнение нижеследующего кода опровергает этот вывод.
Код то выполняется успешно.
А вот выводы надо обдумать. "Что-то здесь не так" (с)


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо