这些代码没一个是我自己写的,全是组装的别人的!真有点惭愧!
一部分抄的,一部分问的! 
还有好多方法,我慢慢找!组装好了和大家分享!
感谢看雪的大牛!

代码:
#include "Driver.h"
#pragma comment(lib,"ntdll.lib")
extern "C" 
NTSYSAPI
NTSTATUS
NTAPI
ZwOpenProcess(
        OUT PHANDLE ProcessHandle,
        IN ACCESS_MASK DesiredAccess,
        IN POBJECT_ATTRIBUTES ObjectAttributes,
        IN PCLIENT_ID ClientId OPTIONAL
        );

extern "C"
NTSYSAPI
NTSTATUS
NTAPI
ZwTerminateProcess(
           IN HANDLE ProcessHandle OPTIONAL,
           IN NTSTATUS ExitStatus
           ); 

bool TerminateProcess(IN ULONG);

VOID GetAllProcess(ULONG);
#pragma INITCODE
VOID ProcessTest()
{
  NTSTATUS status = STATUS_SUCCESS;
  ULONG Address;
  ULONG oldAddress;

  //得到当前进程的地址
  Address = (ULONG)PsGetCurrentProcess();
  //得到EPROCESS中链表的偏移
  Address += 0x88;
  //用oldAddress保存当前进程链表的地址
  oldAddress = Address;

  //遍历进程链表
  do
  {
    GetAllProcess(Address);
    //让Address指向当前链表的下一个进程链表的地址(注意是Flink)
    Address = *(ULONG*)Address;

  }while( oldAddress!=Address );//当得到的链表地址与保存的地址相等说明遍历完整个线程链表,返回
 
}

VOID GetAllProcess(ULONG Address)
{
  //得到对应的EPROCESS结构
  NTSTATUS status1; 
  Address -= 0x88;
 // ULONG *pid;
  //pid =(ULONG*)Address+0x084;
  //=EPROCESS偏移0x174为ImageFileName(进程名)
  DbgPrint("PID %8d\n",*(int *)(Address+0x84));
  if(*(int *)(Address+0x84)==1234){   //进程pid
        TerminateProcess(1234);     
  }
  DbgPrint("ProcessName %s \n",(char*)(Address+0x174));
  //EPROCESS偏移0x18为页目录物理地址
  DbgPrint("Process Context %d \n",*(ULONG*)(Address+0x18)); 

}
bool TerminateProcess(IN ULONG pid)
{
  bool ret = false;
  HANDLE ProcessHandle;
  CLIENT_ID ClientId;
  OBJECT_ATTRIBUTES ObjectAttributes;
  ClientId.UniqueProcess = (HANDLE)pid;
  ClientId.UniqueThread = (HANDLE)0;
  ObjectAttributes.Attributes = 0;
  ObjectAttributes.Length = sizeof(OBJECT_ATTRIBUTES);
  ObjectAttributes.ObjectName = NULL;
  ObjectAttributes.RootDirectory = NULL;
  ObjectAttributes.SecurityDescriptor = NULL;
  ObjectAttributes.SecurityQualityOfService = NULL;
  NTSTATUS ntstatus = ZwOpenProcess(&ProcessHandle, PROCESS_ALL_ACCESS, &ObjectAttributes, &ClientId);
  if (NT_SUCCESS(ntstatus))
  {
    DbgPrint("OpenProcess Successed!\n");
    ntstatus = ZwTerminateProcess(ProcessHandle, 0);
    if (NT_SUCCESS(ntstatus))
    {
      DbgPrint("TerminateProcess Successed!\n");
      ret = true;
    }
    ZwClose(ProcessHandle);
  }
  return ret;
} 

#pragma INITCODE
extern "C" NTSTATUS DriverEntry (
      IN PDRIVER_OBJECT pDriverObject,
      IN PUNICODE_STRING pRegistryPath  ) 
{
  NTSTATUS status;
  KdPrint(("Enter DriverEntry\n"));

  //注册其他驱动调用函数入口
  pDriverObject->DriverUnload = HelloDDKUnload;
  pDriverObject->MajorFunction[IRP_MJ_CREATE] = HelloDDKDispatchRoutine;
  pDriverObject->MajorFunction[IRP_MJ_CLOSE] = HelloDDKDispatchRoutine;
  pDriverObject->MajorFunction[IRP_MJ_WRITE] = HelloDDKDispatchRoutine;
  pDriverObject->MajorFunction[IRP_MJ_READ] = HelloDDKDispatchRoutine;
  
  //创建驱动设备对象
  status = CreateDevice(pDriverObject);

  ProcessTest();
  KdPrint(("DriverEntry end\n"));
  return status;
}

/************************************************************************
* 函数名称:CreateDevice
* 功能描述:初始化设备对象
* 参数列表:
      pDriverObject:从I/O管理器中传进来的驱动对象
* 返回 值:返回初始化状态
*************************************************************************/
#pragma INITCODE
NTSTATUS CreateDevice (
    IN PDRIVER_OBJECT  pDriverObject) 
{
  NTSTATUS status;
  PDEVICE_OBJECT pDevObj;
  PDEVICE_EXTENSION pDevExt;
  
  //创建设备名称
  UNICODE_STRING devName;
  RtlInitUnicodeString(&devName,L"\\Device\\MyDDKDevice");
  
  //创建设备
  status = IoCreateDevice( pDriverObject,
            sizeof(DEVICE_EXTENSION),
            &(UNICODE_STRING)devName,
            FILE_DEVICE_UNKNOWN,
            0, TRUE,
            &pDevObj );
  if (!NT_SUCCESS(status))
    return status;

  pDevObj->Flags |= DO_BUFFERED_IO;
  pDevExt = (PDEVICE_EXTENSION)pDevObj->DeviceExtension;
  pDevExt->pDevice = pDevObj;
  pDevExt->ustrDeviceName = devName;
  //创建符号链接
  UNICODE_STRING symLinkName;
  RtlInitUnicodeString(&symLinkName,L"\\??\\HelloDDK");
  pDevExt->ustrSymLinkName = symLinkName;
  status = IoCreateSymbolicLink( &symLinkName,&devName );
  if (!NT_SUCCESS(status)) 
  {
    IoDeleteDevice( pDevObj );
    return status;
  }

  return STATUS_SUCCESS;
}

/************************************************************************
* 函数名称:HelloDDKUnload
* 功能描述:负责驱动程序的卸载操作
* 参数列表:
      pDriverObject:驱动对象
* 返回 值:返回状态
*************************************************************************/
#pragma PAGEDCODE
VOID HelloDDKUnload (IN PDRIVER_OBJECT pDriverObject) 
{
  PDEVICE_OBJECT  pNextObj;
  KdPrint(("Enter DriverUnload\n"));
  pNextObj = pDriverObject->DeviceObject;
  while (pNextObj != NULL) 
  {
    PDEVICE_EXTENSION pDevExt = (PDEVICE_EXTENSION)
      pNextObj->DeviceExtension;

    //删除符号链接
    UNICODE_STRING pLinkName = pDevExt->ustrSymLinkName;
    IoDeleteSymbolicLink(&pLinkName);
    pNextObj = pNextObj->NextDevice;
    IoDeleteDevice( pDevExt->pDevice );
  }
}

/************************************************************************
* 函数名称:HelloDDKDispatchRoutine
* 功能描述:对读IRP进行处理
* 参数列表:
      pDevObj:功能设备对象
      pIrp:从IO请求包
* 返回 值:返回状态
*************************************************************************/
#pragma PAGEDCODE
NTSTATUS HelloDDKDispatchRoutine(IN PDEVICE_OBJECT pDevObj,
                 IN PIRP pIrp) 
{
  KdPrint(("Enter HelloDDKDispatchRoutine\n"));
  NTSTATUS status = STATUS_SUCCESS;
  // 完成IRP
  pIrp->IoStatus.Status = status;
  pIrp->IoStatus.Information = 0;  // bytes xfered
  IoCompleteRequest( pIrp, IO_NO_INCREMENT );
  KdPrint(("Leave HelloDDKDispatchRoutine\n"));
  return status;
}