Стек драйверов при открытии тома

Тема в разделе "WASM.NT.KERNEL", создана пользователем Rodin, 7 окт 2008.

  1. Rodin

    Rodin New Member

    Публикаций:
    0
    Регистрация:
    30 апр 2007
    Сообщения:
    125
    Есть простой код открытия NTFS тома \\.\c: (\Device\HarddiskVolume1)

    Код (Text):
    1. HANDLE DrvLetter= CreateFileA ("\\\\.\\c:", GENERIC_READ, FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
    2.  
    3. if (DrvLetter == INVALID_HANDLE_VALUE)
    4.     return 0;
    5.  
    6. __asm int 3
    7.  
    8. DWORD returned;
    9. UCHAR buff[512];
    10. ReadFile (DrvLetter, buff, 512, &returned, NULL);
    Далее смотрю стек драйверов вплоть до вызова disk.sys

    Код (Text):
    1. kd> !devstack 81b9cd98  
    2.   !DevObj   !DrvObj            !DevExt   ObjectName
    3.   81b9c820  \Driver\VolSnap    81b9c8d8  
    4. > 81b9cd98  \Driver\Ftdisk     81b9ce50  HarddiskVolume1
    5.  
    6. f7c20a20 804eddf9 CLASSPNP!ClassReadWrite
    7. f7c20a30 f9c24537 nt!IopfCallDriver+0x31
    8. f7c20a40 804eddf9 PartMgr!PmReadWrite+0x2d
    9. f7c20a50 f983e1c6 nt!IopfCallDriver+0x31
    10. f7c20a6c 804eddf9 ftdisk!FtDiskReadWrite+0x194
    11. f7c20a7c f99bc51a nt!IopfCallDriver+0x31
    12. f7c20a8c 804eddf9 VolSnap!VolSnapRead+0x26
    13. f7c20a9c f9713243 nt!IopfCallDriver+0x31
    14. f7c20aac f9722f81 Ntfs!NtfsSingleAsync+0x6d
    15. f7c20ad8 f971ed61 Ntfs!NtfsVolumeDasdIo+0x3d
    16. f7c20bb4 f9714fbf Ntfs!NtfsCommonRead+0x23d
    17. f7c20c54 804eddf9 Ntfs!NtfsFsdRead+0x22d
    18. f7c20c64 f97b6459 nt!IopfCallDriver+0x31
    19. f7c20c6c 804eddf9 sr!SrPassThrough+0x31
    20. f7c20c7c 80573b42 nt!IopfCallDriver+0x31
    21. f7c20c90 80570b98 nt!IopSynchronousServiceTail+0x60
    22. f7c20d38 8053c808 nt!NtReadFile+0x580
    23. f7c20d38 7c90eb94 nt!KiFastCallEntry+0xf8
    24. 0012fc44 7c801875 ntdll+0xeb94
    25. 0012fc44 004127ce kernel32!ReadFile+0x67
    26. 0012ff70 00412ea9 test!main+0xce
    Собственно вопросы:
    1) Почему запрос на чтение сначала приходит к драйверу NTFS, а только потом доходит до того девайса который я открывал через Createfile (мне кажется более логичной схема ftdisk->partmgr->драйвер FS->драйвер диска)?
    2) Как NtReadFile узнает о типе FS?