V>>Если интересует, загрузился ли скажем FAT или NTFS — просто попробуйте по имени открыть соотв. драйвер:
V>>V>> RtlInitUnicodeString(&uniString, L"\\Fat");
V>> ntStatus = IoGetDeviceObjectPointer(
V>> &uniString,
V>> FILE_READ_ATTRIBUTES,
V>> &fileObject,
V>> &fatDeviceObject);
V>>
I>такой вариант имеет недостаток он дает указатель не на девайс, а на самый верхний фильтр к нему прицепленный
на XP для этого есть спец ф-ия IoGetLowerDeviceObject
I>следовательно я не могу получить список всех подобных (принадлежащих тому же драйверу) девайсов в системе
все можно, если задаться целью, опять же на XP для этого есть другая ф-я IoEnumerateDeviceObjectList
у себя мне хватило IoGetDeviceObjectPointer IoCreateDevice IoAttachDeviceToDeviceStack
имея device object всегда можно получить DriverObject — одно из полей DO
V>>список всех OS-supplied файловых драйверов в системе можно увидеть с помощью WinObj в разделе \FileSystem
I>а как можно по имени драйвера получить его DRIVER_OBJECT ?
выше вызываем IoGetDeviceObjectPointer и получаем fileObject, если хватает прав
потом fileObject->DeviceObject->DriverObject->DriverName?
V>>но если Вам все же нужен список устройств, то, в принципе, если не особо напрягаться, возьмите код из filemon и так же как там, в цикле приаттачевайтесь по букве к каждому диску (\\DosDevices\\A:, ...\\DosDevices\\Z
.
I>этот вариант я имею в виду
I>и все же как получить список всех DRIVER_OBJECT в системе ?
Кстати совсем забыл, Вам можно получить список всех драйверов в системе через NtQueryInformation — подробности на сайте Сергея Васкецова вполне могут быть или в известных книгах (ссылки на них там же). Соотв. получив список загруженных драйверов, можно их опрашивать на предмет поиска в DeviceObject->DeviceType одного из значений FILE_DEVICE_XXX_FILE_SYSTEM (FILE_DEVICE_DISK_FILE_SYSTEM, FILE_DEVICE_CD_ROM_FILE_SYSTEM, etc.)
доп-но проверку по полю Characteristics можно проводить (флаг FILE_REMOTE_DEVICE для сетевых устройств например)
и таким образом получите список всех файловых драйверов