为术语驱动程序提供单一精确定义具有挑战性。 从最基本的意义上讲,驱动程序是一个软件组件,它允许操作系统和设备相互通信。 例如,假设应用程序需要从设备读取一些数据。 应用程序调用操作系统实现的功能,操作系统调用驱动程序实现的功能。 驱动程序由设计和制造设备的同一家公司编写,知道如何与设备硬件通信以获取数据。 驱动程序从设备获取数据后,它会将数据返回给操作系统,然后操作系统将数据返回给应用程序。
扩展定义到目前为止,我们的解释在几个方面过于简单:- 并非所有驱动程序都必须由设计该设备的公司编写。在许多情况下,设备是根据已发布的硬件标准设计的。这意味着驱动程序可以由Microsoft编写,设备设计人员不必提供驱动程序。
- 并非所有驱动程序都直接与设备通信。对于给定的I / O请求(如从设备读取数据),通常有多个驱动程序(分层堆叠)参与请求。可视化堆栈的传统方式是第一个参与者位于顶部,最后一个参与者位于底部,如此图所示。堆栈中的某些驱动程序可能通过将请求从一种格式转换为另一种格式来参与。这些驱动程序不直接与设备通信; 他们只是操纵请求并将请求传递给堆栈中较低的驱动程序。
- 某些筛选器驱动程序会观察并记录有关I / O请求的信息,但不会主动参与其中。例如,某些筛选器驱动程序充当验证程序,以确保堆栈中的其他驱动程序正确处理I / O请求。
-
我们可以通过说驱动程序是观察或参与操作系统和设备之间的通信的任何软件组件来扩展我们对驱动程序的定义。
简单的一个驱动示例代码,高手勿喷,我是新手,很菜的,
[C] 纯文本查看 复制代码 #include <ntddk.h>
VOID DriverUnload(PDRIVER_OBJECT DriverObject)
{
DbgPrint("goodbye");
}
NTSTATUS DriverEntry(PDRIVER_OBJECT DriverObject, PUNICODE_STRING RegistryPath)
{
DbgPrint("first: Hello, my salary!");
DriverObject->DriverUnload = DriverUnload;
return STATUS_SUCCESS;
}
|