tdikrnl.h

来自「开放源码的编译器open watcom 1.6.0版的源代码」· C头文件 代码 · 共 1,163 行 · 第 1/3 页

H
1,163
字号
/*
 * tdikrnl.h
 *
 * TDI kernel mode definitions
 *
 * This file is part of the w32api package.
 *
 * Contributors:
 *   Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
 *
 * THIS SOFTWARE IS NOT COPYRIGHTED
 *
 * This source code is offered for use in the public domain. You may
 * use, modify or distribute it freely.
 *
 * This code is distributed in the hope that it will be useful but
 * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
 * DISCLAIMED. This includes but is not limited to warranties of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 *
 */

#ifndef __TDIKRNL_H
#define __TDIKRNL_H

#if __GNUC__ >=3
#pragma GCC system_header
#endif

#ifdef __cplusplus
extern "C" {
#endif

#include "ntddk.h"
#include "tdi.h"

#if defined(_TDI_)
  #define TDIKRNLAPI DECLSPEC_EXPORT
#else
  #define TDIKRNLAPI DECLSPEC_IMPORT
#endif


typedef struct _TDI_REQUEST_KERNEL {
  ULONG  RequestFlags;
  PTDI_CONNECTION_INFORMATION  RequestConnectionInformation;
  PTDI_CONNECTION_INFORMATION  ReturnConnectionInformation;
  PVOID  RequestSpecific;
} TDI_REQUEST_KERNEL, *PTDI_REQUEST_KERNEL;

/* Request codes */
#define TDI_ASSOCIATE_ADDRESS             0x01
#define TDI_DISASSOCIATE_ADDRESS          0x02
#define TDI_CONNECT                       0x03
#define TDI_LISTEN                        0x04
#define TDI_ACCEPT                        0x05
#define TDI_DISCONNECT                    0x06
#define TDI_SEND                          0x07
#define TDI_RECEIVE                       0x08
#define TDI_SEND_DATAGRAM                 0x09
#define TDI_RECEIVE_DATAGRAM              0x0A
#define TDI_SET_EVENT_HANDLER             0x0B
#define TDI_QUERY_INFORMATION             0x0C
#define TDI_SET_INFORMATION               0x0D
#define TDI_ACTION                        0x0E

#define TDI_DIRECT_SEND                   0x27
#define TDI_DIRECT_SEND_DATAGRAM          0x29

#define TDI_TRANSPORT_ADDRESS_FILE        1
#define TDI_CONNECTION_FILE               2
#define TDI_CONTROL_CHANNEL_FILE          3

/* Internal TDI IOCTLS */
#define IOCTL_TDI_QUERY_DIRECT_SEND_HANDLER   _TDI_CONTROL_CODE(0x80, METHOD_NEITHER)
#define IOCTL_TDI_QUERY_DIRECT_SENDDG_HANDLER _TDI_CONTROL_CODE(0x81, METHOD_NEITHER)

/* TdiAssociateAddress */
typedef struct _TDI_REQUEST_KERNEL_ASSOCIATE {
  HANDLE  AddressHandle;
} TDI_REQUEST_KERNEL_ASSOCIATE, *PTDI_REQUEST_KERNEL_ASSOCIATE;

/* TdiDisassociateAddress */
typedef TDI_REQUEST_KERNEL TDI_REQUEST_KERNEL_DISASSOCIATE,
  *PTDI_REQUEST_KERNEL_DISASSOCIATE;

/* TdiAccept */
typedef struct _TDI_REQUEST_KERNEL_ACCEPT {
  PTDI_CONNECTION_INFORMATION  RequestConnectionInformation;
  PTDI_CONNECTION_INFORMATION  ReturnConnectionInformation;
} TDI_REQUEST_KERNEL_ACCEPT, *PTDI_REQUEST_KERNEL_ACCEPT;

/* TdiConnect */
typedef TDI_REQUEST_KERNEL TDI_REQUEST_KERNEL_CONNECT,
  *PTDI_REQUEST_KERNEL_CONNECT;

/* TdiDisconnect */
typedef TDI_REQUEST_KERNEL TDI_REQUEST_KERNEL_DISCONNECT,
  *PTDI_REQUEST_KERNEL_DISCONNECT;

/* TdiListen */
typedef TDI_REQUEST_KERNEL TDI_REQUEST_KERNEL_LISTEN,
  *PTDI_REQUEST_KERNEL_LISTEN;

/* TdiReceive */
typedef struct _TDI_REQUEST_KERNEL_RECEIVE {
  ULONG  ReceiveLength;
  ULONG  ReceiveFlags;
} TDI_REQUEST_KERNEL_RECEIVE, *PTDI_REQUEST_KERNEL_RECEIVE;

/* TdiReceiveDatagram */
typedef struct _TDI_REQUEST_KERNEL_RECEIVEDG {
  ULONG  ReceiveLength;
  PTDI_CONNECTION_INFORMATION  ReceiveDatagramInformation;
  PTDI_CONNECTION_INFORMATION  ReturnDatagramInformation;
  ULONG  ReceiveFlags;
} TDI_REQUEST_KERNEL_RECEIVEDG, *PTDI_REQUEST_KERNEL_RECEIVEDG;

/* TdiSend */
typedef struct _TDI_REQUEST_KERNEL_SEND {
  ULONG  SendLength;
  ULONG  SendFlags;
} TDI_REQUEST_KERNEL_SEND, *PTDI_REQUEST_KERNEL_SEND;

/* TdiSendDatagram */
typedef struct _TDI_REQUEST_KERNEL_SENDDG {
  ULONG  SendLength;
  PTDI_CONNECTION_INFORMATION  SendDatagramInformation;
} TDI_REQUEST_KERNEL_SENDDG, *PTDI_REQUEST_KERNEL_SENDDG;

/* TdiSetEventHandler */
typedef struct _TDI_REQUEST_KERNEL_SET_EVENT {
  LONG  EventType;
  PVOID  EventHandler;
  PVOID  EventContext;
} TDI_REQUEST_KERNEL_SET_EVENT, *PTDI_REQUEST_KERNEL_SET_EVENT;

/* TdiQueryInformation */
typedef struct _TDI_REQUEST_KERNEL_QUERY_INFO {
  LONG  QueryType;
  PTDI_CONNECTION_INFORMATION  RequestConnectionInformation;
} TDI_REQUEST_KERNEL_QUERY_INFORMATION, *PTDI_REQUEST_KERNEL_QUERY_INFORMATION;

/* TdiSetInformation */
typedef struct _TDI_REQUEST_KERNEL_SET_INFO {
  LONG  SetType;
  PTDI_CONNECTION_INFORMATION  RequestConnectionInformation;
} TDI_REQUEST_KERNEL_SET_INFORMATION, *PTDI_REQUEST_KERNEL_SET_INFORMATION;


/* Event types */
#define TDI_EVENT_CONNECT                   0
#define TDI_EVENT_DISCONNECT                1
#define TDI_EVENT_ERROR                     2
#define TDI_EVENT_RECEIVE                   3
#define TDI_EVENT_RECEIVE_DATAGRAM          4
#define TDI_EVENT_RECEIVE_EXPEDITED         5
#define TDI_EVENT_SEND_POSSIBLE             6
#define TDI_EVENT_CHAINED_RECEIVE           7
#define TDI_EVENT_CHAINED_RECEIVE_DATAGRAM  8
#define TDI_EVENT_CHAINED_RECEIVE_EXPEDITED 9
#define TDI_EVENT_ERROR_EX                  10

typedef NTSTATUS DDKAPI
(*PTDI_IND_CONNECT)(
  /*IN*/ PVOID  TdiEventContext,
  /*IN*/ LONG  RemoteAddressLength,
  /*IN*/ PVOID  RemoteAddress,
  /*IN*/ LONG  UserDataLength,
  /*IN*/ PVOID  UserData,
  /*IN*/ LONG  OptionsLength,
  /*IN*/ PVOID  Options,
  /*OUT*/ CONNECTION_CONTEXT  *ConnectionContext,
  /*OUT*/ PIRP  *AcceptIrp);

TDIKRNLAPI
NTSTATUS
DDKAPI
TdiDefaultConnectHandler(
  /*IN*/ PVOID  TdiEventContext,
  /*IN*/ LONG  RemoteAddressLength,
  /*IN*/ PVOID  RemoteAddress,
  /*IN*/ LONG  UserDataLength,
  /*IN*/ PVOID  UserData,
  /*IN*/ LONG  OptionsLength,
  /*IN*/ PVOID  Options,
  /*OUT*/ CONNECTION_CONTEXT *ConnectionContext,
  /*OUT*/ PIRP  *AcceptIrp);

typedef NTSTATUS DDKAPI
(*PTDI_IND_DISCONNECT)(
  /*IN*/ PVOID  TdiEventContext,
  /*IN*/ CONNECTION_CONTEXT  ConnectionContext,
  /*IN*/ LONG  DisconnectDataLength,
  /*IN*/ PVOID  DisconnectData,
  /*IN*/ LONG  DisconnectInformationLength,
  /*IN*/ PVOID  DisconnectInformation,
  /*IN*/ ULONG  DisconnectFlags);

TDIKRNLAPI
NTSTATUS
DDKAPI
TdiDefaultDisconnectHandler(
  /*IN*/ PVOID  TdiEventContext,
  /*IN*/ CONNECTION_CONTEXT  ConnectionContext,
  /*IN*/ LONG  DisconnectDataLength,
  /*IN*/ PVOID  DisconnectData,
  /*IN*/ LONG  DisconnectInformationLength,
  /*IN*/ PVOID  DisconnectInformation,
  /*IN*/ ULONG  DisconnectFlags);

typedef NTSTATUS DDKAPI
(*PTDI_IND_ERROR)(
  /*IN*/ PVOID  TdiEventContext,
  /*IN*/ NTSTATUS  Status);

typedef NTSTATUS DDKAPI
(*PTDI_IND_ERROR_EX)(
  /*IN*/ PVOID  TdiEventContext,
  /*IN*/ NTSTATUS  Status,
  /*IN*/ PVOID  Buffer);

TDIKRNLAPI
NTSTATUS
DDKAPI
TdiDefaultErrorHandler(
  /*IN*/ PVOID  TdiEventContext,
  /*IN*/ NTSTATUS  Status);

typedef NTSTATUS DDKAPI
(*PTDI_IND_RECEIVE)(
  /*IN*/ PVOID  TdiEventContext,
  /*IN*/ CONNECTION_CONTEXT  ConnectionContext,
  /*IN*/ ULONG  ReceiveFlags,
  /*IN*/ ULONG  BytesIndicated,
  /*IN*/ ULONG  BytesAvailable,
  /*OUT*/ ULONG  *BytesTaken,
  /*IN*/ PVOID  Tsdu,
  /*OUT*/ PIRP  *IoRequestPacket);

TDIKRNLAPI
NTSTATUS
DDKAPI
TdiDefaultReceiveHandler(
  /*IN*/ PVOID  TdiEventContext,
  /*IN*/ CONNECTION_CONTEXT  ConnectionContext,
  /*IN*/ ULONG  ReceiveFlags,
  /*IN*/ ULONG  BytesIndicated,
  /*IN*/ ULONG  BytesAvailable,
  /*OUT*/ ULONG  *BytesTaken,
  /*IN*/ PVOID  Tsdu,
  /*OUT*/ PIRP  *IoRequestPacket);

typedef NTSTATUS DDKAPI
(*PTDI_IND_RECEIVE_DATAGRAM)(
  /*IN*/ PVOID  TdiEventContext,
  /*IN*/ LONG  SourceAddressLength,
  /*IN*/ PVOID  SourceAddress,
  /*IN*/ LONG  OptionsLength,
  /*IN*/ PVOID  Options,
  /*IN*/ ULONG  ReceiveDatagramFlags,
  /*IN*/ ULONG  BytesIndicated,
  /*IN*/ ULONG  BytesAvailable,
  /*OUT*/ ULONG  *BytesTaken,
  /*IN*/ PVOID  Tsdu,
  /*OUT*/ PIRP  *IoRequestPacket);

TDIKRNLAPI
NTSTATUS DDKAPI
TdiDefaultRcvDatagramHandler(
  /*IN*/ PVOID  TdiEventContext,
  /*IN*/ LONG  SourceAddressLength,
  /*IN*/ PVOID  SourceAddress,
  /*IN*/ LONG  OptionsLength,
  /*IN*/ PVOID  Options,
  /*IN*/ ULONG  ReceiveDatagramFlags,
  /*IN*/ ULONG  BytesIndicated,
  /*IN*/ ULONG  BytesAvailable,
  /*OUT*/ ULONG  *BytesTaken,
  /*IN*/ PVOID  Tsdu,
  /*OUT*/ PIRP  *IoRequestPacket);

typedef NTSTATUS DDKAPI
(*PTDI_IND_RECEIVE_EXPEDITED)(
  /*IN*/ PVOID  TdiEventContext,
  /*IN*/ CONNECTION_CONTEXT  ConnectionContext,
  /*IN*/ ULONG  ReceiveFlags,
  /*IN*/ ULONG  BytesIndicated,
  /*IN*/ ULONG  BytesAvailable,
  /*OUT*/ ULONG  *BytesTaken,
  /*IN*/ PVOID  Tsdu,
  /*OUT*/ PIRP  *IoRequestPacket);

TDIKRNLAPI
NTSTATUS
DDKAPI
TdiDefaultRcvExpeditedHandler(
  /*IN*/ PVOID  TdiEventContext,
  /*IN*/ CONNECTION_CONTEXT  ConnectionContext,
  /*IN*/ ULONG  ReceiveFlags,
  /*IN*/ ULONG  BytesIndicated,
  /*IN*/ ULONG  BytesAvailable,
  /*OUT*/ ULONG  *BytesTaken,
  /*IN*/ PVOID  Tsdu,
  /*OUT*/ PIRP  *IoRequestPacket);

typedef NTSTATUS DDKAPI
(*PTDI_IND_CHAINED_RECEIVE)(
  /*IN*/ PVOID  TdiEventContext,
  /*IN*/ CONNECTION_CONTEXT  ConnectionContext,
  /*IN*/ ULONG  ReceiveFlags,
  /*IN*/ ULONG  ReceiveLength,
  /*IN*/ ULONG  StartingOffset,
  /*IN*/ PMDL  Tsdu,
  /*IN*/ PVOID  TsduDescriptor);

TDIKRNLAPI
NTSTATUS
DDKAPI
TdiDefaultChainedReceiveHandler(
  /*IN*/ PVOID  TdiEventContext,
  /*IN*/ CONNECTION_CONTEXT  ConnectionContext,
  /*IN*/ ULONG  ReceiveFlags,
  /*IN*/ ULONG  ReceiveLength,
  /*IN*/ ULONG  StartingOffset,
  /*IN*/ PMDL  Tsdu,
  /*IN*/ PVOID  TsduDescriptor);

typedef NTSTATUS DDKAPI
(*PTDI_IND_CHAINED_RECEIVE_DATAGRAM)(
  /*IN*/ PVOID  TdiEventContext,
  /*IN*/ LONG  SourceAddressLength,
  /*IN*/ PVOID  SourceAddress,
  /*IN*/ LONG  OptionsLength,
  /*IN*/ PVOID  Options,
  /*IN*/ ULONG  ReceiveDatagramFlags,
  /*IN*/ ULONG  ReceiveDatagramLength,
  /*IN*/ ULONG  StartingOffset,
  /*IN*/ PMDL  Tsdu,
  /*IN*/ PVOID  TsduDescriptor);

TDIKRNLAPI
NTSTATUS
DDKAPI
TdiDefaultChainedRcvDatagramHandler(
  /*IN*/ PVOID  TdiEventContext,
  /*IN*/ LONG  SourceAddressLength,
  /*IN*/ PVOID  SourceAddress,
  /*IN*/ LONG  OptionsLength,
  /*IN*/ PVOID  Options,
  /*IN*/ ULONG  ReceiveDatagramFlags,
  /*IN*/ ULONG  ReceiveDatagramLength,
  /*IN*/ ULONG  StartingOffset,
  /*IN*/ PMDL  Tsdu,
  /*IN*/ PVOID  TsduDescriptor);

typedef NTSTATUS DDKAPI
(*PTDI_IND_CHAINED_RECEIVE_EXPEDITED)(
  /*IN*/ PVOID  TdiEventContext,
  /*IN*/ CONNECTION_CONTEXT  ConnectionContext,
  /*IN*/ ULONG  ReceiveFlags,
  /*IN*/ ULONG  ReceiveLength,
  /*IN*/ ULONG  StartingOffset,
  /*IN*/ PMDL  Tsdu,
  /*IN*/ PVOID  TsduDescriptor);

TDIKRNLAPI
NTSTATUS
DDKAPI
TdiDefaultChainedRcvExpeditedHandler(
  /*IN*/ PVOID  TdiEventContext,
  /*IN*/ CONNECTION_CONTEXT  ConnectionContext,
  /*IN*/ ULONG  ReceiveFlags,
  /*IN*/ ULONG  ReceiveLength,
  /*IN*/ ULONG  StartingOffset,
  /*IN*/ PMDL  Tsdu,
  /*IN*/ PVOID  TsduDescriptor);

typedef NTSTATUS DDKAPI
(*PTDI_IND_SEND_POSSIBLE)(
  /*IN*/ PVOID  TdiEventContext,
  /*IN*/ PVOID  ConnectionContext,
  /*IN*/ ULONG  BytesAvailable);

TDIKRNLAPI
NTSTATUS
DDKAPI
TdiDefaultSendPossibleHandler(

⌨️ 快捷键说明

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