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
   *
   */

 

linux-kernel 3.5.3Tcp系统调用,源码分析2-sys_socket & sock_create

sys_socket的实现: SYSCALL_DEFINE3(socket, int, family, int, type, int, protocol) (前面已经说过这个宏最终会展开为sys_s...

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

作 者: boywhp 时 间: 2011-08-11,17:59:22 链 接: http://bbs.pediy.com/showthread.php?t=138620 直接改的tdif...

TDI防火墙示例 源码

  • 2012年11月22日 11:42
  • 1.51MB
  • 下载

socket编程(三)UDP cpp python

socket编程的UDP通信的 cpp实现和python实现

socket编程(二)TCP cpp

TCP cpp socke的cpp实现

visual c++ Socket编程PDF带源码

  • 2013年06月25日 09:38
  • 20.96MB
  • 下载

socket编程实例(源码

socket编程实例(源码) 2010-04-28 21:53 619人阅读 评论(0) 收藏 举报 本实例使用面向连接协议的客户/服务器模式,其流程如图2.3所示: 图...

Socket编程经典例子源码

  • 2006年02月23日 09:05
  • 74KB
  • 下载

Linux下的socket编程源码

  • 2016年09月23日 15:40
  • 2KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:TDI 编程--kernel socket 源码---DrvMain.cpp
举报原因:
原因补充:

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