HookNdis.cpp
上传用户:yitai_qhd
上传日期:2008-04-24
资源大小:31k
文件大小:1k
开发平台:

Visual C++

  1. #include "hookndis.h"
  2. //#include "init.h"
  3. #include "hook.h"
  4. #include "myfun.h"
  5. //#include "fun.h"
  6. PVOID m_NdisBaseAddress=NULL;
  7. /*#pragma comment(lib,"ntoskrnl.lib")
  8. #pragma comment(lib,"wdm.lib")
  9. #pragma comment(lib,"libcntpr.lib")*/
  10. BOOLEAN GetNdisModuleAddress(PVOID m_BaseAddr)
  11. {
  12. BOOLEAN bReturn = FALSE;
  13.     ULONG nSize, i, nCount, nLength;
  14.     PULONG pBuffer=NULL;
  15.     PSYSTEM_MODULE_INFORMATION pModule;
  16. //    KIRQL OldIrql;
  17.     // 得到模块信息共需要的缓冲区大小
  18.     ZwQuerySystemInformation(11, &nSize, 0, &nSize);
  19.     // 申请内存空间
  20. pBuffer = (PULONG)ExAllocatePool(NonPagedPool, nSize);
  21.     // 得到所有的核心模块信息
  22.     ZwQuerySystemInformation(11, pBuffer, nSize, 0);
  23.     // 得到模块的个数
  24.     //
  25.     nCount = *pBuffer;
  26.     // 得到模块信息记录的指针
  27.     //
  28.     pModule = (PSYSTEM_MODULE_INFORMATION)(pBuffer + 1);
  29.     // 循环查找 Ndis.sys 模块
  30.     //
  31.     for(i = 0; i < nCount; i++)
  32.     {
  33.         nLength = strlen(pModule[i].Name);
  34.         if(nLength >= 8 
  35.             && _stricmp(pModule[i].Name + (nLength - 8), "ndis.sys") == 0)//进行对比
  36.         {
  37.             //
  38.             // 找到 Ndis.sys 模块,将基地址保存到m_NdisBaseAddress
  39.             //
  40.             m_NdisBaseAddress = pModule[i].BaseAddress;
  41. m_BaseAddr=m_NdisBaseAddress;
  42.             bReturn = TRUE;
  43.             break;
  44.         }
  45.     }
  46.     // 释放内存
  47. ExFreePool(pBuffer);
  48.     return bReturn;
  49. }