tdikrnl.h

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

H
1,163
字号
  _Request = (PTDI_REQUEST_KERNEL_SENDDG)&_IrpSp->Parameters; \
  _Request->SendDatagramInformation = (SendDatagramInfo);     \
  _Request->SendLength = (SendLen);                           \
  (Irp)->MdlAddress    = (MdlAddr);                           \
}

  /*
 * VOID
 * TdiBuildSetEventHandler(
 * IN PIRP  Irp,
 * IN PDEVICE_OBJECT  DevObj,
 * IN PFILE_OBJECT  FileObj,
 * IN PVOID  CompRoutine,
 * IN PVOID  Contxt,
 * IN INT  InEventType,
 * IN PVOID  InEventHandler,
 * IN PVOID  InEventContext);
 */
#define TdiBuildSetEventHandler(                                 \
  Irp, DevObj, FileObj, CompRoutine, Contxt,                     \
  InEventType, InEventHandler, InEventContext)                   \
{                                                                \
  PTDI_REQUEST_KERNEL_SET_EVENT _Request;                        \
  PIO_STACK_LOCATION _IrpSp;                                     \
                                                                 \
  _IrpSp = IoGetNextIrpStackLocation(Irp);                       \
                                                                 \
  TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine,             \
                  Contxt, _IrpSp, TDI_SET_EVENT_HANDLER);        \
                                                                 \
  _Request = (PTDI_REQUEST_KERNEL_SET_EVENT)&_IrpSp->Parameters; \
  _Request->EventType    = (InEventType);                        \
  _Request->EventHandler = (PVOID)(InEventHandler);              \
  _Request->EventContext = (PVOID)(InEventContext);              \
}

  /*
 * VOID
 * TdiBuildSetInformation(
 * IN PIRP  Irp,
 * IN PDEVICE_OBJECT  DevObj,
 * IN PFILE_OBJECT  FileObj,
 * IN PVOID  CompRoutine,
 * IN PVOID  Contxt,
 * IN UINT  SType,
 * IN PMDL  MdlAddr);
 */
#define TdiBuildSetInformation(                                        \
  Irp, DevObj, FileObj, CompRoutine, Contxt, SType, MdlAddr)           \
{                                                                      \
  PTDI_REQUEST_KERNEL_SET_INFORMATION _Request;                        \
  PIO_STACK_LOCATION _IrpSp;                                           \
                                                                       \
  _IrpSp = IoGetNextIrpStackLocation(Irp);                             \
                                                                       \
  TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine,                   \
                  Contxt, _IrpSp, TDI_SET_INFORMATION);                \
                                                                       \
  _Request = (PTDI_REQUEST_KERNEL_SET_INFORMATION)&_IrpSp->Parameters; \
  _Request->RequestConnectionInformation = NULL;                       \
  _Request->SetType = (ULONG)(SType);                                  \
  (Irp)->MdlAddress = (MdlAddr);                                       \
}

  /* TDI20_CLIENT_INTERFACE_INFO.TdiVersion constants */
#define TDI_CURRENT_MAJOR_VERSION         2
#define TDI_CURRENT_MINOR_VERSION         0

#define TDI_CURRENT_VERSION ((TDI_CURRENT_MINOR_VERSION) << 8 \
  | (TDI_CURRENT_MAJOR_VERSION))

#define TDI_VERSION_ONE                   0x0001

typedef enum _TDI_PNP_OPCODE {
  TDI_PNP_OP_MIN,
  TDI_PNP_OP_ADD,
  TDI_PNP_OP_DEL,
  TDI_PNP_OP_UPDATE,
  TDI_PNP_OP_PROVIDERREADY,
  TDI_PNP_OP_NETREADY,
  TDI_PNP_OP_ADD_IGNORE_BINDING,
  TDI_PNP_OP_DELETE_IGNORE_BINDING,
  TDI_PNP_OP_MAX
} TDI_PNP_OPCODE;

  /* TDI_PNP_CONTEXT.ContextType */
#define TDI_PNP_CONTEXT_TYPE_IF_NAME            0x1
#define TDI_PNP_CONTEXT_TYPE_IF_ADDR            0x2
#define TDI_PNP_CONTEXT_TYPE_PDO                0x3
#define TDI_PNP_CONTEXT_TYPE_FIRST_OR_LAST_IF   0x4

typedef struct _TDI_PNP_CONTEXT {
  USHORT  ContextSize;
  USHORT  ContextType;
  UCHAR  ContextData[1];
} TDI_PNP_CONTEXT, *PTDI_PNP_CONTEXT;

typedef VOID DDKAPI
(*TDI_ADD_ADDRESS_HANDLER)(
  /*IN*/ PTA_ADDRESS  Address);

typedef VOID DDKAPI
(*TDI_ADD_ADDRESS_HANDLER_V2)(
  /*IN*/ PTA_ADDRESS  Address,
  /*IN*/ PUNICODE_STRING  DeviceName,
  /*IN*/ PTDI_PNP_CONTEXT  Context);

typedef VOID DDKAPI
(*TDI_BINDING_HANDLER)(
  /*IN*/ TDI_PNP_OPCODE  PnPOpcode,
  /*IN*/ PUNICODE_STRING  DeviceName,
  /*IN*/ PWSTR  MultiSZBindList);

typedef VOID DDKAPI
(*TDI_BIND_HANDLER)(
  /*IN*/ PUNICODE_STRING  DeviceName);

typedef VOID DDKAPI
(*TDI_DEL_ADDRESS_HANDLER)(
  /*IN*/ PTA_ADDRESS  Address);

typedef VOID DDKAPI
(*TDI_DEL_ADDRESS_HANDLER_V2)(
  /*IN*/ PTA_ADDRESS  Address,
  /*IN*/ PUNICODE_STRING  DeviceName,
  /*IN*/ PTDI_PNP_CONTEXT  Context);

typedef NTSTATUS DDKAPI
(*TDI_PNP_POWER_HANDLER)(
  /*IN*/ PUNICODE_STRING  DeviceName,
  /*IN*/ PNET_PNP_EVENT  PowerEvent,
  /*IN*/ PTDI_PNP_CONTEXT  Context1,
  /*IN*/ PTDI_PNP_CONTEXT  Context2);

typedef VOID DDKAPI
(*TDI_UNBIND_HANDLER)(
  /*IN*/ PUNICODE_STRING  DeviceName);

typedef VOID DDKAPI
(*ProviderPnPPowerComplete)(
  /*IN*/ PNET_PNP_EVENT  NetEvent,
  /*IN*/ NTSTATUS  ProviderStatus);

typedef struct _TDI20_CLIENT_INTERFACE_INFO {
  _ANONYMOUS_UNION union {
    _ANONYMOUS_STRUCT struct {
      UCHAR  MajorTdiVersion;
      UCHAR  MinorTdiVersion;
    } DUMMYSTRUCTNAME;
    USHORT TdiVersion;
  } DUMMYUNIONNAME;
  USHORT  Unused;
  PUNICODE_STRING  ClientName;
  TDI_PNP_POWER_HANDLER  PnPPowerHandler;
  _ANONYMOUS_UNION union {
    TDI_BINDING_HANDLER  BindingHandler;
    _ANONYMOUS_STRUCT struct {
      TDI_BIND_HANDLER  BindHandler;
      TDI_UNBIND_HANDLER  UnBindHandler;
    } DUMMYSTRUCTNAME;
  }DUMMYUNIONNAME2;
  _ANONYMOUS_UNION union {
    _ANONYMOUS_STRUCT struct {
      TDI_ADD_ADDRESS_HANDLER_V2  AddAddressHandlerV2;
      TDI_DEL_ADDRESS_HANDLER_V2  DelAddressHandlerV2;
    } DUMMYSTRUCTNAME;
    _ANONYMOUS_STRUCT struct {
      TDI_ADD_ADDRESS_HANDLER  AddAddressHandler;
      TDI_DEL_ADDRESS_HANDLER  DelAddressHandler;
    } DUMMYSTRUCTNAME2;
  } DUMMYUNIONNAME3;
} TDI20_CLIENT_INTERFACE_INFO, *PTDI20_CLIENT_INTERFACE_INFO;

typedef TDI20_CLIENT_INTERFACE_INFO TDI_CLIENT_INTERFACE_INFO;
typedef TDI_CLIENT_INTERFACE_INFO *PTDI_CLIENT_INTERFACE_INFO;


  /* TDI functions */

  /*
 * VOID
 * TdiCompleteRequest(
 * IN PIRP Irp,
 * IN NTSTATUS Status);
 */
#define TdiCompleteRequest(Irp, Status)           \
{                                                 \
  (Irp)->IoStatus.Status = (Status);              \
  IoCompleteRequest((Irp), IO_NETWORK_INCREMENT); \
}

TDIKRNLAPI
NTSTATUS
DDKAPI
TdiCopyBufferToMdl(
  /*IN*/ PVOID  SourceBuffer,
  /*IN*/ ULONG  SourceOffset,
  /*IN*/ ULONG  SourceBytesToCopy,
  /*IN*/ PMDL  DestinationMdlChain,
  /*IN*/ ULONG  DestinationOffset,
  /*IN*/ PULONG  BytesCopied);

  /*
 * VOID
 * TdiCopyLookaheadData(
 * IN PVOID  Destination,
 * IN PVOID  Source,
 * IN ULONG  Length,
 * IN ULONG  ReceiveFlags);
 */
#define TdiCopyLookaheadData(Destination, Source, Length, ReceiveFlags) \
  RtlCopyMemory(Destination, Source, Length)

TDIKRNLAPI
NTSTATUS
DDKAPI
TdiCopyMdlChainToMdlChain (
  /*IN*/ PMDL  SourceMdlChain,
  /*IN*/ ULONG  SourceOffset,
  /*IN*/ PMDL  DestinationMdlChain,
  /*IN*/ ULONG  DestinationOffset,
  /*OUT*/ PULONG  BytesCopied);

TDIKRNLAPI
NTSTATUS
DDKAPI
TdiCopyMdlToBuffer(
  /*IN*/ PMDL  SourceMdlChain,
  /*IN*/ ULONG  SourceOffset,
  /*IN*/ PVOID  DestinationBuffer,
  /*IN*/ ULONG  DestinationOffset,
  /*IN*/ ULONG  DestinationBufferSize,
  /*OUT*/ PULONG  BytesCopied);

TDIKRNLAPI
NTSTATUS
DDKAPI
TdiDeregisterAddressChangeHandler(
  /*IN*/ HANDLE  BindingHandle);

TDIKRNLAPI
NTSTATUS
DDKAPI
TdiDeregisterDeviceObject(
  /*IN*/ HANDLE  DevRegistrationHandle);

TDIKRNLAPI
NTSTATUS
DDKAPI
TdiDeregisterNetAddress(
  /*IN*/ HANDLE  AddrRegistrationHandle);

TDIKRNLAPI
NTSTATUS
DDKAPI
TdiDeregisterPnPHandlers(
  /*IN*/ HANDLE  BindingHandle);

TDIKRNLAPI
NTSTATUS
DDKAPI
TdiDeregisterProvider(
  /*IN*/ HANDLE  ProviderHandle);

TDIKRNLAPI
NTSTATUS
DDKAPI
TdiEnumerateAddresses(
  /*IN*/ HANDLE  BindingHandle);

TDIKRNLAPI
VOID
DDKAPI
TdiInitialize(
  VOID);

TDIKRNLAPI
VOID
DDKAPI
TdiMapBuffer(
  /*IN*/ PMDL  MdlChain);

TDIKRNLAPI
NTSTATUS
DDKAPI
TdiMapUserRequest(
  /*IN*/ PDEVICE_OBJECT  DeviceObject,
  /*IN*/ PIRP  Irp,
  /*IN*/ PIO_STACK_LOCATION  IrpSp);

TDIKRNLAPI
BOOLEAN
DDKAPI
TdiMatchPdoWithChainedReceiveContext(
  /*IN*/ PVOID TsduDescriptor,
  /*IN*/ PVOID PDO);

TDIKRNLAPI
VOID
DDKAPI
TdiPnPPowerComplete(
  /*IN*/ HANDLE  BindingHandle,
  /*IN*/ PNET_PNP_EVENT  PowerEvent,
  /*IN*/ NTSTATUS  Status);

TDIKRNLAPI
NTSTATUS
DDKAPI
TdiPnPPowerRequest(
  /*IN*/ PUNICODE_STRING  DeviceName,
  /*IN*/ PNET_PNP_EVENT  PowerEvent,
  /*IN*/ PTDI_PNP_CONTEXT  Context1,
  /*IN*/ PTDI_PNP_CONTEXT  Context2,
  /*IN*/ ProviderPnPPowerComplete  ProtocolCompletionHandler);

TDIKRNLAPI
NTSTATUS
DDKAPI
TdiProviderReady(
  /*IN*/ HANDLE  ProviderHandle);

TDIKRNLAPI
NTSTATUS
DDKAPI
TdiRegisterAddressChangeHandler(
  /*IN*/ TDI_ADD_ADDRESS_HANDLER  AddHandler,
  /*IN*/ TDI_DEL_ADDRESS_HANDLER  DeleteHandler,
  /*OUT*/ HANDLE  *BindingHandle);

TDIKRNLAPI
NTSTATUS
DDKAPI
TdiRegisterDeviceObject(
  /*IN*/ PUNICODE_STRING  DeviceName,
  /*OUT*/ HANDLE  *DevRegistrationHandle);

TDIKRNLAPI
NTSTATUS
DDKAPI
TdiRegisterNetAddress(
  /*IN*/ PTA_ADDRESS  Address,
  /*IN*/ PUNICODE_STRING  DeviceName,
  /*IN*/ PTDI_PNP_CONTEXT  Context,
  /*OUT*/ HANDLE  *AddrRegistrationHandle);

TDIKRNLAPI
NTSTATUS
DDKAPI
TdiRegisterNotificationHandler(
  /*IN*/ TDI_BIND_HANDLER  BindHandler,
  /*IN*/ TDI_UNBIND_HANDLER  UnbindHandler,
  /*OUT*/ HANDLE  *BindingHandle);

TDIKRNLAPI
NTSTATUS
DDKAPI
TdiRegisterPnPHandlers(
  /*IN*/ PTDI_CLIENT_INTERFACE_INFO  ClientInterfaceInfo,
  /*IN*/ ULONG  InterfaceInfoSize,
  /*OUT*/ HANDLE  *BindingHandle);

TDIKRNLAPI
NTSTATUS
DDKAPI
TdiRegisterProvider(
  /*IN*/ PUNICODE_STRING  ProviderName,
  /*OUT*/ HANDLE  *ProviderHandle);

TDIKRNLAPI
VOID
DDKAPI
TdiReturnChainedReceives(
  /*IN*/ PVOID  *TsduDescriptors,
  /*IN*/ ULONG   NumberOfTsdus);

TDIKRNLAPI
VOID
DDKAPI
TdiUnmapBuffer(
  /*IN*/ PMDL  MdlChain);

#ifdef __cplusplus
}
#endif

#endif /* __TDIKRNL_H */

⌨️ 快捷键说明

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