📄 tdikrnl.h
字号:
);
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 POINTER_ALIGNMENT 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
// The following structures and macros are for handlers that support returning
// ancillary data via a control structure
//
//
// Layout of ancillary data objects in the control buffer
//
typedef struct _TDI_CMSGHDR {
SIZE_T cmsg_len;
LONG cmsg_level;
LONG cmsg_type;
/* followed by UCHAR cmsg_data[] */
} TDI_CMSGHDR, *PTDI_CMSGHDR;
//
// Alignment macros for header and data members of
// the control buffer.
//
#define TDI_CMSGHDR_ALIGN(length) \
( ((length) + TYPE_ALIGNMENT(TDI_CMSGHDR)-1) & \
(~(TYPE_ALIGNMENT(TDI_CMSGHDR)-1)) ) \
#define TDI_CMSGDATA_ALIGN(length) \
( ((length) + MAX_NATURAL_ALIGNMENT-1) & \
(~(MAX_NATURAL_ALIGNMENT-1)) )
// Returns a pointer to the first byte of data (what is referred
// to as the cmsg_data member though it is not defined in
// the structure).
//
// UCHAR *
// TDI_CMSG_DATA (
// PTDI_CMSGHDR pcmsg
// );
//
#define TDI_CMSG_DATA(cmsg) \
( (UCHAR *)(cmsg) + TDI_CMSGDATA_ALIGN(sizeof(TDI_CMSGHDR)) )
//
// Returns total size of an ancillary data object given
// the amount of data. Used to allocate the correct amount
// of space.
//
// SIZE_T
// TDI_CMSG_SPACE (
// SIZE_T length
// );
//
#define TDI_CMSG_SPACE(length) \
(TDI_CMSGDATA_ALIGN(sizeof(TDI_CMSGHDR) + TDI_CMSGHDR_ALIGN(length)))
// Returns the value to store in cmsg_len given the amount of data.
//
// SIZE_T
// TDI_CMSG_LEN (
// SIZE_T length
// );
//
#define TDI_CMSG_LEN(length) \
(TDI_CMSGDATA_ALIGN(sizeof(TDI_CMSGHDR)) + length)
// Initializes the members of a TDI_CMSGHDR structure
//
// VOID
// TDI_INIT_CMSGHDR (
// PTDI_CMSGHDR cmsg,
// INT level,
// INT type,
// SIZE_T length,
// );
//
#define TDI_INIT_CMSGHDR(cmsg, level, type, length) { \
((TDI_CMSGHDR *) cmsg)->cmsg_level = level; \
((TDI_CMSGHDR *) cmsg)->cmsg_type = type; \
((TDI_CMSGHDR *) cmsg)->cmsg_len = TDI_CMSG_LEN(length); \
}
#endif // _TDI_KRNL_
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -