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/