📄 tdikrnl.h
字号:
// The type definition for a TDI Bind handler callout. This callout is
// called when a new transport device arrives.
typedef VOID
(*TDI_BIND_HANDLER)(
IN PUNICODE_STRING DeviceName
);
typedef VOID
(*TDI_UNBIND_HANDLER)(
IN PUNICODE_STRING DeviceName
);
// The type definition for a TDI address handler callout.
// This is typedefed defined at the end (with the others)
typedef VOID
(*TDI_ADD_ADDRESS_HANDLER)(
IN PTA_ADDRESS Address
);
typedef VOID
(*TDI_DEL_ADDRESS_HANDLER)(
IN PTA_ADDRESS Address
);
typedef VOID
(* TDI_NET_READY_HANDLER)(
IN NTSTATUS ProviderStatus
);
typedef VOID
(* ProviderPnPPowerComplete)(
IN PNET_PNP_EVENT NetEvent,
IN NTSTATUS ProviderStatus
);
NTSTATUS
TdiRegisterAddressChangeHandler(
IN TDI_ADD_ADDRESS_HANDLER AddHandler,
IN TDI_DEL_ADDRESS_HANDLER DeleteHandler,
OUT HANDLE *BindingHandle
);
NTSTATUS
TdiDeregisterAddressChangeHandler(
IN HANDLE BindingHandle
);
NTSTATUS
TdiRegisterNotificationHandler(
IN TDI_BIND_HANDLER BindHandler,
IN TDI_UNBIND_HANDLER UnbindHandler,
OUT HANDLE *BindingHandle
);
NTSTATUS
TdiDeregisterNotificationHandler(
IN HANDLE BindingHandle
);
NTSTATUS
TdiRegisterDeviceObject(
IN PUNICODE_STRING DeviceName,
OUT HANDLE *RegistrationHandle
);
NTSTATUS
TdiDeregisterDeviceObject(
IN HANDLE RegistrationHandle
);
NTSTATUS
TdiDeregisterNetAddress(
IN HANDLE RegistrationHandle
);
VOID
TdiInitialize(
VOID
);
// PnP extensions to TDI. Spec : TdiPnp.doc : MunilS
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;
typedef struct _TDI_PNP_CONTEXT {
USHORT ContextSize;
USHORT ContextType;
UCHAR ContextData[1];
} TDI_PNP_CONTEXT, *PTDI_PNP_CONTEXT;
typedef VOID
(*TDI_BINDING_HANDLER)(
IN TDI_PNP_OPCODE PnPOpcode,
IN PUNICODE_STRING DeviceName,
IN PWSTR MultiSZBindList
);
typedef VOID
(*TDI_ADD_ADDRESS_HANDLER_V2)(
IN PTA_ADDRESS Address,
IN PUNICODE_STRING DeviceName,
IN PTDI_PNP_CONTEXT Context
);
typedef VOID
(*TDI_DEL_ADDRESS_HANDLER_V2)(
IN PTA_ADDRESS Address,
IN PUNICODE_STRING DeviceName,
IN PTDI_PNP_CONTEXT Context
);
typedef NTSTATUS
(*TDI_PNP_POWER_HANDLER)(
IN PUNICODE_STRING DeviceName,
IN PNET_PNP_EVENT PowerEvent,
IN PTDI_PNP_CONTEXT Context1,
IN PTDI_PNP_CONTEXT Context2
);
// When the user makes changes using the NCPA, a TdiMakeNCPAChanges request
// is generated through NDIS. The following structure is used to communicate
// these changes.
typedef struct _TDI_NCPA_BINDING_INFO {
PUNICODE_STRING TdiClientName;
PUNICODE_STRING TdiProviderName;
PUNICODE_STRING BindList;
PVOID ReconfigBuffer;
unsigned int ReconfigBufferSize;
TDI_PNP_OPCODE PnpOpcode;
} TDI_NCPA_BINDING_INFO, *PTDI_NCPA_BINDING_INFO;
//
// The following structure makes it easy for consistency/integrity checking
//
typedef struct _TDI_VERSION_ {
union {
struct {
UCHAR MajorTdiVersion;
UCHAR MinorTdiVersion;
};
USHORT TdiVersion;
};
} TDI_VERSION, *PTDI_VERSION;
#define TDI20
typedef struct _TDI20_CLIENT_INTERFACE_INFO {
union {
struct {
UCHAR MajorTdiVersion;
UCHAR MinorTdiVersion;
};
USHORT TdiVersion;
};
//TDI_VERSION TdiVersion;
USHORT Unused;
PUNICODE_STRING ClientName;
TDI_PNP_POWER_HANDLER PnPPowerHandler;
union {
TDI_BINDING_HANDLER BindingHandler;
struct {
//
// Putting these back in for backward compatibility.
//
TDI_BIND_HANDLER BindHandler;
TDI_UNBIND_HANDLER UnBindHandler;
};
};
union {
struct {
TDI_ADD_ADDRESS_HANDLER_V2 AddAddressHandlerV2;
TDI_DEL_ADDRESS_HANDLER_V2 DelAddressHandlerV2;
};
struct {
//
// Putting these back in for backward compatibility.
//
TDI_ADD_ADDRESS_HANDLER AddAddressHandler;
TDI_DEL_ADDRESS_HANDLER DelAddressHandler;
};
};
// TDI_NET_READY_HANDLER NetReadyHandler;
} TDI20_CLIENT_INTERFACE_INFO, *PTDI20_CLIENT_INTERFACE_INFO;
#ifdef TDI20
#define TDI_CURRENT_MAJOR_VERSION (2)
#define TDI_CURRENT_MINOR_VERSION (0)
typedef TDI20_CLIENT_INTERFACE_INFO TDI_CLIENT_INTERFACE_INFO;
#define TDI_CURRENT_VERSION ((TDI_CURRENT_MINOR_VERSION) << 8 | \
(TDI_CURRENT_MAJOR_VERSION))
#endif // TDI20
#define TDI_VERSION_ONE 0x0001
typedef TDI_CLIENT_INTERFACE_INFO *PTDI_CLIENT_INTERFACE_INFO;
NTSTATUS
TdiRegisterPnPHandlers(
IN PTDI_CLIENT_INTERFACE_INFO ClientInterfaceInfo,
IN ULONG InterfaceInfoSize,
OUT HANDLE *BindingHandle
);
NTSTATUS
TdiDeregisterPnPHandlers(
IN HANDLE BindingHandle
);
NTSTATUS
TdiPnPPowerRequest(
IN PUNICODE_STRING DeviceName,
IN PNET_PNP_EVENT PowerEvent,
IN PTDI_PNP_CONTEXT Context1,
IN PTDI_PNP_CONTEXT Context2,
IN ProviderPnPPowerComplete ProtocolCompletionHandler
);
VOID
TdiPnPPowerComplete(
IN HANDLE BindingHandle,
//IN PUNICODE_STRING DeviceName,
IN PNET_PNP_EVENT PowerEvent,
IN NTSTATUS Status
);
NTSTATUS
TdiRegisterNetAddress(
IN PTA_ADDRESS Address,
IN PUNICODE_STRING DeviceName,
IN PTDI_PNP_CONTEXT Context,
OUT HANDLE *RegistrationHandle
);
NTSTATUS
TdiMakeNCPAChanges(
IN TDI_NCPA_BINDING_INFO NcpaBindingInfo
);
//
// Enumerate all TDI addresses for a client
//
NTSTATUS
TdiEnumerateAddresses(
IN HANDLE BindingHandle
);
//
// Introducing the concept of Transport provider.
//
NTSTATUS
TdiRegisterProvider(
PUNICODE_STRING ProviderName,
HANDLE *ProviderHandle
);
NTSTATUS
TdiProviderReady(
HANDLE ProviderHandle
);
NTSTATUS
TdiDeregisterProvider(
HANDLE ProviderHandle
);
BOOLEAN
TdiMatchPdoWithChainedReceiveContext(
IN PVOID TsduDescriptor,
IN PVOID PDO
);
#define TDI_STATUS_BAD_VERSION 0xC0010004L // same as NDIS, is that OK?
#define TDI_STATUS_BAD_CHARACTERISTICS 0xC0010005L // ,,
//
// PNP context types
//
#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
#endif // _TDI_KRNL_
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -