Всем доброго времени суток, задача такая, получить список mount point'ов для nt device name, т.е, допустим у нас есть: "\Device\HarddiskVolume1" и есть ссылки на него: "C:" и "D:\DiskC", нужно по строке "\Device\HarddiskVolume1" получить все такие ссылки, в MSDN'е есть пример: http://msdn2.microsoft.com/en-us/library/bb891980(VS.85).aspx?s=1 но это слишком громоздко, мне нужно получать mount point'ы быстро, поэтому я хочу сделать так: в режиме ядра из строки "\Device\HarddiskVolume1" получить Volume GUID и сформировать соответствующую ссылку (типа "\\?\Volume{015de57a-ae55-11dc-b751-0050bf7178db}\") передать её в UserMode, а там уже вызвать только GetVolumePathNamesForVolumeName. Вопрос: как в ядре из "\Device\HarddiskVolume1" получить "\\?\Volume{015de57a-ae55-11dc-b751-0050bf7178db}\" ну или хотя бы узнать GUID volume'а ?
0x56, хм, насчёт FileFsVolumeInformation, поля FILE_FS_VOLUME_INFORMATION: LARGE_INTEGER VolumeCreationTime; ULONG VolumeSerialNumber; ULONG VolumeLabelLength; BOOLEAN SupportsObjects; WCHAR VolumeLabel[1]; Где здесь GUID ? Он же 128-битный должен быть, ни в одно из этих полей он не поместится, а VolumeLabel - это всего-навсего метка тома.
Так дело как раз в том что я не хочу перечислять все томы, я хочу сделать это быстро просто вызвав GetVolumePathNamesForVolumeName для нужного, это возможно ?
я думаю тебе следует сделать kernel-подобную функцию GetVolumePathNamesForVolumeNameW в РеактОс есть реализация её http://www.reactos.biz/generated/doxygen/d4/dff/dll_2win32_2kernel32_2file_2volume_8c-source.html
Как же часто оказывается приходится переписывать WinAPI функции под ядро, GetLongPathName я уже переписал, что-то вроде QueryDosDevice тоже, теперь это... Всем спасибо за помошь, буду разбираться.
А вот у меня в ring3 такая проблемма (WinXP Sp2). Ф-ия NtQueryVirtualMemory (с параметром MemorySectionName) возвращает для файлов лежащих на втором динамическом разделе (диск J) такой путь: \device\HarddiskDmVolumes\<имя_компа>IDg0\Volume2 Хотя ф-ия QueryDosDeviceW для диска J:\ возвращает такой путь: \device\HarddiskDmVolumes\PhysicalDmVolumes\BlockVolume2 Так как же мне сопоставить Nt_Device_Name и Dos_Device ? ЗЫ. Через GetVolumeNameForVolumeMountPointW получаю тоже самое.
Наверное \device\HarddiskDmVolumes\PhysicalDmVolumes\BlockVolume2 - это символическая ссылка на \device\HarddiskDmVolumes\<имя_компа>IDg0\Volume2 или наоборот, нужно вызвать ZwQuerySymbolicLinkObject и проверить. Хотя не уверне что символическия ссылки могут называться как \device\...