Windows驱动1. Hello World

Hello World 首个程序

C
#include <ntddk.h>  // 驱动头

// 驱动卸载函数
VOID DriverUnload(PDRIVER_OBJECT pDriverObject)
{
	KdPrint(("Driver Unload\n"));
}

// 驱动入口函数
NTSTATUS DriverEntry(IN PDRIVER_OBJECT pDriverObject, IN PUNICODE_STRING pRegistryPath)
{
    // 设置卸载函数
	pDriverObject->DriverUnload = DriverUnload;
	KdPrint(("Driver Entry\n"));
	return STATUS_SUCCESS;
}
  • 每个驱动程序都必须有一个 DriverEntry 例程,该例程初始化驱动程序范围的数据结构和资源。 I/O 管理器在加载驱动程序时调用 DriverEntry 例程。

  • 每个驱动程序必须至少有一个调度例程来接收和处理 I/O 请求数据包(IRP)。 每个驱动程序必须将调度例程的入口点放置在其 DRIVER_OBJECT 结构中,以便驱动程序可以接收的每个 IRP 主要函数代码 。 驱动程序可以为每个 IRP 主要函数代码具有单独的调度例程,也可以具有一个或多个处理多个函数代码的调度例程。

  • 每个 WDM 驱动程序都必须具有 Unload 例程。 驱动程序必须将 Unload 例程的入口点置于驱动程序的驱动程序对象中。 PnP 驱动程序的 Unload 例程的责任很小,但非 PnP 驱动程序的卸载例程负责释放驱动程序正在使用的任何系统资源。

  • 每个 WDM 驱动程序都必须有 一个 AddDevice 例程,并在 驱动程序对象的驱动程序扩展 中定义其入口点。 AddDevice 例程负责为驱动程序控制的每个 PnP 设备创建和初始化设备对象。


Windows驱动1. Hello World
https://simonkimi.githubio.io/posts/20240731134145/
作者
simonkimi
发布于
2024年7月31日
许可协议