WdfDriverCreate

来源:互联网 发布:网络体彩 实体合作 编辑:程序博客网 时间:2024/06/11 16:27

WDF的DriverEntry实例:

NTSTATUSDriverEntry(    IN PDRIVER_OBJECT  DriverObject,    IN PUNICODE_STRING  RegistryPath    ){    WDF_DRIVER_CONFIG  config; //此结构说明这个驱动程序的一些可配置项,包括EvtDriverDeviceAdd和EvtDriverUnload回调函数的入口地址,这个驱动在初始化时的一些标志和这个驱动在分配内存时使用的tag值。    NTSTATUS  status = STATUS_SUCCESS;    WDF_DRIVER_CONFIG_INIT(        //一个宏,把MyEvtDeviceAdd回调函数的入口地址存入config,并且初始化config的其他部分。                           &config,                           MyEvtDeviceAdd                           );    config.EvtDriverUnload = MyEvtDriverUnload;//设置Unload函数    status = WdfDriverCreate(   //根据参数来对WDF中的一些环境进行初始化工作,并建立这个WDF驱动对象                              DriverObject, //驱动对象                              RegistryPath, //注册表路径                              WDF_NO_OBJECT_ATTRIBUTES, //属性                              &config, //WDF_DRIVER_CONFIG结构                              WDF_NO_HANDLE                              );    if (!NT_SUCCESS(status)) {        TraceEvents(                    TRACE_LEVEL_ERROR,                    DBG_PNP,                    "WdfDriverCreate failed with status %!STATUS!",                    status                    );    }    return status;}

WDF_DRIVER_CONFIG 

typedef struct _WDF_DRIVER_CONFIG {  ULONG  Size;                                     //此结构的字节大小  PFN_WDF_DRIVER_DEVICE_ADD  EvtDriverDeviceAdd;   //驱动的EvtDriverDeviceAdd回调函数  PFN_WDF_DRIVER_UNLOAD  EvtDriverUnload;          //驱动的unload函数  ULONG  DriverInitFlags;  /*初始化标志     typedef enum _WDF_DRIVER_INIT_FLAGS {    WdfDriverInitNonPnpDriver = 0x00000001,    WdfDriverInitNoDispatchOverride = 0x00000002,    WdfVerifyOn = 0x00000004,    WdfVerifierOn = 0x00000008} WDF_DRIVER_INIT_FLAGS;,*/  ULONG  DriverPoolTag; } WDF_DRIVER_CONFIG, *PWDF_DRIVER_CONFIG;


0 0
原创粉丝点击