TDI 编程--kernel socket 源码---DrvMain.cpp

原创 2007年09月14日 11:08:00

#include "KernelHeader.h"
#include "DrvMain.h"
#include "function.h"

 

#include "NetDrv.h"

 

extern "C"
{
VOID TDIFunLib_DriverUnload(PDRIVER_OBJECT  DriverObject);
NTSTATUS DriverEntry(PDRIVER_OBJECT DriverObject, PUNICODE_STRING  pRegistryPath);

}


#pragma alloc_text( INIT, DriverEntry )
#pragma alloc_text( PAGE, TDIFunLib_DriverUnload)

 

/**********************************************************
 *
 * Fun: DriverEntry
 *
 *
 **********************************************************/

NTSTATUS
DriverEntry(PDRIVER_OBJECT DriverObject, PUNICODE_STRING  pRegistryPath)
{
 NTSTATUS NtStatus = STATUS_SUCCESS; 
 UNICODE_STRING usDriverName = {0};
 UNICODE_STRING usSymbolicLinkName = {0};
 PDEVICE_OBJECT pControlDeviceObject = NULL;
 UINT uiIndex = 0;

 RtlInitUnicodeString( &usDriverName, TDIFunLib_DEVICE_NAME);
 RtlInitUnicodeString( &usSymbolicLinkName, TDIFunLib_DOSDEVICE_NAME);
 

 /*
  * Create Named Control Device Object
  */

 NtStatus = IoCreateDevice( DriverObject, sizeof(TDIFunLib_DEVICE_EXTENSION), &usDriverName, FILE_DEVICE_UNKNOWN, FILE_DEVICE_SECURE_OPEN,FALSE, &pControlDeviceObject);
 if ( NtStatus != STATUS_SUCCESS ) 
 {
  return NtStatus ;
 }

 /*
  * Assign Dispatch Routine
  */
  
 for (uiIndex=0; uiIndex < IRP_MJ_MAXIMUM_FUNCTION; uiIndex++)
 {
  DriverObject->MajorFunction[uiIndex] = TDIFunLib_CommonDispatch;
 }
 
 DriverObject->MajorFunction[ IRP_MJ_CREATE ] = TDIFunLib_CreateDispatch;
 DriverObject->MajorFunction[ IRP_MJ_READ ]  = TDIFunLib_ReadDispatch;
 DriverObject->MajorFunction[ IRP_MJ_WRITE ]  = TDIFunLib_WriteDispatch;
 DriverObject->MajorFunction[ IRP_MJ_CLEANUP ] = TDIFunLib_CleanUpDispatch;
 DriverObject->MajorFunction[ IRP_MJ_CLOSE ]  = TDIFunLib_CloseDispatch;
 DriverObject->MajorFunction[ IRP_MJ_DEVICE_CONTROL ] = TDIFunLib_IoControlDispatch;
 DriverObject->MajorFunction[ IRP_MJ_INTERNAL_DEVICE_CONTROL ] = TDIFunLib_IoControlInternal;
 
 /*
  * If this Fun is missing, Driver can't be dynamically Unloaded.
  */

 DriverObject->DriverUnload = TDIFunLib_DriverUnload;
 

 /*
  * Set Flag On ControlDeviceObject to determin type of IO.  IO Manager Copy Data from Databuffer
  * given by user-mode app to sysBuffer On behalf of driver.
  */

 pControlDeviceObject->Flags |= DO_BUFFERED_IO;
 

 /*
  * Driver  Iniitalizing OK !!
  */

 pControlDeviceObject->Flags &= (~DO_DEVICE_INITIALIZING);
 

 /*
  * Create symbolicLink to ControlDeviceObject
  */
 
 IoCreateSymbolicLink(&usSymbolicLinkName, &usDriverName); 

 

 return NtStatus;
}

 

/**********************************************************
 *
 * Fun: TDIFunLib_DriverUnload
 *
 *
 **********************************************************/

VOID TDIFunLib_DriverUnload(PDRIVER_OBJECT  DriverObject)
{
 UNICODE_STRING usSymbolicLinkName;


 /*
  * Delete SymbolicLinkName
  */

 RtlInitUnicodeString( &usSymbolicLinkName, TDIFunLib_DOSDEVICE_NAME );

 IoDeleteSymbolicLink( &usSymbolicLinkName );


 /*
  * Delete DeviceObject
  */
 
  IoDeleteDevice( DriverObject->DeviceObject );
 
 
  /*
   *
   * Release Other resouces
   *
   */

 

(转)驱动开发之五 --- TDI之六 【译文】

http://hi.baidu.com/combojiang/item/d0287ca509180ddf5bf19132 同样的使用TDI_RECEIVE来完成数据接收。然而我们却没有用它来实现...
  • jiangqin115
  • jiangqin115
  • 2015年11月10日 14:18
  • 393

?在tdi层截获socket操作

哦,这样啊。好吧,应用层的服务器端和客户端的应用程序就不用发了吧,就是tcp的典型操作, 服务器端:socket,bind,listen,accept,send,receive 客户端:socke...
  • trustnature
  • trustnature
  • 2012年08月10日 10:47
  • 695

TDI驱动源代码

  • 2013年03月30日 02:30
  • 567KB
  • 下载

TDI 编程--kernel socket 源码---DrvMain.cpp

#include "KernelHeader.h"#include "DrvMain.h"#include "function.h" #include "NetDrv.h" extern "C"{VO...
  • Blue_Dream_
  • Blue_Dream_
  • 2007年09月14日 11:08
  • 1701

使用TDI与WinSock进行客户端服务器编程

简介: 在本文中,您将了解到使用传输驱动程序接口TDI与应用层套接字WinSock客户端服务器应用程序内核级编程实现细节。介绍常用的TDI函数并提供编写TDI与WinSock(TCP)应用程序的详...
  • whatday
  • whatday
  • 2015年03月29日 23:51
  • 1717

TDI简单的UDP网络通信

#include "ntifs.h" #include "tdi.h" #include "tdikrnl.h" #include "KernelSocket.h" HANDLE g_hSocke...
  • qq125096885
  • qq125096885
  • 2016年10月13日 20:14
  • 669

网络驱动程序设计指南

  • 2009年07月16日 09:43
  • 2.23MB
  • 下载

Windows设备驱动程序开发大全

  • 2010年04月13日 00:12
  • 3.8MB
  • 下载

TDI HOOK监控tcp连接源码+文档

作 者: boywhp 时 间: 2011-08-11,17:59:22 链 接: http://bbs.pediy.com/showthread.php?t=138620 直接改的tdif...
  • gold0523
  • gold0523
  • 2011年08月14日 00:18
  • 2169

Linux 内核态 Socket 编程

1.内核态 socket API 内核态socket编程的过程和用户态下的socket编程流程一样,但是接口不同。Kernel提供了一组内核态的socket API,基本上在用户态的sockt API...
  • miaohongyu1
  • miaohongyu1
  • 2013年11月27日 15:48
  • 4655
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:TDI 编程--kernel socket 源码---DrvMain.cpp
举报原因:
原因补充:

(最多只允许输入30个字)