标签:main函数 return 数据 unknown form 操作 world src img
内核基础知识介绍:
内核概述:Interx86系列处理器使用“环”的概念实施访问控制,共4个权限级别。一般情况下,操作系统的内核程序、驱动程序等都在Ring0级别上运行。研究内核漏洞,需要首先掌握一些内核基础知识、例如内核驱动程序的开发、编译和运行,以及内核中重要的数据结构等。
驱动编写之Hello World
代码,保存为Helloworld.c 路径 D:\0day\HelloWorld\helloworld.c
#include <ntddk.h> #define DEVICE_NAME L"\\Device\\HelloWorld" #define DEVICE_LINK L"\\DosDevices\\HelloWorld" // 创建的设备对象指针 PDEVICE_OBJECT g_DeviceObject; // 驱动卸载函数 VOID DriverUnload(IN PDRIVER_OBJECT driverObject){ // 什么都不用做,打印一句话,helloword就这套路 KdPrint(("DriverUnload: 88!\n")); } // 驱动派遣例程函数 NTSTATUS DrvDispatch(IN PDEVICE_OBJECT driverObject, IN PIRP pIrp){ KdPrint(("Enter DrvDispatch\n")); // 设置IRP的完成状态 pIrp->IoStatus.Status = STATUS_SUCCESS; // 设置IRP的操作字节数 pIrp->IoStatus.Information = 0; // 完成IRP处理 IoCompleteRequest(pIrp, IO_NO_INCREMENT); return STATUS_SUCCESS; } // 驱动入口函数(相当于main函数) NTSTATUS DriverEntry(IN PDRIVER_OBJECT driverObject, IN PUNICODE_STRING registryPath){ NTSTATUS ntStatus; UNICODE_STRING devname; UNICODE_STRING symLinkName; int i; // 打印一句调试信息 KdPrint(("DriverEntry: Hello world driver demo!")); // 设置该驱动对象的卸载函数 //driverObject->DriverUnload = DriverUnload; // 创建设备 RtlInitUnicodeString(&devname, DEVICE_NAME); ntStatus = IoCreateDevice(driverObject, 0, &devname, FILE_DEVICE_UNKNOWN, 0, TRUE, &g_DeviceObject); if (!NT_SUCCESS(ntStatus)) { return ntStatus; } // 创建符号链接 RtlInitUnicodeString(&symLinkName, DEVICE_LINK); ntStatus = IoCreateSymbolicLink(&symLinkName, &devname); if (!NT_SUCCESS(ntStatus)){ IoDeleteDevice(g_DeviceObject); return ntStatus; } // 设置该驱动对象的派遣例程函数 for (i = 0; i < IRP_MJ_MAXIMUM_FUNCTION; i++){ driverObject->MajorFunction[i] = DrvDispatch; } // 返回成功结果 return STATUS_SUCCESS; }
安装WDK
标签:main函数 return 数据 unknown form 操作 world src img
原文地址:http://www.cnblogs.com/Ccmr/p/7355306.html