⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tdiclient.h

📁 This zip file contain tow TDI client samples.
💻 H
📖 第 1 页 / 共 2 页
字号:
//**************************************************************************************************//
//*                                                                                                *//
//* Copyright (C) 2003, James Antognini, antognini@mindspring.com.                                 *//
//*                                                                                                *//
//**************************************************************************************************//

#define JADrvNm          "TDIClient"
#define JADrvNmW        L"TDIClient"
 
#define wcharTcpDevName L"\\Device\\Tcp" 
#define wcharUdpDevName L"\\Device\\Udp" 
 
#define arraysize(p) (sizeof(p)/sizeof((p)[0]))
 
#define TDIClnDNSPort   53
 
#ifdef JADriverKernelMode
  
#define DrvTestWait(prefix)                           /* Wait for signalling, after saying where event is located. */ \
                                                      /* Parameter prefix may be "" but otherwise prefixes message.*/ \
          {                                                                                                           \
           KEVENT tmpEvent;                                                                                           \
           KeInitializeEvent(&tmpEvent, NotificationEvent, FALSE);                                                    \
           DbgPrint((prefix "Event at 0x%08X, and waiting ...\n",&tmpEvent));                                         \
           KeWaitForSingleObject(&tmpEvent, Executive, KernelMode, FALSE, 0);                                         \
          }
  
#define INVALID_HANDLE_VALUE ((HANDLE)(LONG_PTR)-1)
 
#if DBG
#define DbgPrint(arg) DbgPrint arg
#else
#define DbgPrint(arg)
#endif

//***************************************************************************//
//                                                                           //
// Types, definitions, etc.                                                  //
//                                                                           //
//***************************************************************************//

typedef struct _TDIClnReqElem                         // TDI request element.
  {
   KEVENT                RecvEvent;                   // Event associated with Receive request.
   PCHAR                 pBuffer;                     // Addr of buffer for request.
   ULONG                 ulBuffer;                    // Size of buffer.
   ULONG                 ulBytesReceived;             // Number of bytes received, set by TDIClnEventReceive() or TDIClnIoCompRtnRecv().
   IO_STATUS_BLOCK       ReqIoStatus;                 // I/O status block.
  }
   TDIClnReqElem, * pTDIClnReqElem;
                                                      
// Next fixes a problem (C2501) in the _TDIClnConn typdef struct.

typedef struct _TDI_CONNECTION_INFORMATION * PTDI_CONNECTION_INFORMATION;

typedef struct _TDIClientExtension * pTDIClientExtension;

typedef struct _TDIClnConn
  {                                                   // Connection structure.
   pTDIClientExtension   pDevExt;                     // Pointer to device extension of TDI client.
   HANDLE                hConn;                       // Handle to connection endpoint.
   PFILE_OBJECT          pConnFileObj;                // Address of file object for connection endpoint.
   PTDI_CONNECTION_INFORMATION                        // Not used.
                         pServerConnInfo;
   PTDI_CONNECTION_INFORMATION                        // Client connection information
                         pClientConnInfo;
   pTDIClnReqElem        pReqElemsArr;                // Pointer to array of request elements.
   KEVENT                AccEvent;
   KEVENT                DiscEvent;
   LONG                  IdxReqElemAvail;             // Index of first available request element.
   BOOLEAN               bConnd;
  }
   TDIClnConn, * pTDIClnConn;

typedef struct _ConnParms
  {
   pTDIClientExtension   pDevExt;
   PTDI_CONNECTION_INFORMATION
                         pServerConnInfo;
   PTDI_CONNECTION_INFORMATION
                         pClientConnInfo;
  }
   ConnParms, * pConnParms;

typedef struct _TDIClientExtension                    // Device extension of TDI client.
  {
   UNICODE_STRING        JAUniSymLinkName;
   UNICODE_STRING        JAUniDeviceName;
   UNICODE_STRING        JARegPath;
   ANSI_STRING           JADriverName;
   PIRP                  pIrpAccept;
   HANDLE                hAddr;
   PDEVICE_OBJECT        pTcpDevObj;
   PDEVICE_OBJECT        pUdpDevObj;
   PFILE_OBJECT          pAddrFileObj;
   PCHAR                 pBufferBase;
   pTDIClnReqElem        pReqElemsArr;
   pTDIClnConn           pTDIClnConnArr;
   ULONG                 DNSIPAddr[4];
  }
   TDIClientExtension, * pTDIClientExtension;

//***************************************************************************//
//                                                                           //
// Routine prototypes.                                                       //
//                                                                           //
//***************************************************************************//

typedef struct _TDIClientExtension * pTDIClientExtension;

typedef struct _TDIClientTestStr * pTDIClientTestStr;

NTSTATUS
TDIClientDispatchAny(IN PDEVICE_OBJECT, IN PIRP);

NTSTATUS
TDIClientMain(IN pTDIClientExtension, IN pTDIClientTestStr);

VOID
TDIClientUnload(IN PDRIVER_OBJECT);

ULONG
GetInetAddr(IN LPWSTR, OUT LPWSTR *); 

NTSTATUS
TDIClnOpenTransAddr(PWSTR, PHANDLE, PFILE_OBJECT *, USHORT);

NTSTATUS
TDIClnOpenConnEndPt(pTDIClnConn, pTDIClientExtension);

NTSTATUS
TDIClnSetEventHandler(PFILE_OBJECT, PDEVICE_OBJECT, LONG, PVOID, PVOID);

NTSTATUS
TDIClnAssocAddr(PFILE_OBJECT, PDEVICE_OBJECT, HANDLE);

NTSTATUS                              
TDIClnDisassocAddr(PFILE_OBJECT, PDEVICE_OBJECT);

NTSTATUS
TDIClnConnect(PFILE_OBJECT, PDEVICE_OBJECT, ULONG, USHORT);

NTSTATUS
TDIClnSend(PFILE_OBJECT, PDEVICE_OBJECT, PVOID, ULONG);

NTSTATUS
TDIClnRecv(PFILE_OBJECT, PDEVICE_OBJECT, PVOID, ULONG, PIO_STATUS_BLOCK, PVOID);

NTSTATUS                                     
TDIClnSendDGram(PFILE_OBJECT, PDEVICE_OBJECT, PTDI_CONNECTION_INFORMATION, PVOID, ULONG);                            
                   
NTSTATUS                                     
TDIClnRecvDGram(PFILE_OBJECT, PDEVICE_OBJECT, PTDI_CONNECTION_INFORMATION, PVOID, ULONG, PIO_STATUS_BLOCK);                           
                   
NTSTATUS
TDIClnDisconnect(PFILE_OBJECT, PDEVICE_OBJECT);

// Next fixes a problem (C2501) in the TDIClnEventDisconnect definition.
typedef PVOID CONNECTION_CONTEXT;

NTSTATUS
TDIClnEventDisconnect(PVOID, CONNECTION_CONTEXT, LONG, PVOID, LONG, PVOID, ULONG);

NTSTATUS                             
TDIClnEventConnect(PVOID, LONG, PVOID, LONG, PVOID, LONG, PVOID, CONNECTION_CONTEXT *, PIRP *);

NTSTATUS
TDIClnEventErrorEx(PVOID, NTSTATUS, PVOID);

NTSTATUS

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -