Форматирование виртуальных дисков. FAT и NTFS
От: Aniramap  
Дата: 14.04.09 09:24
Оценка:
ПО создает виртуальный диск. Необходимо выполнить его форматирование. Сделала форматирование в библиотеке приложения, а не в драйвере, с помощью функции FormatEx библиотеки fmifs.dll. Но данный способ не работает под обычным и опытным пользователем. Может кто-то знает как по другому можно выполнить форматирование раздела? просто очень не хочется это делать "руками", особенно NTFS... Устроит любой вариант форматирования на уровне драйвера или прикладной библиотеки, главное чтобы работал под всеми пользователями ОС. Я нашла на форуме упоминание про Win32_Volume, но вроде он не работает для ХР и более ранних виндовс.. хотелось бы что-то универсальное.
Заранее спасибо за любую информацию.
Re: Форматирование виртуальных дисков. FAT и NTFS
От: Геннадий Майко США  
Дата: 16.04.09 04:22
Оценка:
Здравствуйте, Aniramap, Вы писали:

A>ПО создает виртуальный диск. Необходимо выполнить его форматирование. Сделала форматирование в библиотеке приложения, а не в драйвере, с помощью функции FormatEx библиотеки fmifs.dll. Но данный способ не работает под обычным и опытным пользователем.

--
Да, это так — "You must be logged on as an administrator or a member of the Administrators group in order to complete this (format volume) procedure". Если же Вы полностью доверяете всем остальным пользователям и хотите разрешить им выполнять операцию форматирования, то дайте им такие же права, как и у администратора.

C уважением,
Геннадий Майко.
Re: Форматирование виртуальных дисков. FAT и NTFS
От: Valery A. Boronin Россия linkedin.com/in/boronin
Дата: 17.04.09 00:34
Оценка: 4 (2)
Здравствуйте, Aniramap, Вы писали:

A>ПО создает виртуальный диск. Необходимо выполнить его форматирование. Сделала форматирование в библиотеке приложения, а не в драйвере, с помощью функции FormatEx библиотеки fmifs.dll. Но данный способ не работает под обычным и опытным пользователем. Может кто-то знает как по другому можно выполнить форматирование раздела? просто очень не хочется это делать "руками", особенно NTFS... Устроит любой вариант форматирования на уровне драйвера или прикладной библиотеки, главное чтобы работал под всеми пользователями ОС. Я нашла на форуме упоминание про Win32_Volume, но вроде он не работает для ХР и более ранних виндовс.. хотелось бы что-то универсальное.

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

но вот мне кажется, Геннадий рядом
Автор: Геннадий Майко
Дата: 16.04.09
— тоже несколько погорячился
ведь если давать права админа всем (Гена, или я не так что-то понял?), только чтобы сделать нечто наподобие задачи выше — это несколько расточительно, что ли.
Нет такого ощущения? Это ж — назад в win95 под админа!


на самом деле классическое решение — и Vista уже должна потихоньку народ приучать к этому — просто разделять код на тот, что должен выполняться с повышенным уровнем привелегий и с обычным. Ну и разносить соотв в разные места. Физически.

Короче, Aniramap — сделайте, например, сервис под LocalSystem? Да и налаживайте запрос на форматирование из под любых пользователей ему?
А сервис все сделает, ему будет можно. И даже код уже написанный — вполне пригодится, начали ж Вы все верно делать.
Valery A. Boronin, RSDN Team, linkedin.com\in\boronin
R&D Mgmt & Security. AppSec & SDL. Data Protection and Systems Programming. FDE, DLP, Incident Management. Windows Filesystems and Drivers.
Re[2]: Форматирование виртуальных дисков. FAT и NTFS
От: Аноним  
Дата: 21.04.09 07:50
Оценка:
Большое спасибо за ответы. Я тоже скланяюсь все больше к написанию сервиса, просто очень не хотелось добавлять новый элемент в ПО ради выполнения всего одной задачи... Да и насколько я понимаю, написанная мной реализация с помощью библиотеки fmifs.dll, работать под вистой не будет(((.
Re[3]: Форматирование виртуальных дисков. FAT и NTFS
От: Valery A. Boronin Россия linkedin.com/in/boronin
Дата: 22.04.09 18:24
Оценка:
А>Большое спасибо за ответы. Я тоже склоняюсь все больше к написанию сервиса, просто очень не хотелось добавлять новый элемент в ПО ради выполнения всего одной задачи...
в данном случае это скорее всего окажется необходимым. по-крайней мере немного потрудившись потом можно будет спать спокойно — это точно будет работать. Еще соображение: подобный сервис в наличии расширяет возможности и может оказаться полезным еще для чего-нибудь попозже.

А>Да и насколько я понимаю, написанная мной реализация с помощью библиотеки fmifs.dll, работать под вистой не будет(((.

Используйте (относительно) документированные API?

FormatEx FormatEx2 и ShFormatDrive — даже если что-то изменится, для совместимости их реализуют через новые механизмы. До Висты они как раз были совершенно точно завязаны на указанную Вами FMIFS.DLL либу. Сейчас опять реализовано что-то иначе (сам не проверял, но парни говорили на Висте и выше есть варианты с COM объектом, когда даже запускается для работы отдельный процесс), но интерфейсы по идее остаться должны были те же.

Кстати, пока писал пред абзац, поставил попутно ряд экспериментов.

подручными средствами на Vista x64 SP1 with UAC из под админа видно

ntdll.dll!NtTraceEvent+0xa
ntdll.dll!EtwTraceMessageVa+0x11c
ntdll.dll!EtwTraceMessage+0x19
ifsutil.dll!DIGRAPH::SearchForMatch+0x8ad
ifsutil.dll!IO_DP_DRIVE::HardWrite+0x211
ifsutil.dll!VOL_LIODPDRV::SetAutochkTimeOut+0x4ef
ifsutil.dll!VOL_LIODPDRV::Initialize+0x4a3
UNTFS.dll!NTFS_SA::TakeCensus+0x523
UNTFS.dll!FormatEx+0x1a7
FMIFS.DLL!FormatEx2+0x579
SHELL32.dll!PifMgr_CloseProperties+0xe17
SHELL32.dll!PifMgr_CloseProperties+0x29d1
kernel32.dll!BaseThreadInitThunk+0xd
ntdll.dll!RtlUserThreadStart+0x21

при запуске формата под NTFS из shell.

А вот без UAC и под exFAT

ntoskrnl.exe!ExpInterlockedFlushSList+0x126f
ntoskrnl.exe!KeWaitForMultipleObjects+0xcca
ntoskrnl.exe!KeWaitForMutexObject+0x2da
fastfat.SYS+0x16655
fastfat.SYS+0x2ebed
fastfat.SYS+0x3511
fltmgr.sys!FltAcquirePushLockShared+0xc87
fltmgr.sys+0x10dd
eamon.sys+0x3e2d
ntoskrnl.exe!ProbeForWrite+0x52c
ntoskrnl.exe!NtWriteFile+0x7ef
ntoskrnl.exe!ZwUnloadKeyEx+0x20d3
ntdll.dll!ZwWriteFile+0xa
ifsutil.dll!IO_DP_DRIVE::HardWrite+0x1e0
UEXFAT.dll!EXFAT_VOL::Initialize+0x659
UEXFAT.dll!EXFAT_VOL::Initialize+0x32f
UEXFAT.dll!EXFAT_VOL::Initialize+0xd6
UEXFAT.dll!FormatEx+0x1b2
FMIFS.DLL!FormatEx2+0x579
SHELL32.dll!PifMgr_CloseProperties+0xe1b
SHELL32.dll!PifMgr_CloseProperties+0x29d5
kernel32.dll!BaseThreadInitThunk+0xd
ntdll.dll!RtlUserThreadStart+0x21

Стек говорит о том, что FormatEx2 позвать можно и на Vista. Погуглите?

А под FAT картина чуток иная

ntoskrnl.exe!ExpInterlockedFlushSList+0x126f
ntoskrnl.exe!KeWaitForMultipleObjects+0xcca
ntoskrnl.exe!KeWaitForMutexObject+0x2da
ntoskrnl.exe!_misaligned_access+0x35
ntoskrnl.exe!MmUnlockPages+0x1160
ntoskrnl.exe!KeWaitForMultipleObjects+0xe61
ntoskrnl.exe!KeWaitForMutexObject+0x2da
ntoskrnl.exe!ProbeForWrite+0x733
ntoskrnl.exe!NtWriteFile+0x7ef
ntoskrnl.exe!ZwUnloadKeyEx+0x20d3
ntdll.dll!ZwWriteFile+0xa
ulib.dll!IO_DP_DRIVE::HardWrite+0x1e0
ulib.dll!VOL_LIODPDRV::SetAutochkTimeOut+0x4ef
ulib.dll!VOL_LIODPDRV::Initialize+0x4a3
ifsutil.dll!DP_DRIVE::QueryUdfMediaNeedsLowLevelFormat+0x3dd
ifsutil.dll+0x1c50

запуск работы происходит, вестимо, из SHFormatDrive, из другого потока.

PS касательно Format Method of the Win32_Volume Class — это WMI, но он может быть отключен со всеми вытекающими.
... << RSDN@Home 1.2.0 alpha 4 rev. 1180>>
Valery A. Boronin, RSDN Team, linkedin.com\in\boronin
R&D Mgmt & Security. AppSec & SDL. Data Protection and Systems Programming. FDE, DLP, Incident Management. Windows Filesystems and Drivers.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.