#include <ntddk.h>
typedef struct _strNode{
LIST_ENTRY Entry;
int x;
int y;
}Node, *pNode;
pNode SetNode(void){
pNode Head, A;
Head = (pNode)ExAllocatePool(PagedPool, sizeof(Node));
InitializeListHead(&Head->Entry);
Head->x = 0;
Head->y = 0;
for (int i = 1; i <= 5; i++){
A = (pNode)ExAllocatePool(PagedPool, sizeof(Node));
A->x = i;
A->y = i + 1;
InsertHeadList(&Head->Entry, &A->Entry);
}
return Head;
}
void GetPrint(pNode head){
pNode temp;
temp = head;
if (temp != NULL){
do{
DbgPrint("节点 %d = %x,Next = %x, prior = %x, x = %d, y = %d \n",
temp->x, temp, temp->Entry.Flink, temp->Entry.Blink, temp->x, temp->y);
temp = (pNode)temp->Entry.Blink;
} while (!(temp == head));
}
return;
}
extern "C" NTSTATUS DriverEntry(PDRIVER_OBJECT pDriverObject, PUNICODE_STRING pUnicodeString)
{
KdPrint(("PNDGMCSY--加载"));
pDriverObject->DriverUnload = DDK_Unload;
CreateMyDevice(pDriverObject);
MemoryOpe();
pDriverObject->MajorFunction[IRP_MJ_CREATE] = ddk_DispatchRoutine;
pDriverObject->MajorFunction[IRP_MJ_CLOSE] = ddk_DispatchRoutine;
pDriverObject->MajorFunction[IRP_MJ_READ] = ddk_DispatchRoutine;
pDriverObject->MajorFunction[IRP_MJ_WRITE] = ddk_DispatchRoutine;
pDriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = ddk_DispatchRoutine;
GetPrint(SetNode());
return 0;
}