Ответ 1
У ОП есть 5 вопросов (количество зависит от количества вопросительных знаков). Каждый из следующих ответов отвечает на вопросы в том же порядке, что и в OP.
-
Чтобы узнать, кто звонит вашему драйверу с помощью
IOCTL_DISK_GET_DRIVE_GEOMETRY
, поставьте точку останова на обработчик для этого IOCTL в вашем драйвере. Когда произойдет разрыв, посмотрите на столбец. Вы увидите, кто звонил. -
На самом деле у вас будет многоуровневый набор абонентов. Это ответит на ваш вопрос о слоях.
-
Windows знает о возможностях ваших драйверов несколькими способами. Если у вас есть драйвер минипорта, тогда существует минимальный набор функций, которые должны реализовывать каждый тип минипорта.
Кроме того, существуют API-интерфейсы, которые минипорты StorPort могут использовать для указания дополнительных возможностей. Например,
StorPortInitializePerfOpts
используется для информирования StorPort о различных первичных оптимизации в минипортах StorPort. Чтобы лучше ответить на этот вопрос, укажите тип драйвера, который у вас есть. Если вы не знакомы с различными типами драйверов, я предлагаю вам прочитать это из центра разработчика MS HW. На самом деле вы, возможно, захотите его прочитать. -
Вопрос предполагает, что Windows отправляет разные управляющие коды в разные драйверы на основе некоторого гипотетического атрибута драйвера. Однако модель Windows использует то, что упоминается в предыдущем ответе. Существуют базовые возможности, основанные на модели драйвера, а затем в некоторых случаях API-интерфейсы для обмена возможностями. (В других случаях драйвер должен указать, что он не поддерживает определенную операцию.)
В ответе есть еще один аспект: компоненты Windows и не Windows могут выбирать любые управляющие коды, которые они хотят. Таким образом, сторонняя программа разбиения диска может использовать более раннюю геометрию IOCTL, даже если она существует более новая, потому что она хочет быть совместимой с более ранними версиями Windows. Или компонент Windows (например, пространства хранения) может использовать новый IOCTL, поскольку он не поддерживает обратную совместимость.
-
(Этот вопрос требует мнения, поэтому этот ответ - мое мнение). Предполагая, что "вопрос" означает "вопросы", я бы сказал более или менее. Но если это ваш первый (или второй) набег на драйверы Windows, я снова предлагаю прочитать соответствующую документацию MS (связанный выше).
Наконец, несмотря на то, что OP не запрашивает напрямую, похоже, возникает вопрос: "Как проверить функциональность IOCTL_DISK_GET_DRIVE_GEOMETRY_EX, которую я добавил?". Самый простой способ - ИМО - написать тестовую программу Win32. Чтобы вызывать и отображать этот код, IOCTL занимает всего около 20 строк кода. Который будет проще и быстрее, скажем, сценарием DISKPART или аналогичным.