Читаем Использование NuMega DriverStudio для написания WDM-драйверов полностью

  Params.QueryValue(L"BreakOnEntry", &bBreakOnEntry);

  // Если она принимает значение true,то инициировать точку останова в отладчике.

  if (bBreakOnEntry) DbgBreakPoint();

#endif

  //Загрузить остальные параметры реестра.

  LoadRegistryParameters(Params);

 }

 m_Unit = 0;

 //Вернуть успех

 return STATUS_SUCCESS;

}

Метод LoadRegistryParameters зaгружает из реестра все остальные параметры, необходимые для драйвера. Впрочем, в нашем драйвере таковых нет, и поэтому функция не выполняет никаких полезных действий (просто загружает значение переменной m_bBreakOnEntry).

void XDSPdrv::LoadRegistryParameters(KRegistryKey &Params) {

 m_bBreakOnEntry = FALSE;

 Params.QueryValue(L"BreakOnEntry", &m_bBreakOnEntry);

 t << "m_bBreakOnEntry loaded from registry, resulting value: [" << m_bBreakOnEntry << "]\n";

}

На этом заканчивается секция инициализации драйвера. Далее следует метод AddDevice. Он вызывается, когда система обнаруживает устройство, за которое отвечает драйвер (обычно это происходит при загрузке драйвера). В метод ситема передает указатель на физический объект устройства (Physical Device Object, PDO). Этот объект представляет собой некий блок информации о физическом устройстве, который используется ОС. Данный метод создает объект устройства XDSPDevice. С точки зрения системы, создается функциональный объект устройства (Functional Device Object, FDO).

NTSTATUS XDSPdrv::AddDevice(PDEVICE_OBJECT Pdo) {

 t << "AddDevice called\n";

 //Здесь вызывается конструктор класса XDSPDevice.

 XDSPdrvDevice* pDevice = new(

  static_cast(KUnitizedName(L"XDSPdrvDevice", m_Unit)),

  FILE_DEVICE_UNKNOWN,

  static_cast(KUnitizedName(L"XDSPdrvDevice", m_Unit)),

  0,

  DO_DIRECT_IO)

 XDSPDevice(Pdo, m_Unit);

 //m_Unit – количество таких устройств в системе.

 if (pDevice == NULL) //Не удалось создать объект устройства. Похоже, произошла какая-то ошибка.

 {

  t << "Error creating device XDSPdrvDevice" << (ULONG) m_Unit << EOL;

  return STATUS_INSUFFICIENT_RESOURCES;

 }

 //Получить статус создания устройства.

 NTSTATUS status = pDevice->ConstructorStatus();

 if ( !NT_SUCCESS(status) ) //Похоже, устройство создано, но неудачно; произошла ошибка.

 {

  t << "Error constructing device XDSPdrvDevice" << (ULONG) m_Unit << " status " << (ULONG) status << EOL;

  delete pDevice;

 } else {

  m_Unit++; //Устройство создано удачно

 }

 //Вернуть статус устройства.

 return status;

}

Все. Работа объекта драйвера на этом окончена. Как мы можем видеть, объект драйвера практически не выполняет каких-либо функций управления аппаратурой, но он жизненно необходим для правильной инициализации драйвера. В нашем случае НЕ ТРЕБУЕТСЯ вносить какие-либо изменения в текст, сформированный DriverWizard.

Основным классом драйвера является класс устройства. Класс устройства XDSPdrvDevice является подклассом класса KpnpDevice. Конструктор получает два параметра: указатель на PDO и номер драйвера в системе.

XDSPdrvDevice::XDSPdrvDevice(PDEVICE_OBJECT Pdo, ULONG Unit) : KPnpDevice(Pdo, NULL) {

 t << "Entering XDSPdrvDevice::XDSPdrvDevice (constructor)\n";

 //Здесь проверяется код ошибки, которую вернул конструктор суперкласса. В случае

 //успешного создания объекта базового класса значение переменной m_ConstructorStatus

 //будет NT_SUCCESS.

Перейти на страницу:

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных