找回密码
 加入我们

QQ登录

只需一步,快速开始

搜索
查看: 19583|回复: 13

用驱动实现自己的 ZwOpenProcess ZwReadVirtualMemory ZwWriteVirtualMemory

 火... [复制链接]

20

主题

6

回帖

2

精华

核心会员

积分
2355
发表于 2010-12-16 19:56:39 | 显示全部楼层 |阅读模式
前几天网路上看到的驱动程式码

用WDK 7600.16385.1编译不出来sys我完全不会用 看教学做编译失败
请问有办法编译成sys
我只有学过VB6能力不够 呜呜

希望能编译成sys能让VB使用这各驱动 请求大大帮忙了


// jhxxs.C

#include "dbghelp.h"
#include "jhxxs.h"
#include <stdio.h>

#include <ntdef.h>
#include <ntstatus.h>
#include <ntddk.h>
//
// A structure representing the instance information associated with
// a particular device
//

typedef struct _DEVICE_EXTENSION
{
    ULONG StateVariable;

} DEVICE_EXTENSION, *PDEVICE_EXTENSION;

typedef struct _KAPC_STATE{
        LIST_ENTRY        ApcListHead[2];
        PEPROCESS        Process;
        UCHAR                KernelApcInProgress;
        UCHAR                KernelApcPending;
        UCHAR                UserApcPending;
}KAPC_STATE,*PKAPC_STATE;

NTKERNELAPI void KeStackAttachProcess(IN PEPROCESS Process, OUT PKAPC_STATE ApcState);


NTKERNELAPI void KeUnstackDetachProcess(IN PKAPC_STATE ApcState);


NTKERNELAPI NTSTATUS PsLookupProcessByProcessId(IN ULONG ulProcId,OUT PEPROCESS * pEProcess);

NTKERNELAPI NTSTATUS ObOpenObjectByPointer(
    IN PVOID Object,                                          
    IN ULONG HandleAttributes,                                 
    IN PACCESS_STATE PassedAccessState OPTIONAL,               
    IN ACCESS_MASK DesiredAccess OPTIONAL,                     
    IN POBJECT_TYPE ObjectType OPTIONAL,                       
    IN KPROCESSOR_MODE AccessMode,                             
    OUT PHANDLE Handle                                         
        );
//
// Device driver routine declarations.
//

NTSTATUS
DriverEntry(
        IN PDRIVER_OBJECT                DriverObject,
        IN PUNICODE_STRING                RegistryPath
        );

NTSTATUS
JhxxsDispatchCreate(
        IN PDEVICE_OBJECT                DeviceObject,
        IN PIRP                                        Irp
        );

NTSTATUS
JhxxsDispatchClose(
        IN PDEVICE_OBJECT                DeviceObject,
        IN PIRP                                        Irp
        );

NTSTATUS
JhxxsDispatchDeviceControl(
        IN PDEVICE_OBJECT                DeviceObject,
        IN PIRP                                        Irp
        );

VOID
JhxxsUnload(
        IN PDRIVER_OBJECT                DriverObject
        );


#ifdef ALLOC_PRAGMA
#pragma alloc_text(INIT, DriverEntry)
#pragma alloc_text(PAGE, JhxxsDispatchCreate)
#pragma alloc_text(PAGE, JhxxsDispatchClose)
#pragma alloc_text(PAGE, JhxxsDispatchDeviceControl)
#pragma alloc_text(PAGE, JhxxsUnload)
#endif // ALLOC_PRAGMA

NTSTATUS
MyWriteMemory(IN HANDLE hProcess,OUT PVOID BaseAddress,IN PVOID Pbuff,IN ULONG BufferSize)
{
PEPROCESS EProcess;
KAPC_STATE ApcState;
PVOID writebuffer=NULL;
NTSTATUS status;

status = ObReferenceObjectByHandle(
                  hProcess,
                  PROCESS_VM_WRITE|PROCESS_VM_READ,
                  NULL,
                  KernelMode,
                  &EProcess,
                  NULL
                  );
                 
if(!NT_SUCCESS(status))
{
ObDereferenceObject(EProcess);
return STATUS_UNSUCCESSFUL;
}
writebuffer = ExAllocatePoolWithTag (NonPagedPool, BufferSize, 'Sys');

if(writebuffer==NULL)
{
ObDereferenceObject(EProcess);
ExFreePool (writebuffer);
return STATUS_UNSUCCESSFUL;
}
*(ULONG*)writebuffer=(ULONG)0x1;

if (MmIsAddressValid(Pbuff))
{
__try
{
ProbeForRead ((CONST PVOID)Pbuff, BufferSize, sizeof(CHAR));
RtlCopyMemory (writebuffer, Pbuff, BufferSize);
}
__except(EXCEPTION_EXECUTE_HANDLER)
{
status = STATUS_UNSUCCESSFUL;
}
}
else
{
status = STATUS_UNSUCCESSFUL;
}

if (NT_SUCCESS(status))
{
KeStackAttachProcess (EProcess, &ApcState);
if (MmIsAddressValid(BaseAddress))
{
__try
{
ProbeForWrite ((CONST PVOID)BaseAddress, BufferSize, sizeof(CHAR));
RtlCopyMemory (BaseAddress,writebuffer, BufferSize);
}
__except(EXCEPTION_EXECUTE_HANDLER)
{
status = STATUS_UNSUCCESSFUL;
}
}
else
{
status = STATUS_UNSUCCESSFUL;
}
KeUnstackDetachProcess (&ApcState);
}

ObDereferenceObject(EProcess);
ExFreePool (writebuffer);
return status;
}


NTSTATUS
MyReadMemory(IN HANDLE hProcess,IN PVOID BaseAddress,OUT PVOID Pbuff,IN ULONG BufferSize)
{
PEPROCESS EProcess;
KAPC_STATE ApcState;
PVOID readbuffer=NULL;
NTSTATUS status;


status = ObReferenceObjectByHandle(
                  hProcess,
                  PROCESS_VM_WRITE|PROCESS_VM_READ,
                  NULL,
                  KernelMode,
                  &EProcess,
                  NULL
                  );


if(!NT_SUCCESS(status))
{
ObDereferenceObject(EProcess);
return STATUS_UNSUCCESSFUL;
}

readbuffer = ExAllocatePoolWithTag (NonPagedPool, BufferSize, 'Sys');

if(readbuffer==NULL)
{
ObDereferenceObject(EProcess);
ExFreePool (readbuffer);
return STATUS_UNSUCCESSFUL;
}
*(ULONG*)readbuffer=(ULONG)0x1;


KeStackAttachProcess (EProcess, &ApcState);
if (MmIsAddressValid(BaseAddress))
{
__try
{
ProbeForRead ((CONST PVOID)BaseAddress, BufferSize, sizeof(CHAR));
RtlCopyMemory (readbuffer, BaseAddress, BufferSize);
}
__except(EXCEPTION_EXECUTE_HANDLER)
{
status = STATUS_UNSUCCESSFUL;
}
}
else
{
status = STATUS_UNSUCCESSFUL;
}
KeUnstackDetachProcess (&ApcState);


if(NT_SUCCESS(status))
{
        if (MmIsAddressValid(Pbuff))
        {
        __try
        {
        ProbeForWrite(Pbuff, BufferSize, sizeof(CHAR));
        RtlCopyMemory (Pbuff, readbuffer, BufferSize);
        }
        __except(EXCEPTION_EXECUTE_HANDLER)
        {
        status = STATUS_UNSUCCESSFUL;
        }
        }
        else
        {
        status = STATUS_UNSUCCESSFUL;
        }
}

ObDereferenceObject(EProcess);
ExFreePool (readbuffer);
return status;
}

NTSTATUS MyOpenProcess(ULONG PID, PHANDLE pHandle)
{
NTSTATUS status;
PEPROCESS EProcess = NULL;
HANDLE    handle = NULL;
UNICODE_STRING y;
PULONG    PsProcessType;

status = PsLookupProcessByProcessId(PID, &EProcess);
if (NT_SUCCESS(status))
{
    handle = 0;
    RtlInitUnicodeString(&y, L"PsProcessType");
    PsProcessType = MmGetSystemRoutineAddress(&y);
    if (PsProcessType)
    {
      status = ObOpenObjectByPointer(EProcess, 0, 0, PROCESS_ALL_ACCESS, (PVOID)*PsProcessType, UserMode, &handle);
      if (NT_SUCCESS(status))
      {
                *pHandle = handle;
      }
    }
    ObfDereferenceObject(EProcess);
}
return status;
}


NTSTATUS
DriverEntry(
        IN PDRIVER_OBJECT                DriverObject,
        IN PUNICODE_STRING                RegistryPath
        )
{
        NTSTATUS                        status = STATUS_SUCCESS;   
    UNICODE_STRING                ntDeviceName;
        UNICODE_STRING                dosDeviceName;
    PDEVICE_EXTENSION        deviceExtension;
        PDEVICE_OBJECT                deviceObject = NULL;
        BOOLEAN                                fSymbolicLink = FALSE;

        KdBreakPoint();
        RtlInitUnicodeString(&ntDeviceName, JHXXS_DEVICE_NAME_W);
    status = IoCreateDevice(
                DriverObject,
                sizeof(DEVICE_EXTENSION),
                &ntDeviceName,
                FILE_DEVICE_JHXXS,
                0,
                TRUE,
                &deviceObject
                );

    if (!NT_SUCCESS(status))
        {
                goto __failed;
        }

        deviceExtension = (PDEVICE_EXTENSION)deviceObject->DeviceExtension;
        RtlInitUnicodeString(&dosDeviceName, JHXXS_DOS_DEVICE_NAME_W);
        status = IoCreateSymbolicLink(&dosDeviceName, &ntDeviceName);
    if (!NT_SUCCESS(status))
        {
                goto __failed;
    }

        fSymbolicLink = TRUE;

    DriverObject->MajorFunction[IRP_MJ_CREATE]        = JhxxsDispatchCreate;
    DriverObject->MajorFunction[IRP_MJ_CLOSE]          = JhxxsDispatchClose;
    DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = JhxxsDispatchDeviceControl;
    DriverObject->DriverUnload                        = JhxxsUnload;

    if (NT_SUCCESS(status))
            return status;

__failed:
        if (fSymbolicLink)
                IoDeleteSymbolicLink(&dosDeviceName);
        if (deviceObject)
                IoDeleteDevice(deviceObject);
        return status;
}

NTSTATUS
JhxxsDispatchCreate(
        IN PDEVICE_OBJECT                DeviceObject,
        IN PIRP                                        Irp
        )
{
        NTSTATUS status = STATUS_SUCCESS;

        Irp->IoStatus.Information = 0;
    Irp->IoStatus.Status = status;
    IoCompleteRequest(Irp, IO_NO_INCREMENT);

    return status;
}

NTSTATUS
JhxxsDispatchClose(
        IN PDEVICE_OBJECT                DeviceObject,
        IN PIRP                                        Irp
        )
{
        NTSTATUS status = STATUS_SUCCESS;
    Irp->IoStatus.Information = 0;
        Irp->IoStatus.Status = status;
    IoCompleteRequest(Irp, IO_NO_INCREMENT);

    return status;
}

NTSTATUS
JhxxsDispatchDeviceControl(
        IN PDEVICE_OBJECT                DeviceObject,
        IN PIRP                                        Irp
        )
{
        NTSTATUS                        status = STATUS_SUCCESS;
    PIO_STACK_LOCATION        irpStack;
    PDEVICE_EXTENSION        deviceExtension;
        PVOID                                ioBuf;
    ULONG                                inBufLength, outBufLength;
        ULONG                                ioControlCode;

        UCHAR              *buff =0;
        ULONG              OutByteCount =0;

        HANDLE              Writehandel;
        PVOID              WriteDstAddr;
        PVOID              WriteSrcAddr;
        ULONG              WriteSize;
        NTSTATUS            WriteReturn;

        HANDLE              Readhandel;
        PVOID              ReadBaseAddr;
        PVOID              ReadBuffer;
        ULONG              ReadSize;
        NTSTATUS            ReadReturn;

        ULONG              OpenPid;
        PHANDLE            PProcessHandle;
        NTSTATUS            OpenReturn;

    irpStack = IoGetCurrentIrpStackLocation(Irp);
    deviceExtension = (PDEVICE_EXTENSION)DeviceObject->DeviceExtension;
        Irp->IoStatus.Information = 0;
        ioBuf = Irp->AssociatedIrp.SystemBuffer;
        inBufLength = irpStack->;Parameters.DeviceIoControl.InputBufferLength;
    outBufLength = irpStack->;Parameters.DeviceIoControl.OutputBufferLength;
    ioControlCode = irpStack->;Parameters.DeviceIoControl.IoControlCode;

    switch (ioControlCode)
        {
        case 0X0022E004:
                {
                buff=(UCHAR *)Irp->AssociatedIrp.SystemBuffer ;
                memmove(&Writehandel,&buff[0],4);
                memmove(&WriteDstAddr,&buff[4],4);
                memmove(&WriteSrcAddr,&buff[8],4);
                memmove(&WriteSize,&buff[12],4);

                WriteReturn=MyWriteMemory(Writehandel,WriteDstAddr,WriteSrcAddr,WriteSize);
                memmove(Irp->AssociatedIrp.SystemBuffer,&WriteReturn,4);
                OutByteCount=4;
                break;
                }

        case 0X0022E008:
                {
                buff=(UCHAR *)Irp->AssociatedIrp.SystemBuffer ;
                memmove(&Readhandel,&buff[0],4);
                memmove(&ReadBaseAddr,&buff[4],4);
                memmove(&ReadBuffer,&buff[8],4);
                memmove(&ReadSize,&buff[12],4);

                ReadReturn=MyReadMemory(Readhandel,ReadBaseAddr,ReadBuffer,ReadSize);
                memmove(&buff[0],&ReadReturn,4);
                OutByteCount=4;
                break;
                }

        case 0X0022E000:
                {
                OpenReturn = MyOpenProcess(*(PULONG)ioBuf,ioBuf);
                buff=(UCHAR *)Irp->AssociatedIrp.SystemBuffer ;
                memmove(&buff[4],&OpenReturn,4);
                OutByteCount=8;
                break;
                }
               
        case IOCTL_JHXXS_HELLO:
                {
            break;
                }

    default:
        status = STATUS_INVALID_PARAMETER;
                break;
        }
        Irp->IoStatus.Status = status;
        Irp->IoStatus.Information = OutByteCount;
        IoCompleteRequest(Irp, IO_NO_INCREMENT);
    return status;
}

VOID
JhxxsUnload(
        IN PDRIVER_OBJECT                DriverObject
        )
{
    UNICODE_STRING dosDeviceName;
        RtlInitUnicodeString(&dosDeviceName, JHXXS_DOS_DEVICE_NAME_W);
    IoDeleteSymbolicLink(&dosDeviceName);
        IoDeleteDevice(DriverObject->DeviceObject);
}

857

主题

2632

回帖

2

精华

管理员

此生无悔入华夏,  长居日耳曼尼亚。  

积分
36130
发表于 2010-12-16 23:28:59 | 显示全部楼层
楼主可以参考一下这个帖子:http://www.m5home.com/bbs/forum.php?mod=viewthread&tid=3614
另外我的电脑已经卸载了WDK,无法帮你了。

20

主题

6

回帖

2

精华

核心会员

积分
2355
 楼主| 发表于 2010-12-18 07:46:13 | 显示全部楼层
回复 Tesla.Angela 的帖子

请问我用Microsoft Visual C++ 6.0 按 Build > Start Debug > Go 然后出现一个错误合WDK写的一个错误一样 (应该是有错误无法编译) 能请你用 C++检查吗 造成你的困扰真的很抱歉 非常想让这个驱动成功使用

857

主题

2632

回帖

2

精华

管理员

此生无悔入华夏,  长居日耳曼尼亚。  

积分
36130
发表于 2010-12-18 17:37:09 | 显示全部楼层
回复 ipaddress8086 的帖子

看来你不怎么明白我的话。。。
这个驱动编译成功了你也没用,因为游戏保护肯定会Hook Ke(Stack)AttachProcess,不可能仅仅Hook Nt***。。。
而且这么写内存肯定是不稳定的(不信你看看WRK中Nt***是怎么读写进程内存的),所以你没必要这样做。。。

275

主题

3017

回帖

1

精华

管理员

嗷嗷叫的老马

积分
17064

论坛牛人贡献奖关注奖最佳版主进步奖人气王疯狂作品奖精英奖赞助论坛勋章乐于助人勋章

QQ
发表于 2010-12-19 15:59:30 | 显示全部楼层
驱动不稳定,就是蓝.........
我就是嗷嗷叫的老马了......

20

主题

6

回帖

2

精华

核心会员

积分
2355
 楼主| 发表于 2010-12-22 06:18:03 | 显示全部楼层
回复 马大哈 的帖子

请问我看了 VB小子玩转驱动程序 文章 加入了 sources makefile 这2各档案 sources里名字有改jhxxs.c 可是还是编译时出现1各错误

会蓝  HS Inline Hook很奇特 Intel的CPU不会蓝频 而AMD的的CPU会蓝频 会不会也是像这种情况 VirtualBox这软体 体积满小的可以虚拟作业系统我是AMD的会蓝频在VirtualBox就不会

以下档案可以请看一下吗 我是哪里做错了

sys.rar

4.51 KB, 下载次数: 9360

857

主题

2632

回帖

2

精华

管理员

此生无悔入华夏,  长居日耳曼尼亚。  

积分
36130
发表于 2010-12-22 13:51:29 | 显示全部楼层
回复 ipaddress8086 的帖子

驱动的事情别找老马,老马看到驱动就蛋疼。

20

主题

6

回帖

2

精华

核心会员

积分
2355
 楼主| 发表于 2010-12-22 17:28:37 | 显示全部楼层
回复 Tesla.Angela 的帖子

看的出来 马大哈 回覆每次有驱动都感觉放弃的样子

那 我该看 VB小子玩转驱动程序文章 看到底吗

还是先学 VC++语言 再看 VB小子玩转驱动程序文章

我VC++语言的书本看一半就没再看了看的头好痛VB的模式忘不掉 不知道要不要硬的头皮看到完

857

主题

2632

回帖

2

精华

管理员

此生无悔入华夏,  长居日耳曼尼亚。  

积分
36130
发表于 2010-12-22 23:46:31 | 显示全部楼层
回复 ipaddress8086 的帖子

我的建议是:C语言和驱动一起学。

275

主题

3017

回帖

1

精华

管理员

嗷嗷叫的老马

积分
17064

论坛牛人贡献奖关注奖最佳版主进步奖人气王疯狂作品奖精英奖赞助论坛勋章乐于助人勋章

QQ
发表于 2010-12-24 17:59:57 | 显示全部楼层
的确看着驱动就蛋疼........
我就是嗷嗷叫的老马了......

857

主题

2632

回帖

2

精华

管理员

此生无悔入华夏,  长居日耳曼尼亚。  

积分
36130
发表于 2010-12-26 12:19:08 | 显示全部楼层
只有这两段有用:

  1. NTSTATUS
  2. MyWriteMemory(IN HANDLE hProcess,OUT PVOID BaseAddress,IN PVOID Pbuff,IN ULONG BufferSize)
  3. {
  4. PEPROCESS EProcess;
  5. KAPC_STATE ApcState;
  6. PVOID writebuffer=NULL;
  7. NTSTATUS status;

  8. status = ObReferenceObjectByHandle(
  9.                   hProcess,
  10.                   PROCESS_VM_WRITE|PROCESS_VM_READ,
  11.                   NULL,
  12.                   KernelMode,
  13.                   &EProcess,
  14.                   NULL
  15.                   );
  16.                  
  17. if(!NT_SUCCESS(status))
  18. {
  19. ObDereferenceObject(EProcess);
  20. return STATUS_UNSUCCESSFUL;
  21. }
  22. writebuffer = ExAllocatePoolWithTag (NonPagedPool, BufferSize, 'Sys');

  23. if(writebuffer==NULL)
  24. {
  25. ObDereferenceObject(EProcess);
  26. ExFreePool (writebuffer);
  27. return STATUS_UNSUCCESSFUL;
  28. }
  29. *(ULONG*)writebuffer=(ULONG)0x1;

  30. if (MmIsAddressValid(Pbuff))
  31. {
  32. __try
  33. {
  34. ProbeForRead ((CONST PVOID)Pbuff, BufferSize, sizeof(CHAR));
  35. RtlCopyMemory (writebuffer, Pbuff, BufferSize);
  36. }
  37. __except(EXCEPTION_EXECUTE_HANDLER)
  38. {
  39. status = STATUS_UNSUCCESSFUL;
  40. }
  41. }
  42. else
  43. {
  44. status = STATUS_UNSUCCESSFUL;
  45. }

  46. if (NT_SUCCESS(status))
  47. {
  48. KeStackAttachProcess (EProcess, &ApcState);
  49. if (MmIsAddressValid(BaseAddress))
  50. {
  51. __try
  52. {
  53. ProbeForWrite ((CONST PVOID)BaseAddress, BufferSize, sizeof(CHAR));
  54. RtlCopyMemory (BaseAddress,writebuffer, BufferSize);
  55. }
  56. __except(EXCEPTION_EXECUTE_HANDLER)
  57. {
  58. status = STATUS_UNSUCCESSFUL;
  59. }
  60. }
  61. else
  62. {
  63. status = STATUS_UNSUCCESSFUL;
  64. }
  65. KeUnstackDetachProcess (&ApcState);
  66. }

  67. ObDereferenceObject(EProcess);
  68. ExFreePool (writebuffer);
  69. return status;
  70. }


  71. NTSTATUS
  72. MyReadMemory(IN HANDLE hProcess,IN PVOID BaseAddress,OUT PVOID Pbuff,IN ULONG BufferSize)
  73. {
  74. PEPROCESS EProcess;
  75. KAPC_STATE ApcState;
  76. PVOID readbuffer=NULL;
  77. NTSTATUS status;


  78. status = ObReferenceObjectByHandle(
  79.                   hProcess,
  80.                   PROCESS_VM_WRITE|PROCESS_VM_READ,
  81.                   NULL,
  82.                   KernelMode,
  83.                   &EProcess,
  84.                   NULL
  85.                   );


  86. if(!NT_SUCCESS(status))
  87. {
  88. ObDereferenceObject(EProcess);
  89. return STATUS_UNSUCCESSFUL;
  90. }

  91. readbuffer = ExAllocatePoolWithTag (NonPagedPool, BufferSize, 'Sys');

  92. if(readbuffer==NULL)
  93. {
  94. ObDereferenceObject(EProcess);
  95. ExFreePool (readbuffer);
  96. return STATUS_UNSUCCESSFUL;
  97. }
  98. *(ULONG*)readbuffer=(ULONG)0x1;


  99. KeStackAttachProcess (EProcess, &ApcState);
  100. if (MmIsAddressValid(BaseAddress))
  101. {
  102. __try
  103. {
  104. ProbeForRead ((CONST PVOID)BaseAddress, BufferSize, sizeof(CHAR));
  105. RtlCopyMemory (readbuffer, BaseAddress, BufferSize);
  106. }
  107. __except(EXCEPTION_EXECUTE_HANDLER)
  108. {
  109. status = STATUS_UNSUCCESSFUL;
  110. }
  111. }
  112. else
  113. {
  114. status = STATUS_UNSUCCESSFUL;
  115. }
  116. KeUnstackDetachProcess (&ApcState);


  117. if(NT_SUCCESS(status))
  118. {
  119.         if (MmIsAddressValid(Pbuff))
  120.         {
  121.         __try
  122.         {
  123.         ProbeForWrite(Pbuff, BufferSize, sizeof(CHAR));
  124.         RtlCopyMemory (Pbuff, readbuffer, BufferSize);
  125.         }
  126.         __except(EXCEPTION_EXECUTE_HANDLER)
  127.         {
  128.         status = STATUS_UNSUCCESSFUL;
  129.         }
  130.         }
  131.         else
  132.         {
  133.         status = STATUS_UNSUCCESSFUL;
  134.         }
  135. }

  136. ObDereferenceObject(EProcess);
  137. ExFreePool (readbuffer);
  138. return status;
  139. }

  140. NTSTATUS MyOpenProcess(ULONG PID, PHANDLE pHandle)
  141. {
  142. NTSTATUS status;
  143. PEPROCESS EProcess = NULL;
  144. HANDLE    handle = NULL;
  145. UNICODE_STRING y;
  146. PULONG    PsProcessType;

  147. status = PsLookupProcessByProcessId(PID, &EProcess);
  148. if (NT_SUCCESS(status))
  149. {
  150.     handle = 0;
  151.     RtlInitUnicodeString(&y, L"PsProcessType");
  152.     PsProcessType = MmGetSystemRoutineAddress(&y);
  153.     if (PsProcessType)
  154.     {
  155.       status = ObOpenObjectByPointer(EProcess, 0, 0, PROCESS_ALL_ACCESS, (PVOID)*PsProcessType, UserMode, &handle);
  156.       if (NT_SUCCESS(status))
  157.       {
  158.                 *pHandle = handle;
  159.       }
  160.     }
  161.     ObfDereferenceObject(EProcess);
  162. }
  163. return status;
  164. }
复制代码
其它地方可以参考我的驱动模板。

0

主题

8

回帖

0

精华

初来乍到

积分
11
发表于 2011-2-10 19:03:13 | 显示全部楼层
學習學習

0

主题

5

回帖

0

精华

初来乍到

积分
8
发表于 2011-11-14 22:52:59 | 显示全部楼层
ObReferenceObjectByHandle  。。。。。。。。。。。。。。。。。。{:soso_e127:}{:soso_e140:}

0

主题

16

回帖

0

精华

初来乍到

积分
9
发表于 2011-11-22 14:56:07 | 显示全部楼层
a627414850 发表于 2011-11-14 22:52
ObReferenceObjectByHandle  。。。。。。。。。。。。。。。。。。

不错学习了~~~
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

快速回复 返回顶部 返回列表