驱动开发模板
WDK7600的ISO在MS站点上,备份了一份到CSDN.
//伪驱动,可以安装卸载, 适合做别的Demo的模板
//wdk7600命令行编译, winxpSp3
makefile
!INCLUDE $(NTMAKEENV)/makefile.def
Sources
DRIVERTYPE=WDM
TARGETNAME=LsDrvBody
TARGETTYPE=DRIVER
TAGETPATH=OBJ
SOURCES= /
DrvBody.c /
DrvBody.inf
;//修改末尾的串表, 可以作为不同驱动的inf模板
[Version]
Signature="$CHICAGO$"
Provider=%ProviderName%
DriverVer=%DriverVerName_Date%,%DriverVerName_Ver%
Class=%DriverClassName%
ClassGUID=%DriverClassGUID%
[SourceDisksNames]
1 = %DriverNamePerfix%,Disk1,,
[SourceDisksFiles]
%DriverName% = 1,,
[ClassInstall32]
Addreg=Class_AddReg
[Class_AddReg]
HKR,,,,%DeviceClassName%
HKR,,Icon,,"-5"
[DestinationDirs]
YouMark_Files_Driver = 10,System32/Drivers
[Manufacturer]
%MfgName%=Mfg0
[Mfg0]
%DeviceDesc%=YouMark_DDI, PCI/VEN_9999&DEV_9999
[YouMark_DDI.NT]
CopyFiles=YouMark_Files_Driver
AddReg=YouMark_NT_AddReg
[YouMark_DDI.NT.Services]
Addservice = %DriverNamePerfix%, 0x00000002, YouMark_AddService
[YouMark_AddService]
DisplayName = %SvcDesc%
ServiceType = 1 ; SERVICE_KERNEL_DRIVER
StartType = 3 ; SERVICE_DEMAND_START
ErrorControl = 1 ; SERVICE_ERROR_NORMAL
ServiceBinary = %10%/System32/Drivers/%DriverName%
[YouMark_NT_AddReg]
HKLM, "System/CurrentControlSet/Services/"%DriverNamePerfix%"/Parameters",/
"BreakOnEntry", 0x00010001, 0
[YouMark_Files_Driver]
%DriverName%
[Strings]
ProviderName="LostSpeed"
MfgName="LsSoft"
DeviceDesc="LsSoft:驱动开发框架"
DeviceClassName="LsSoft驱动集"
SvcDesc="LostSpeed的驱动的驱动开发框架演示"
DriverName="LsDrvBody.sys"
DriverNamePerfix="LsSoftDrvBody"
DriverClassName="LostSpeedDriverClass"
DriverClassGUID="{8E86531B-8583-46ce-8EDB-04EF79259C95}"
;M/D/Y
DriverVerName_Date="12/16/2009"
DriverVerName_Ver="1.0.0.1"
DrvBody.h
//FileName: DrvBody.h
#ifndef _DRVBODY_H_
#define _DRVBODY_H_
#include <ntddk.h>
typedef struct _DEVICE_EXTENSION
{
PDEVICE_OBJECT fdo;
PDEVICE_OBJECT NextStackDevice;
UNICODE_STRING ustrDeviceName; // 设备名
UNICODE_STRING ustrSymLinkName; // 符号链接名
} DEVICE_EXTENSION, *PDEVICE_EXTENSION;
#define arraysize(p) (sizeof(p)/sizeof((p)[0]))
NTSTATUS HelloWDMAddDevice(
PDRIVER_OBJECT DriverObject,
PDEVICE_OBJECT PhysicalDeviceObject);
NTSTATUS HelloWDMPnp(
IN PDEVICE_OBJECT fdo,
IN PIRP Irp);
NTSTATUS HelloWDMDispatchRoutine(
IN PDEVICE_OBJECT fdo,
IN PIRP Irp);
void HelloWDMUnload(
IN PDRIVER_OBJECT DriverObject);
NTSTATUS DriverEntry(
IN PDRIVER_OBJECT DriverObject,
IN PUNICODE_STRING RegistryPath);
#endif //_DRVBODY_H_
DrvBody.c
//FileName: DrvBody.c
#include "DrvBody.h"
NTSTATUS DriverEntry(
PDRIVER_OBJECT pDriverObject,
PUNICODE_STRING pRegistryPath)
{
INT n = 0;
//{{派遣函数表
//必须, 否则安装驱动时蓝屏
//有了派遣函数表, 可以正常卸载此驱动
//派遣函数中只要简单的 return STATUS_SUCCESS; 就可以
for (n = 0; n < arraysize(pDriverObject->MajorFunction); n++)
pDriverObject->MajorFunction[n] = HelloWDMDispatchRoutine;
pDriverObject->DriverExtension->AddDevice = HelloWDMAddDevice;
pDriverObject->MajorFunction[IRP_MJ_PNP] = HelloWDMPnp;
pDriverObject->DriverUnload = HelloWDMUnload;
//}}派遣函数表
return STATUS_SUCCESS;
}
NTSTATUS HelloWDMAddDevice(
PDRIVER_OBJECT DriverObject,
PDEVICE_OBJECT PhysicalDeviceObject)
{
return STATUS_SUCCESS;
}
NTSTATUS DefaultPnpHandler(
PDEVICE_EXTENSION pdx,
PIRP Irp)
{
return STATUS_SUCCESS;
}
NTSTATUS HandleRemoveDevice(
PDEVICE_EXTENSION pdx,
PIRP Irp)
{
return STATUS_SUCCESS;
}
NTSTATUS HelloWDMPnp(
PDEVICE_OBJECT fdo,
PIRP Irp)
{
return STATUS_SUCCESS;
}
NTSTATUS HelloWDMDispatchRoutine(
PDEVICE_OBJECT fdo,
PIRP Irp)
{
return STATUS_SUCCESS;
}
void HelloWDMUnload(
PDRIVER_OBJECT DriverObject)
{
return;
}
更多推荐



所有评论(0)