• 大小: 567KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-05-06
  • 语言: 其他
  • 标签: 驱动,C++  

资源简介

这个是TDI驱动,本来做这个驱动的目的, 是想在应用层程序实时动态获得每个进程打开的网络端口的变化情况。 因为想不到更好的办法,同时也要兼容WIN7和WINXP,所以才使用TDI来实现。 代码是自己开发的框架,没借用tdifw等源码, 代码测试可在 64和32位位win7,winxp上运行。 除了实现获得动态变化的端口之外, 还顺便实现了每个进程的流量监控,以及每个进程的每个连接的流量情况, 还有简单的禁止某个进程访问网络,至于每个进程限速的功能,暂时没实现, 有兴趣的朋友可在此基础上做扩展, 等你做好之后就能把握理解360流量防火墙的限速的核心部分了。 应用层部分只提供了接口代码,没有做更详细的开发,有兴趣的朋友可开发。 做这驱动大概只用了10天时间,时间比较仓促,还望大牛们纠错指出。

资源截图

代码片段和文件信息

/// By Fanxiushu 2013-03-25

#include 
#include 
#include 
#include “xtdi_api.h“
#include “../driver/ioctl.h“
#pragma comment(lib“ws2_32“)

#define PORT_CHANGE_ARRAR_SIZE           500 
struct _xtdi_h_t
{
HANDLE hFile;
///
HANDLE h_thr_portchange;
    PORT_CHANGE_CBK port_change_cbk;
void* cbk_param;
struct xtdi_port_entry port_array[ PORT_CHANGE_ARRAR_SIZE ]; 
/////
};

#define DRV_NAME   “xlantdi“
static int xtdi_start_driver()
{
SC_HANDLE h_mgr;
SC_HANDLE h_svc;
char path[MAX_PATH]; 
h_mgr = OpenSCManager( NULL NULL SC_MANAGER_ALL_ACCESS );
if(!h_mgr)return -1;
h_svc = OpenService( h_mgr DRV_NAME  SERVICE_ALL_ACCESS ); 
if( !h_svc ){
char* p; path[0]=0;
// printf(“OpenService error.\n“);
GetModuleFileName( NULL path MAX_PATH ); 
p = strrchr(path‘\\‘); if(p)*p=0; strcat(path“\\xlantdi.sys“);
h_svc = CreateService(h_mgr DRV_NAME DRV_NAME SERVICE_ALL_ACCESSSERVICE_KERNEL_DRIVER
SERVICE_DEMAND_STARTSERVICE_ERROR_IGNORE path NULLNULLNULLNULLNULL );
// CloseServiceHandle( h_svc ); h_svc = 0;

}
h_svc = OpenService( h_mgr DRV_NAME  SERVICE_ALL_ACCESS ); 
if( !h_svc){
printf(““);
return -1;
}
if( !StartService( h_svc 0 NULL )){
DWORD dwRtn = GetLastError();
if( dwRtn != ERROR_IO_PENDING && dwRtn != ERROR_SERVICE_ALREADY_RUNNING ){
printf(“Start Driver Error.\n“);
}else{
///
}
}

CloseServiceHandle( h_svc );
CloseServiceHandle( h_mgr );
return 0; 
}
void* xtdi_open()
{


struct _xtdi_h_t* tdi = (struct _xtdi_h_t*)malloc( sizeof(struct _xtdi_h_t) );
if(!tdi){
return NULL;
}
tdi->cbk_param = 0; tdi->h_thr_portchange = NULL;
tdi->port_change_cbk = NULL; 
////
xtdi_start_driver();
///

tdi->hFile = CreateFile(“\\\\.\\xLanTdi“GENERIC_READ|GENERIC_WRITEFILE_SHARE_READ|FILE_SHARE_WRITE NULL 
             OPEN_EXISTING FILE_FLAG_OVERLAPPED NULL ); 
if( tdi->hFile ==(HANDLE)-1){
free( tdi );
printf( “Can not Open Device File err=%d.\n“GetLastError() );
return NULL;
}
return tdi;
}
void xtdi_close(void* handle )
{
struct _xtdi_h_t* tdi = (struct _xtdi_h_t*)handle; 
///
if( !tdi) return ;

xtdi_set_port_change( handle NULL NULL );
CloseHandle( tdi->hFile );
}

static DWORD __stdcall __xtdi_port_change_thread(void* _p)
{
struct _xtdi_h_t* tdi = (struct _xtdi_h_t*)_p;
///
HANDLE hEvent = CreateEvent( NULL FALSE FALSE NULL ); 
while( 1 ){
DWORD byte=0; OVERLAPPED ov; BOOL r;
int count = 0; int i;
memset(&ov0sizeof(ov)); ov.hEvent = hEvent; 
r = DeviceIoControl( tdi->hFile IOCTL_XTDI_CHANGE_PORT NULL 0 tdi->port_array 
sizeof(struct xtdi_port_entry)*PORT_CHANGE_ARRAR_SIZE &byte &ov );
if(!r ){
if( GetLastError() != ERROR_IO_PENDING ){ Sleep(100); continue; }
r = GetOverlappedResult( tdi->hFile &ov &byte TRUE );
if( !r ) {Sleep(100); continue; }
}
///
count = byte/siz

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件      26624  2013-03-30 01:33  bin\xlantdi.sys

     文件     237622  2013-03-30 02:09  bin\xtdi_app.exe

     文件       5241  2013-03-30 01:33  driver\buildchk_win7_x86.log

     文件       6903  2013-03-30 00:47  driver\buildfre_win7_amd64.log

     文件       1803  2013-03-29 22:59  driver\ioctl.h

     文件       1698  2013-03-25 14:52  driver\main.cpp

     文件        537  2013-03-24 17:07  driver\makefile

     文件      31624  2013-03-30 01:33  driver\objchk_win7_x86\i386\main.obj

     文件       1489  2013-03-30 01:35  driver\objchk_win7_x86\i386\main.obj.oacr.root.x86chk.pft.xml

     文件      52198  2013-03-30 01:33  driver\objchk_win7_x86\i386\obj_mgr.obj

     文件        975  2013-03-30 01:35  driver\objchk_win7_x86\i386\obj_mgr.obj.oacr.root.x86chk.pft.xml

     文件      12106  2013-03-30 01:33  driver\objchk_win7_x86\i386\rbtree.obj

     文件       2037  2013-03-30 01:35  driver\objchk_win7_x86\i386\rbtree.obj.oacr.root.x86chk.pft.xml

     文件     159744  2013-03-30 01:33  driver\objchk_win7_x86\i386\vc90.pdb

     文件      49228  2013-03-30 01:33  driver\objchk_win7_x86\i386\xfilter.obj

     文件       2847  2013-03-30 01:35  driver\objchk_win7_x86\i386\xfilter.obj.oacr.root.x86chk.pft.xml

     文件      37164  2013-03-30 01:33  driver\objchk_win7_x86\i386\xf_connect.obj

     文件       1132  2013-03-30 01:35  driver\objchk_win7_x86\i386\xf_connect.obj.oacr.root.x86chk.pft.xml

     文件      40871  2013-03-30 01:33  driver\objchk_win7_x86\i386\xf_create.obj

     文件        609  2013-03-30 01:35  driver\objchk_win7_x86\i386\xf_create.obj.oacr.root.x86chk.pft.xml

     文件      39135  2013-03-30 01:33  driver\objchk_win7_x86\i386\xf_recv.obj

     文件       5374  2013-03-30 01:35  driver\objchk_win7_x86\i386\xf_recv.obj.oacr.root.x86chk.pft.xml

     文件      27658  2013-03-30 01:33  driver\objchk_win7_x86\i386\xf_send.obj

     文件       2436  2013-03-30 01:35  driver\objchk_win7_x86\i386\xf_send.obj.oacr.root.x86chk.pft.xml

     文件      36898  2013-03-30 01:33  driver\objchk_win7_x86\i386\xioctl.obj

     文件       4153  2013-03-30 01:35  driver\objchk_win7_x86\i386\xioctl.obj.oacr.root.x86chk.pft.xml

     文件        511  2013-03-30 01:33  driver\objchk_win7_x86\i386\_objects.mac

     文件      82679  2013-03-30 00:47  driver\objfre_win7_amd64\amd64\main.obj

     文件       1489  2013-03-30 00:49  driver\objfre_win7_amd64\amd64\main.obj.oacr.root.amd64fre.pft.xml

     文件     102949  2013-03-30 00:47  driver\objfre_win7_amd64\amd64\obj_mgr.obj

............此处省略48个文件信息

评论

共有 条评论

相关资源