⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bulkwdm98.cpp

📁 利用C8051F320的USB传输实例
💻 CPP
字号:

#include "wdm.h"
#include "intwdm98.h"


typedef VOID (NTAPI *PIO_WORKITEM_ROUTINE)(PDEVICE_OBJECT DeviceObject, PVOID Context);

struct _IO_WORKITEM : public _WORK_QUEUE_ITEM {
	PDEVICE_OBJECT DeviceObject;
	PIO_WORKITEM_ROUTINE Routine;
	PVOID Context;
	};
typedef struct _IO_WORKITEM IO_WORKITEM, *PIO_WORKITEM;

///////////////////////////////////////////////////////////////////////////////

VOID CallbackWrapper(PIO_WORKITEM item)
	{							// CallbackWrapper
	(*item->Routine)(item->DeviceObject, item->Context);
	ObDereferenceObject(item->DeviceObject);
	}	
///////////////////////////////////////////////////////////////////////////////

PIO_WORKITEM AllocateWorkItem(PDEVICE_OBJECT DeviceObject)
	{							// AllocateWorkItem
	PIO_WORKITEM item = (PIO_WORKITEM) ExAllocatePool(NonPagedPool, sizeof(_IO_WORKITEM));
	item->DeviceObject = DeviceObject;
	return item;
	}							// AllocateWorkItem


///////////////////////////////////////////////////////////////////////////////

VOID FreeWorkItem(PIO_WORKITEM item)
	{							// FreeWorkItem
	ExFreePool(item);
	}							// FreeWorkItem

///////////////////////////////////////////////////////////////////////////////

VOID QueueWorkItem(PIO_WORKITEM item, PIO_WORKITEM_ROUTINE Routine, WORK_QUEUE_TYPE QueueType, PVOID Context)
	{							// QueueWorkItem
	ExInitializeWorkItem(item, (PWORKER_THREAD_ROUTINE) CallbackWrapper, item);
	item->Context = Context;
	item->Routine = Routine;
	ObReferenceObject(item->DeviceObject);
	ExQueueWorkItem(item, QueueType);
	}							// QueueWorkItem

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -