WDK7600的ISO在MS站点上,备份了一份到CSDN.

GRMWDK_EN_7600_1_iso.7z


//伪驱动,可以安装卸载, 适合做别的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;
}


更多推荐