ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

tdikrnl.h
Go to the documentation of this file.
00001 /*
00002  * tdikrnl.h
00003  *
00004  * TDI kernel mode definitions
00005  *
00006  * This file is part of the w32api package.
00007  *
00008  * Contributors:
00009  *   Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
00010  *
00011  * THIS SOFTWARE IS NOT COPYRIGHTED
00012  *
00013  * This source code is offered for use in the public domain. You may
00014  * use, modify or distribute it freely.
00015  *
00016  * This code is distributed in the hope that it will be useful but
00017  * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
00018  * DISCLAIMED. This includes but is not limited to warranties of
00019  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
00020  *
00021  */
00022 
00023 #ifndef __TDIKRNL_H
00024 #define __TDIKRNL_H
00025 
00026 #include "tdi.h"
00027 
00028 #ifdef __cplusplus
00029 extern "C" {
00030 #endif
00031 
00032 #if defined(_TDI_)
00033 #define TDIKRNLAPI
00034 #else
00035 #define TDIKRNLAPI DECLSPEC_IMPORT
00036 #endif
00037 
00038 
00039 typedef struct _TDI_REQUEST_KERNEL {
00040   ULONG RequestFlags;
00041   PTDI_CONNECTION_INFORMATION RequestConnectionInformation;
00042   PTDI_CONNECTION_INFORMATION ReturnConnectionInformation;
00043   PVOID RequestSpecific;
00044 } TDI_REQUEST_KERNEL, *PTDI_REQUEST_KERNEL;
00045 
00046 /* Request codes */
00047 #define TDI_ASSOCIATE_ADDRESS             0x01
00048 #define TDI_DISASSOCIATE_ADDRESS          0x02
00049 #define TDI_CONNECT                       0x03
00050 #define TDI_LISTEN                        0x04
00051 #define TDI_ACCEPT                        0x05
00052 #define TDI_DISCONNECT                    0x06
00053 #define TDI_SEND                          0x07
00054 #define TDI_RECEIVE                       0x08
00055 #define TDI_SEND_DATAGRAM                 0x09
00056 #define TDI_RECEIVE_DATAGRAM              0x0A
00057 #define TDI_SET_EVENT_HANDLER             0x0B
00058 #define TDI_QUERY_INFORMATION             0x0C
00059 #define TDI_SET_INFORMATION               0x0D
00060 #define TDI_ACTION                        0x0E
00061 
00062 #define TDI_DIRECT_SEND                   0x27
00063 #define TDI_DIRECT_SEND_DATAGRAM          0x29
00064 
00065 #define TDI_TRANSPORT_ADDRESS_FILE        1
00066 #define TDI_CONNECTION_FILE               2
00067 #define TDI_CONTROL_CHANNEL_FILE          3
00068 
00069 /* Internal TDI IOCTLS */
00070 #define IOCTL_TDI_QUERY_DIRECT_SEND_HANDLER   _TDI_CONTROL_CODE(0x80, METHOD_NEITHER)
00071 #define IOCTL_TDI_QUERY_DIRECT_SENDDG_HANDLER _TDI_CONTROL_CODE(0x81, METHOD_NEITHER)
00072 
00073 /* TdiAssociateAddress */
00074 typedef struct _TDI_REQUEST_KERNEL_ASSOCIATE {
00075   HANDLE AddressHandle;
00076 } TDI_REQUEST_KERNEL_ASSOCIATE, *PTDI_REQUEST_KERNEL_ASSOCIATE;
00077 
00078 /* TdiDisassociateAddress */
00079 typedef TDI_REQUEST_KERNEL TDI_REQUEST_KERNEL_DISASSOCIATE,
00080   *PTDI_REQUEST_KERNEL_DISASSOCIATE;
00081 
00082 /* TdiAccept */
00083 typedef struct _TDI_REQUEST_KERNEL_ACCEPT {
00084   PTDI_CONNECTION_INFORMATION RequestConnectionInformation;
00085   PTDI_CONNECTION_INFORMATION ReturnConnectionInformation;
00086 } TDI_REQUEST_KERNEL_ACCEPT, *PTDI_REQUEST_KERNEL_ACCEPT;
00087 
00088 /* TdiConnect */
00089 typedef TDI_REQUEST_KERNEL TDI_REQUEST_KERNEL_CONNECT,
00090   *PTDI_REQUEST_KERNEL_CONNECT;
00091 
00092 /* TdiDisconnect */
00093 typedef TDI_REQUEST_KERNEL TDI_REQUEST_KERNEL_DISCONNECT,
00094   *PTDI_REQUEST_KERNEL_DISCONNECT;
00095 
00096 /* TdiListen */
00097 typedef TDI_REQUEST_KERNEL TDI_REQUEST_KERNEL_LISTEN,
00098   *PTDI_REQUEST_KERNEL_LISTEN;
00099 
00100 /* TdiReceive */
00101 typedef struct _TDI_REQUEST_KERNEL_RECEIVE {
00102   ULONG ReceiveLength;
00103   ULONG ReceiveFlags;
00104 } TDI_REQUEST_KERNEL_RECEIVE, *PTDI_REQUEST_KERNEL_RECEIVE;
00105 
00106 /* TdiReceiveDatagram */
00107 typedef struct _TDI_REQUEST_KERNEL_RECEIVEDG {
00108   ULONG ReceiveLength;
00109   PTDI_CONNECTION_INFORMATION ReceiveDatagramInformation;
00110   PTDI_CONNECTION_INFORMATION ReturnDatagramInformation;
00111   ULONG ReceiveFlags;
00112 } TDI_REQUEST_KERNEL_RECEIVEDG, *PTDI_REQUEST_KERNEL_RECEIVEDG;
00113 
00114 /* TdiSend */
00115 typedef struct _TDI_REQUEST_KERNEL_SEND {
00116   ULONG SendLength;
00117   ULONG SendFlags;
00118 } TDI_REQUEST_KERNEL_SEND, *PTDI_REQUEST_KERNEL_SEND;
00119 
00120 /* TdiSendDatagram */
00121 typedef struct _TDI_REQUEST_KERNEL_SENDDG {
00122   ULONG SendLength;
00123   PTDI_CONNECTION_INFORMATION SendDatagramInformation;
00124 } TDI_REQUEST_KERNEL_SENDDG, *PTDI_REQUEST_KERNEL_SENDDG;
00125 
00126 /* TdiSetEventHandler */
00127 typedef struct _TDI_REQUEST_KERNEL_SET_EVENT {
00128   LONG EventType;
00129   PVOID EventHandler;
00130   PVOID EventContext;
00131 } TDI_REQUEST_KERNEL_SET_EVENT, *PTDI_REQUEST_KERNEL_SET_EVENT;
00132 
00133 /* TdiQueryInformation */
00134 typedef struct _TDI_REQUEST_KERNEL_QUERY_INFO {
00135   LONG QueryType;
00136   PTDI_CONNECTION_INFORMATION RequestConnectionInformation;
00137 } TDI_REQUEST_KERNEL_QUERY_INFORMATION, *PTDI_REQUEST_KERNEL_QUERY_INFORMATION;
00138 
00139 /* TdiSetInformation */
00140 typedef struct _TDI_REQUEST_KERNEL_SET_INFO {
00141   LONG SetType;
00142   PTDI_CONNECTION_INFORMATION RequestConnectionInformation;
00143 } TDI_REQUEST_KERNEL_SET_INFORMATION, *PTDI_REQUEST_KERNEL_SET_INFORMATION;
00144 
00145 /* Event types */
00146 #define TDI_EVENT_CONNECT                   0
00147 #define TDI_EVENT_DISCONNECT                1
00148 #define TDI_EVENT_ERROR                     2
00149 #define TDI_EVENT_RECEIVE                   3
00150 #define TDI_EVENT_RECEIVE_DATAGRAM          4
00151 #define TDI_EVENT_RECEIVE_EXPEDITED         5
00152 #define TDI_EVENT_SEND_POSSIBLE             6
00153 #define TDI_EVENT_CHAINED_RECEIVE           7
00154 #define TDI_EVENT_CHAINED_RECEIVE_DATAGRAM  8
00155 #define TDI_EVENT_CHAINED_RECEIVE_EXPEDITED 9
00156 #define TDI_EVENT_ERROR_EX                  10
00157 
00158 typedef NTSTATUS
00159 (NTAPI *PTDI_IND_CONNECT)(
00160   IN PVOID TdiEventContext,
00161   IN LONG RemoteAddressLength,
00162   IN PVOID RemoteAddress,
00163   IN LONG UserDataLength,
00164   IN PVOID UserData,
00165   IN LONG OptionsLength,
00166   IN PVOID Options,
00167   OUT CONNECTION_CONTEXT *ConnectionContext,
00168   OUT PIRP *AcceptIrp);
00169 
00170 TDIKRNLAPI
00171 NTSTATUS
00172 NTAPI
00173 TdiDefaultConnectHandler(
00174   IN PVOID TdiEventContext,
00175   IN LONG RemoteAddressLength,
00176   IN PVOID RemoteAddress,
00177   IN LONG UserDataLength,
00178   IN PVOID UserData,
00179   IN LONG OptionsLength,
00180   IN PVOID Options,
00181   OUT CONNECTION_CONTEXT *ConnectionContext,
00182   OUT PIRP *AcceptIrp);
00183 
00184 typedef NTSTATUS
00185 (NTAPI *PTDI_IND_DISCONNECT)(
00186   IN PVOID TdiEventContext,
00187   IN CONNECTION_CONTEXT ConnectionContext,
00188   IN LONG DisconnectDataLength,
00189   IN PVOID DisconnectData,
00190   IN LONG DisconnectInformationLength,
00191   IN PVOID DisconnectInformation,
00192   IN ULONG DisconnectFlags);
00193 
00194 TDIKRNLAPI
00195 NTSTATUS
00196 NTAPI
00197 TdiDefaultDisconnectHandler(
00198   IN PVOID TdiEventContext,
00199   IN CONNECTION_CONTEXT ConnectionContext,
00200   IN LONG DisconnectDataLength,
00201   IN PVOID DisconnectData,
00202   IN LONG DisconnectInformationLength,
00203   IN PVOID DisconnectInformation,
00204   IN ULONG DisconnectFlags);
00205 
00206 typedef NTSTATUS
00207 (NTAPI *PTDI_IND_ERROR)(
00208   IN PVOID TdiEventContext,
00209   IN NTSTATUS Status);
00210 
00211 typedef NTSTATUS
00212 (NTAPI *PTDI_IND_ERROR_EX)(
00213   IN PVOID TdiEventContext,
00214   IN NTSTATUS Status,
00215   IN PVOID Buffer);
00216 
00217 TDIKRNLAPI
00218 NTSTATUS
00219 NTAPI
00220 TdiDefaultErrorHandler(
00221   IN PVOID TdiEventContext,
00222   IN NTSTATUS Status);
00223 
00224 typedef NTSTATUS
00225 (NTAPI *PTDI_IND_RECEIVE)(
00226   IN PVOID TdiEventContext,
00227   IN CONNECTION_CONTEXT ConnectionContext,
00228   IN ULONG ReceiveFlags,
00229   IN ULONG BytesIndicated,
00230   IN ULONG BytesAvailable,
00231   OUT ULONG *BytesTaken,
00232   IN PVOID Tsdu,
00233   OUT PIRP *IoRequestPacket);
00234 
00235 TDIKRNLAPI
00236 NTSTATUS
00237 NTAPI
00238 TdiDefaultReceiveHandler(
00239   IN PVOID TdiEventContext,
00240   IN CONNECTION_CONTEXT ConnectionContext,
00241   IN ULONG ReceiveFlags,
00242   IN ULONG BytesIndicated,
00243   IN ULONG BytesAvailable,
00244   OUT ULONG *BytesTaken,
00245   IN PVOID Tsdu,
00246   OUT PIRP *IoRequestPacket);
00247 
00248 typedef NTSTATUS
00249 (NTAPI *PTDI_IND_RECEIVE_DATAGRAM)(
00250   IN PVOID TdiEventContext,
00251   IN LONG SourceAddressLength,
00252   IN PVOID SourceAddress,
00253   IN LONG OptionsLength,
00254   IN PVOID Options,
00255   IN ULONG ReceiveDatagramFlags,
00256   IN ULONG BytesIndicated,
00257   IN ULONG BytesAvailable,
00258   OUT ULONG *BytesTaken,
00259   IN PVOID Tsdu,
00260   OUT PIRP *IoRequestPacket);
00261 
00262 TDIKRNLAPI
00263 NTSTATUS NTAPI
00264 TdiDefaultRcvDatagramHandler(
00265   IN PVOID TdiEventContext,
00266   IN LONG SourceAddressLength,
00267   IN PVOID SourceAddress,
00268   IN LONG OptionsLength,
00269   IN PVOID Options,
00270   IN ULONG ReceiveDatagramFlags,
00271   IN ULONG BytesIndicated,
00272   IN ULONG BytesAvailable,
00273   OUT ULONG *BytesTaken,
00274   IN PVOID Tsdu,
00275   OUT PIRP *IoRequestPacket);
00276 
00277 typedef NTSTATUS
00278 (NTAPI *PTDI_IND_RECEIVE_EXPEDITED)(
00279   IN PVOID TdiEventContext,
00280   IN CONNECTION_CONTEXT ConnectionContext,
00281   IN ULONG ReceiveFlags,
00282   IN ULONG BytesIndicated,
00283   IN ULONG BytesAvailable,
00284   OUT ULONG *BytesTaken,
00285   IN PVOID Tsdu,
00286   OUT PIRP *IoRequestPacket);
00287 
00288 TDIKRNLAPI
00289 NTSTATUS
00290 NTAPI
00291 TdiDefaultRcvExpeditedHandler(
00292   IN PVOID  TdiEventContext,
00293   IN CONNECTION_CONTEXT  ConnectionContext,
00294   IN ULONG  ReceiveFlags,
00295   IN ULONG  BytesIndicated,
00296   IN ULONG  BytesAvailable,
00297   OUT ULONG  *BytesTaken,
00298   IN PVOID  Tsdu,
00299   OUT PIRP  *IoRequestPacket);
00300 
00301 typedef NTSTATUS
00302 (NTAPI *PTDI_IND_CHAINED_RECEIVE)(
00303   IN PVOID  TdiEventContext,
00304   IN CONNECTION_CONTEXT  ConnectionContext,
00305   IN ULONG  ReceiveFlags,
00306   IN ULONG  ReceiveLength,
00307   IN ULONG  StartingOffset,
00308   IN PMDL  Tsdu,
00309   IN PVOID  TsduDescriptor);
00310 
00311 TDIKRNLAPI
00312 NTSTATUS
00313 NTAPI
00314 TdiDefaultChainedReceiveHandler(
00315   IN PVOID  TdiEventContext,
00316   IN CONNECTION_CONTEXT  ConnectionContext,
00317   IN ULONG  ReceiveFlags,
00318   IN ULONG  ReceiveLength,
00319   IN ULONG  StartingOffset,
00320   IN PMDL  Tsdu,
00321   IN PVOID  TsduDescriptor);
00322 
00323 typedef NTSTATUS
00324 (NTAPI *PTDI_IND_CHAINED_RECEIVE_DATAGRAM)(
00325   IN PVOID  TdiEventContext,
00326   IN LONG  SourceAddressLength,
00327   IN PVOID  SourceAddress,
00328   IN LONG  OptionsLength,
00329   IN PVOID  Options,
00330   IN ULONG  ReceiveDatagramFlags,
00331   IN ULONG  ReceiveDatagramLength,
00332   IN ULONG  StartingOffset,
00333   IN PMDL  Tsdu,
00334   IN PVOID  TsduDescriptor);
00335 
00336 TDIKRNLAPI
00337 NTSTATUS
00338 NTAPI
00339 TdiDefaultChainedRcvDatagramHandler(
00340   IN PVOID  TdiEventContext,
00341   IN LONG  SourceAddressLength,
00342   IN PVOID  SourceAddress,
00343   IN LONG  OptionsLength,
00344   IN PVOID  Options,
00345   IN ULONG  ReceiveDatagramFlags,
00346   IN ULONG  ReceiveDatagramLength,
00347   IN ULONG  StartingOffset,
00348   IN PMDL  Tsdu,
00349   IN PVOID  TsduDescriptor);
00350 
00351 typedef NTSTATUS
00352 (NTAPI *PTDI_IND_CHAINED_RECEIVE_EXPEDITED)(
00353   IN PVOID  TdiEventContext,
00354   IN CONNECTION_CONTEXT  ConnectionContext,
00355   IN ULONG  ReceiveFlags,
00356   IN ULONG  ReceiveLength,
00357   IN ULONG  StartingOffset,
00358   IN PMDL  Tsdu,
00359   IN PVOID  TsduDescriptor);
00360 
00361 TDIKRNLAPI
00362 NTSTATUS
00363 NTAPI
00364 TdiDefaultChainedRcvExpeditedHandler(
00365   IN PVOID  TdiEventContext,
00366   IN CONNECTION_CONTEXT  ConnectionContext,
00367   IN ULONG  ReceiveFlags,
00368   IN ULONG  ReceiveLength,
00369   IN ULONG  StartingOffset,
00370   IN PMDL  Tsdu,
00371   IN PVOID  TsduDescriptor);
00372 
00373 typedef NTSTATUS
00374 (NTAPI *PTDI_IND_SEND_POSSIBLE)(
00375   IN PVOID  TdiEventContext,
00376   IN PVOID  ConnectionContext,
00377   IN ULONG  BytesAvailable);
00378 
00379 TDIKRNLAPI
00380 NTSTATUS
00381 NTAPI
00382 TdiDefaultSendPossibleHandler(
00383   IN PVOID  TdiEventContext,
00384   IN PVOID  ConnectionContext,
00385   IN ULONG  BytesAvailable);
00386 
00387 
00388 
00389 /* Macros and functions to build IRPs */
00390 
00391 #define TdiBuildBaseIrp(                                                  \
00392   bIrp, bDevObj, bFileObj, bCompRoutine, bContxt, bIrpSp, bMinor)         \
00393 {                                                                         \
00394   bIrpSp->MajorFunction = IRP_MJ_INTERNAL_DEVICE_CONTROL;                 \
00395   bIrpSp->MinorFunction = (bMinor);                                       \
00396   bIrpSp->DeviceObject  = (bDevObj);                                      \
00397   bIrpSp->FileObject    = (bFileObj);                                     \
00398   if (bCompRoutine)                                                       \
00399   {                                                                       \
00400     IoSetCompletionRoutine(bIrp, bCompRoutine, bContxt, TRUE, TRUE, TRUE);\
00401   }                                                                       \
00402   else                                                                    \
00403     IoSetCompletionRoutine(bIrp, NULL, NULL, FALSE, FALSE, FALSE);        \
00404 }
00405 
00406 /*
00407  * VOID
00408  * TdiBuildAccept(
00409  *   IN PIRP  Irp,
00410  *   IN PDEVICE_OBJECT  DevObj,
00411  *   IN PFILE_OBJECT  FileObj,
00412  *   IN PVOID  CompRoutine,
00413  *   IN PVOID  Contxt,
00414  *   IN PTDI_CONNECTION_INFORMATION  RequestConnectionInfo,
00415  *   OUT PTDI_CONNECTION_INFORMATION  ReturnConnectionInfo);
00416  */
00417 #define TdiBuildAccept(                                             \
00418   Irp, DevObj, FileObj, CompRoutine, Contxt,                        \
00419   RequestConnectionInfo, ReturnConnectionInfo)                      \
00420 {                                                                   \
00421   PTDI_REQUEST_KERNEL_ACCEPT _Request;                              \
00422   PIO_STACK_LOCATION _IrpSp;                                        \
00423                                                                     \
00424   _IrpSp = IoGetNextIrpStackLocation(Irp);                          \
00425                                                                     \
00426   TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine,                \
00427                   Contxt, _IrpSp, TDI_ACCEPT);                      \
00428                                                                     \
00429   _Request = (PTDI_REQUEST_KERNEL_ACCEPT)&_IrpSp->Parameters;       \
00430   _Request->RequestConnectionInformation = (RequestConnectionInfo); \
00431   _Request->ReturnConnectionInformation  = (ReturnConnectionInfo);  \
00432 }
00433 
00434 /*
00435  * VOID
00436  * TdiBuildAction(
00437  *   IN PIRP  Irp,
00438  *   IN PDEVICE_OBJECT  DevObj,
00439  *   IN PFILE_OBJECT  FileObj,
00440  *   IN PVOID  CompRoutine,
00441  *   IN PVOID  Contxt,
00442  *   IN PMDL  MdlAddr);
00443  */
00444 #define TdiBuildAction(                               \
00445   Irp, DevObj, FileObj, CompRoutine, Contxt, MdlAddr) \
00446 {                                                     \
00447   PIO_STACK_LOCATION _IrpSp;                          \
00448                                                       \
00449   _IrpSp = IoGetNextIrpStackLocation(Irp);            \
00450                                                       \
00451   TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine,  \
00452                   Contxt, _IrpSp, TDI_ACTION);        \
00453                                                       \
00454   (Irp)->MdlAddress = (MdlAddr);                      \
00455 }
00456 
00457 /*
00458  * VOID
00459  * TdiBuildAssociateAddress(
00460  *   IN PIRP  Irp,
00461  *   IN PDEVICE_OBJECT  DevObj,
00462  *   IN PFILE_OBJECT  FileObj,
00463  *   IN PVOID  CompRoutine,
00464  *   IN PVOID  Contxt,
00465  *   IN HANDLE  AddrHandle);
00466  */
00467 #define TdiBuildAssociateAddress(                                \
00468   Irp, DevObj, FileObj, CompRoutine, Contxt, AddrHandle)         \
00469 {                                                                \
00470   PTDI_REQUEST_KERNEL_ASSOCIATE _Request;                        \
00471   PIO_STACK_LOCATION _IrpSp;                                     \
00472                                                                  \
00473   _IrpSp = IoGetNextIrpStackLocation(Irp);                       \
00474                                                                  \
00475   TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine,             \
00476                   Contxt, _IrpSp, TDI_ASSOCIATE_ADDRESS);        \
00477                                                                  \
00478   _Request = (PTDI_REQUEST_KERNEL_ASSOCIATE)&_IrpSp->Parameters; \
00479   _Request->AddressHandle = (HANDLE)(AddrHandle);                \
00480 }
00481 
00482 /*
00483  * VOID
00484  * TdiBuildConnect(
00485  *   IN PIRP  Irp,
00486  *   IN PDEVICE_OBJECT  DevObj,
00487  *   IN PFILE_OBJECT  FileObj,
00488  *   IN PVOID  CompRoutine,
00489  *   IN PVOID  Contxt,
00490  *   IN PLARGE_INTEGER  Time,
00491  *   IN PTDI_CONNECTION_INFORMATION  RequestConnectionInfo,
00492  *   OUT PTDI_CONNECTION_INFORMATION  ReturnConnectionInfo);
00493  */
00494 #define TdiBuildConnect(                                            \
00495   Irp, DevObj, FileObj, CompRoutine, Contxt,                        \
00496   Time, RequestConnectionInfo, ReturnConnectionInfo)                \
00497 {                                                                   \
00498   PTDI_REQUEST_KERNEL _Request;                                     \
00499   PIO_STACK_LOCATION _IrpSp;                                        \
00500                                                                     \
00501   _IrpSp = IoGetNextIrpStackLocation(Irp);                          \
00502                                                                     \
00503   TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine,                \
00504                   Contxt, _IrpSp, TDI_CONNECT);                     \
00505                                                                     \
00506   _Request = (PTDI_REQUEST_KERNEL)&_IrpSp->Parameters;              \
00507   _Request->RequestConnectionInformation = (RequestConnectionInfo); \
00508   _Request->ReturnConnectionInformation  = (ReturnConnectionInfo);  \
00509   _Request->RequestSpecific              = (PVOID)(Time);           \
00510 }
00511 
00512 /*
00513  * VOID
00514  * TdiBuildDisassociateAddress(
00515  *   IN PIRP  Irp,
00516  *   IN PDEVICE_OBJECT  DevObj,
00517  *   IN PFILE_OBJECT  FileObj,
00518  *   IN PVOID  CompRoutine,
00519  *   IN PVOID  Contxt);
00520  */
00521 #define TdiBuildDisassociateAddress(                                \
00522   Irp, DevObj, FileObj, CompRoutine, Contxt)                        \
00523 {                                                                   \
00524   PIO_STACK_LOCATION _IrpSp;                                        \
00525                                                                     \
00526   _IrpSp = IoGetNextIrpStackLocation(Irp);                          \
00527                                                                     \
00528   TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine,                \
00529                   Contxt, _IrpSp, TDI_DISASSOCIATE_ADDRESS);        \
00530 }
00531 
00532 /*
00533  * VOID
00534  * TdiBuildDisconnect(
00535  *   IN PIRP  Irp,
00536  *   IN PDEVICE_OBJECT  DevObj,
00537  *   IN PFILE_OBJECT  FileObj,
00538  *   IN PVOID  CompRoutine,
00539  *   IN PVOID  Contxt,
00540  *   IN PLARGE_INTEGER  Time,
00541  *   IN PULONG  Flags,
00542  *   IN PTDI_CONNECTION_INFORMATION  RequestConnectionInfo,
00543  *   OUT PTDI_CONNECTION_INFORMATION  ReturnConnectionInfo);
00544  */
00545 #define TdiBuildDisconnect(                                         \
00546   Irp, DevObj, FileObj, CompRoutine, Contxt, Time,                  \
00547   Flags, RequestConnectionInfo, ReturnConnectionInfo)               \
00548 {                                                                   \
00549   PTDI_REQUEST_KERNEL _Request;                                     \
00550   PIO_STACK_LOCATION _IrpSp;                                        \
00551                                                                     \
00552   _IrpSp = IoGetNextIrpStackLocation(Irp);                          \
00553                                                                     \
00554   TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine,                \
00555                   Contxt, _IrpSp, TDI_DISCONNECT);                  \
00556                                                                     \
00557   _Request = (PTDI_REQUEST_KERNEL)&_IrpSp->Parameters;              \
00558   _Request->RequestConnectionInformation = (RequestConnectionInfo); \
00559   _Request->ReturnConnectionInformation  = (ReturnConnectionInfo);  \
00560   _Request->RequestSpecific = (PVOID)(Time);                        \
00561   _Request->RequestFlags    = (Flags);                              \
00562 }
00563 
00564 /*
00565  * PIRP
00566  * TdiBuildInternalDeviceControlIrp(
00567  *   IN CCHAR IrpSubFunction,
00568  *   IN PDEVICE_OBJECT DeviceObject,
00569  *   IN PFILE_OBJECT FileObject,
00570  *   IN PKEVENT Event,
00571  *   IN PIO_STATUS_BLOCK IoStatusBlock);
00572  */
00573 #define TdiBuildInternalDeviceControlIrp( \
00574   IrpSubFunction, DeviceObject,           \
00575   FileObject, Event, IoStatusBlock)       \
00576   IoBuildDeviceIoControlRequest(          \
00577         IrpSubFunction, DeviceObject,             \
00578         NULL, 0, NULL, 0,                     \
00579         TRUE, Event, IoStatusBlock)
00580 
00581 /*
00582  * VOID
00583  * TdiBuildListen(
00584  *   IN PIRP  Irp,
00585  *   IN PDEVICE_OBJECT  DevObj,
00586  *   IN PFILE_OBJECT  FileObj,
00587  *   IN PVOID  CompRoutine,
00588  *   IN PVOID  Contxt,
00589  *   IN ULONG  Flags,
00590  *   IN PTDI_CONNECTION_INFORMATION  RequestConnectionInfo,
00591  *   OUT PTDI_CONNECTION_INFORMATION  ReturnConnectionInfo);
00592  */
00593 #define TdiBuildListen(                                             \
00594   Irp, DevObj, FileObj, CompRoutine, Contxt,                        \
00595   Flags, RequestConnectionInfo, ReturnConnectionInfo)               \
00596 {                                                                   \
00597   PTDI_REQUEST_KERNEL _Request;                                     \
00598   PIO_STACK_LOCATION _IrpSp;                                        \
00599                                                                     \
00600   _IrpSp = IoGetNextIrpStackLocation(Irp);                          \
00601                                                                     \
00602   TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine,                \
00603                   Contxt, _IrpSp, TDI_LISTEN);                      \
00604                                                                     \
00605   _Request = (PTDI_REQUEST_KERNEL)&_IrpSp->Parameters;              \
00606   _Request->RequestConnectionInformation = (RequestConnectionInfo); \
00607   _Request->ReturnConnectionInformation  = (ReturnConnectionInfo);  \
00608   _Request->RequestFlags = (Flags);                                 \
00609 }
00610 
00611 TDIKRNLAPI
00612 VOID
00613 NTAPI
00614 TdiBuildNetbiosAddress(
00615     IN PUCHAR  NetbiosName,
00616     IN BOOLEAN  IsGroupName,
00617     IN OUT PTA_NETBIOS_ADDRESS  NetworkName);
00618 
00619 TDIKRNLAPI
00620 NTSTATUS
00621 NTAPI
00622 TdiBuildNetbiosAddressEa(
00623   IN PUCHAR  Buffer,
00624   IN BOOLEAN  IsGroupName,
00625   IN PUCHAR  NetbiosName);
00626 
00627 /*
00628  * VOID
00629  * TdiBuildQueryInformation(
00630  *   IN PIRP  Irp,
00631  *   IN PDEVICE_OBJECT  DevObj,
00632  *   IN PFILE_OBJECT  FileObj,
00633  *   IN PVOID  CompRoutine,
00634  *   IN PVOID  Contxt,
00635  *   IN UINT  QType,
00636  *   IN PMDL  MdlAddr);
00637  */
00638 #define TdiBuildQueryInformation(                                        \
00639   Irp, DevObj, FileObj, CompRoutine, Contxt, QType, MdlAddr)             \
00640 {                                                                        \
00641   PTDI_REQUEST_KERNEL_QUERY_INFORMATION _Request;                        \
00642   PIO_STACK_LOCATION _IrpSp;                                             \
00643                                                                          \
00644   _IrpSp = IoGetNextIrpStackLocation(Irp);                               \
00645                                                                          \
00646   TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine,                     \
00647                   Contxt, _IrpSp, TDI_QUERY_INFORMATION);                \
00648                                                                          \
00649   _Request = (PTDI_REQUEST_KERNEL_QUERY_INFORMATION)&_IrpSp->Parameters; \
00650   _Request->RequestConnectionInformation = NULL;                         \
00651   _Request->QueryType = (ULONG)(QType);                                  \
00652   (Irp)->MdlAddress   = (MdlAddr);                                       \
00653 }
00654 
00655 /*
00656  * VOID
00657  * TdiBuildReceive(
00658  *   IN PIRP  Irp,
00659  *   IN PDEVICE_OBJECT  DevObj,
00660  *   IN PFILE_OBJECT  FileObj,
00661  *   IN PVOID  CompRoutine,
00662  *   IN PVOID  Contxt,
00663  *   IN PMDL  MdlAddr,
00664  *   IN ULONG  InFlags,
00665  *   IN ULONG  ReceiveLen);
00666  */
00667 #define TdiBuildReceive(                                       \
00668   Irp, DevObj, FileObj, CompRoutine, Contxt,                   \
00669   MdlAddr, InFlags, ReceiveLen)                                \
00670 {                                                              \
00671   PTDI_REQUEST_KERNEL_RECEIVE _Request;                        \
00672   PIO_STACK_LOCATION _IrpSp;                                   \
00673                                                                \
00674   _IrpSp = IoGetNextIrpStackLocation(Irp);                     \
00675                                                                \
00676   TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine,           \
00677                   Contxt, _IrpSp, TDI_RECEIVE);                \
00678                                                                \
00679   _Request = (PTDI_REQUEST_KERNEL_RECEIVE)&_IrpSp->Parameters; \
00680   _Request->ReceiveFlags  = (InFlags);                         \
00681   _Request->ReceiveLength = (ReceiveLen);                      \
00682   (Irp)->MdlAddress       = (MdlAddr);                         \
00683 }
00684 
00685 /*
00686  * VOID
00687  * TdiBuildReceiveDatagram(
00688  *   IN PIRP  Irp,
00689  *   IN PDEVICE_OBJECT  DevObj,
00690  *   IN PFILE_OBJECT  FileObj,
00691  *   IN PVOID  CompRoutine,
00692  *   IN PVOID  Contxt,
00693  *   IN PMDL  MdlAddr,
00694  *   IN ULONG  ReceiveLen,
00695  *   IN PTDI_CONNECTION_INFORMATION  ReceiveDatagramInfo,
00696  *   OUT PTDI_CONNECTION_INFORMATION  ReturnInfo,
00697  *   ULONG InFlags);
00698  */
00699 #define TdiBuildReceiveDatagram(                                 \
00700   Irp, DevObj, FileObj, CompRoutine, Contxt, MdlAddr,            \
00701   ReceiveLen, ReceiveDatagramInfo, ReturnInfo, InFlags)          \
00702 {                                                                \
00703   PTDI_REQUEST_KERNEL_RECEIVEDG _Request;                        \
00704   PIO_STACK_LOCATION _IrpSp;                                     \
00705                                                                  \
00706   _IrpSp = IoGetNextIrpStackLocation(Irp);                       \
00707                                                                  \
00708   TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine,             \
00709                   Contxt, _IrpSp, TDI_RECEIVE_DATAGRAM);         \
00710                                                                  \
00711   _Request = (PTDI_REQUEST_KERNEL_RECEIVEDG)&_IrpSp->Parameters; \
00712   _Request->ReceiveDatagramInformation = (ReceiveDatagramInfo);  \
00713   _Request->ReturnDatagramInformation  = (ReturnInfo);           \
00714   _Request->ReceiveLength = (ReceiveLen);                        \
00715   _Request->ReceiveFlags  = (InFlags);                           \
00716   (Irp)->MdlAddress       = (MdlAddr);                           \
00717 }
00718 
00719 /*
00720  * VOID
00721  * TdiBuildSend(
00722  *   IN PIRP  Irp,
00723  *   IN PDEVICE_OBJECT  DevObj,
00724  *   IN PFILE_OBJECT  FileObj,
00725  *   IN PVOID  CompRoutine,
00726  *   IN PVOID  Contxt,
00727  *   IN PMDL  MdlAddr,
00728  *   IN ULONG  InFlags,
00729  *   IN ULONG  SendLen);
00730  */
00731 #define TdiBuildSend(                                       \
00732   Irp, DevObj, FileObj, CompRoutine, Contxt,                \
00733   MdlAddr, InFlags, SendLen)                                \
00734 {                                                           \
00735   PTDI_REQUEST_KERNEL_SEND _Request;                        \
00736   PIO_STACK_LOCATION _IrpSp;                                \
00737                                                             \
00738   _IrpSp = IoGetNextIrpStackLocation(Irp);                  \
00739                                                             \
00740   TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine,        \
00741                   Contxt, _IrpSp, TDI_SEND);                \
00742                                                             \
00743   _Request = (PTDI_REQUEST_KERNEL_SEND)&_IrpSp->Parameters; \
00744   _Request->SendFlags  = (InFlags);                         \
00745   _Request->SendLength = (SendLen);                         \
00746   (Irp)->MdlAddress    = (MdlAddr);                         \
00747 }
00748 
00749 /*
00750  * VOID
00751  * TdiBuildSendDatagram(
00752  *   IN PIRP  Irp,
00753  *   IN PDEVICE_OBJECT  DevObj,
00754  *   IN PFILE_OBJECT  FileObj,
00755  *   IN PVOID  CompRoutine,
00756  *   IN PVOID  Contxt,
00757  *   IN PMDL  MdlAddr,
00758  *   IN ULONG  SendLen,
00759  *   IN PTDI_CONNECTION_INFORMATION  SendDatagramInfo);
00760  */
00761 #define TdiBuildSendDatagram(                                 \
00762   Irp, DevObj, FileObj, CompRoutine, Contxt,                  \
00763   MdlAddr, SendLen, SendDatagramInfo)                         \
00764 {                                                             \
00765   PTDI_REQUEST_KERNEL_SENDDG _Request;                        \
00766   PIO_STACK_LOCATION _IrpSp;                                  \
00767                                                               \
00768   _IrpSp = IoGetNextIrpStackLocation(Irp);                    \
00769                                                               \
00770   TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine,          \
00771                   Contxt, _IrpSp, TDI_SEND_DATAGRAM);         \
00772                                                               \
00773   _Request = (PTDI_REQUEST_KERNEL_SENDDG)&_IrpSp->Parameters; \
00774   _Request->SendDatagramInformation = (SendDatagramInfo);     \
00775   _Request->SendLength = (SendLen);                           \
00776   (Irp)->MdlAddress    = (MdlAddr);                           \
00777 }
00778 
00779 /*
00780  * VOID
00781  * TdiBuildSetEventHandler(
00782  *   IN PIRP  Irp,
00783  *   IN PDEVICE_OBJECT  DevObj,
00784  *   IN PFILE_OBJECT  FileObj,
00785  *   IN PVOID  CompRoutine,
00786  *   IN PVOID  Contxt,
00787  *   IN INT  InEventType,
00788  *   IN PVOID  InEventHandler,
00789  *   IN PVOID  InEventContext);
00790  */
00791 #define TdiBuildSetEventHandler(                                 \
00792   Irp, DevObj, FileObj, CompRoutine, Contxt,                     \
00793   InEventType, InEventHandler, InEventContext)                   \
00794 {                                                                \
00795   PTDI_REQUEST_KERNEL_SET_EVENT _Request;                        \
00796   PIO_STACK_LOCATION _IrpSp;                                     \
00797                                                                  \
00798   _IrpSp = IoGetNextIrpStackLocation(Irp);                       \
00799                                                                  \
00800   TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine,             \
00801                   Contxt, _IrpSp, TDI_SET_EVENT_HANDLER);        \
00802                                                                  \
00803   _Request = (PTDI_REQUEST_KERNEL_SET_EVENT)&_IrpSp->Parameters; \
00804   _Request->EventType    = (InEventType);                        \
00805   _Request->EventHandler = (PVOID)(InEventHandler);              \
00806   _Request->EventContext = (PVOID)(InEventContext);              \
00807 }
00808 
00809 /*
00810  * VOID
00811  * TdiBuildSetInformation(
00812  *   IN PIRP  Irp,
00813  *   IN PDEVICE_OBJECT  DevObj,
00814  *   IN PFILE_OBJECT  FileObj,
00815  *   IN PVOID  CompRoutine,
00816  *   IN PVOID  Contxt,
00817  *   IN UINT  SType,
00818  *   IN PMDL  MdlAddr);
00819  */
00820 #define TdiBuildSetInformation(                                        \
00821   Irp, DevObj, FileObj, CompRoutine, Contxt, SType, MdlAddr)           \
00822 {                                                                      \
00823   PTDI_REQUEST_KERNEL_SET_INFORMATION _Request;                        \
00824   PIO_STACK_LOCATION _IrpSp;                                           \
00825                                                                        \
00826   _IrpSp = IoGetNextIrpStackLocation(Irp);                             \
00827                                                                        \
00828   TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine,                   \
00829                   Contxt, _IrpSp, TDI_SET_INFORMATION);                \
00830                                                                        \
00831   _Request = (PTDI_REQUEST_KERNEL_SET_INFORMATION)&_IrpSp->Parameters; \
00832   _Request->RequestConnectionInformation = NULL;                       \
00833   _Request->SetType = (ULONG)(SType);                                  \
00834   (Irp)->MdlAddress = (MdlAddr);                                       \
00835 }
00836 
00837 /* TDI20_CLIENT_INTERFACE_INFO.TdiVersion constants */
00838 #define TDI_CURRENT_MAJOR_VERSION         2
00839 #define TDI_CURRENT_MINOR_VERSION         0
00840 
00841 #define TDI_CURRENT_VERSION ((TDI_CURRENT_MINOR_VERSION) << 8 \
00842   | (TDI_CURRENT_MAJOR_VERSION))
00843 
00844 #define TDI_VERSION_ONE                   0x0001
00845 
00846 typedef enum _TDI_PNP_OPCODE {
00847   TDI_PNP_OP_MIN,
00848   TDI_PNP_OP_ADD,
00849   TDI_PNP_OP_DEL,
00850   TDI_PNP_OP_UPDATE,
00851   TDI_PNP_OP_PROVIDERREADY,
00852   TDI_PNP_OP_NETREADY,
00853   TDI_PNP_OP_ADD_IGNORE_BINDING,
00854   TDI_PNP_OP_DELETE_IGNORE_BINDING,
00855   TDI_PNP_OP_MAX
00856 } TDI_PNP_OPCODE;
00857 
00858 /* TDI_PNP_CONTEXT.ContextType */
00859 #define TDI_PNP_CONTEXT_TYPE_IF_NAME            0x1
00860 #define TDI_PNP_CONTEXT_TYPE_IF_ADDR            0x2
00861 #define TDI_PNP_CONTEXT_TYPE_PDO                0x3
00862 #define TDI_PNP_CONTEXT_TYPE_FIRST_OR_LAST_IF   0x4
00863 
00864 typedef struct _TDI_PNP_CONTEXT {
00865   USHORT  ContextSize;
00866   USHORT  ContextType;
00867   UCHAR  ContextData[1];
00868 } TDI_PNP_CONTEXT, *PTDI_PNP_CONTEXT;
00869 
00870 typedef VOID
00871 (NTAPI *TDI_ADD_ADDRESS_HANDLER)(
00872   IN PTA_ADDRESS  Address);
00873 
00874 typedef VOID
00875 (NTAPI *TDI_ADD_ADDRESS_HANDLER_V2)(
00876   IN PTA_ADDRESS  Address,
00877   IN PUNICODE_STRING  DeviceName,
00878   IN PTDI_PNP_CONTEXT  Context);
00879 
00880 typedef VOID
00881 (NTAPI *TDI_BINDING_HANDLER)(
00882   IN TDI_PNP_OPCODE  PnPOpcode,
00883   IN PUNICODE_STRING  DeviceName,
00884   IN PWSTR  MultiSZBindList);
00885 
00886 typedef VOID
00887 (NTAPI *TDI_BIND_HANDLER)(
00888   IN PUNICODE_STRING  DeviceName);
00889 
00890 typedef VOID
00891 (NTAPI *TDI_DEL_ADDRESS_HANDLER)(
00892   IN PTA_ADDRESS  Address);
00893 
00894 typedef VOID
00895 (NTAPI *TDI_DEL_ADDRESS_HANDLER_V2)(
00896   IN PTA_ADDRESS  Address,
00897   IN PUNICODE_STRING  DeviceName,
00898   IN PTDI_PNP_CONTEXT  Context);
00899 
00900 typedef NTSTATUS
00901 (NTAPI *TDI_PNP_POWER_HANDLER)(
00902   IN PUNICODE_STRING  DeviceName,
00903   IN PNET_PNP_EVENT  PowerEvent,
00904   IN PTDI_PNP_CONTEXT  Context1,
00905   IN PTDI_PNP_CONTEXT  Context2);
00906 
00907 typedef VOID
00908 (NTAPI *TDI_UNBIND_HANDLER)(
00909   IN PUNICODE_STRING  DeviceName);
00910 
00911 typedef VOID
00912 (NTAPI *ProviderPnPPowerComplete)(
00913   IN PNET_PNP_EVENT  NetEvent,
00914   IN NTSTATUS  ProviderStatus);
00915 
00916 typedef struct _TDI20_CLIENT_INTERFACE_INFO {
00917   _ANONYMOUS_UNION union {
00918     _ANONYMOUS_STRUCT struct {
00919       UCHAR  MajorTdiVersion;
00920       UCHAR  MinorTdiVersion;
00921     } DUMMYSTRUCTNAME;
00922     USHORT TdiVersion;
00923   } DUMMYUNIONNAME;
00924   USHORT  Unused;
00925   PUNICODE_STRING  ClientName;
00926   TDI_PNP_POWER_HANDLER  PnPPowerHandler;
00927   _ANONYMOUS_UNION union {
00928     TDI_BINDING_HANDLER  BindingHandler;
00929     _ANONYMOUS_STRUCT struct {
00930       TDI_BIND_HANDLER  BindHandler;
00931       TDI_UNBIND_HANDLER  UnBindHandler;
00932     } DUMMYSTRUCTNAME;
00933   }DUMMYUNIONNAME2;
00934   _ANONYMOUS_UNION union {
00935     _ANONYMOUS_STRUCT struct {
00936       TDI_ADD_ADDRESS_HANDLER_V2  AddAddressHandlerV2;
00937       TDI_DEL_ADDRESS_HANDLER_V2  DelAddressHandlerV2;
00938     } DUMMYSTRUCTNAME;
00939     _ANONYMOUS_STRUCT struct {
00940       TDI_ADD_ADDRESS_HANDLER  AddAddressHandler;
00941       TDI_DEL_ADDRESS_HANDLER  DelAddressHandler;
00942     } DUMMYSTRUCTNAME2;
00943   } DUMMYUNIONNAME3;
00944 } TDI20_CLIENT_INTERFACE_INFO, *PTDI20_CLIENT_INTERFACE_INFO;
00945 
00946 typedef TDI20_CLIENT_INTERFACE_INFO TDI_CLIENT_INTERFACE_INFO;
00947 typedef TDI_CLIENT_INTERFACE_INFO *PTDI_CLIENT_INTERFACE_INFO;
00948 
00949 
00950 /* TDI functions */
00951 
00952 /*
00953  * VOID
00954  * TdiCompleteRequest(
00955  *   IN PIRP Irp,
00956  *   IN NTSTATUS Status);
00957  */
00958 #define TdiCompleteRequest(Irp, Status)           \
00959 {                                                 \
00960   (Irp)->IoStatus.Status = (Status);              \
00961   IoCompleteRequest((Irp), IO_NETWORK_INCREMENT); \
00962 }
00963 
00964 TDIKRNLAPI
00965 NTSTATUS
00966 NTAPI
00967 TdiCopyBufferToMdl(
00968   IN PVOID  SourceBuffer,
00969   IN ULONG  SourceOffset,
00970   IN ULONG  SourceBytesToCopy,
00971   IN PMDL  DestinationMdlChain,
00972   IN ULONG  DestinationOffset,
00973   IN PULONG  BytesCopied);
00974 
00975 /*
00976  * VOID
00977  * TdiCopyLookaheadData(
00978  *   IN PVOID  Destination,
00979  *   IN PVOID  Source,
00980  *   IN ULONG  Length,
00981  *   IN ULONG  ReceiveFlags);
00982  */
00983 #define TdiCopyLookaheadData(Destination, Source, Length, ReceiveFlags) \
00984   RtlCopyMemory(Destination, Source, Length)
00985 
00986 TDIKRNLAPI
00987 NTSTATUS
00988 NTAPI
00989 TdiCopyMdlChainToMdlChain (
00990   IN PMDL  SourceMdlChain,
00991   IN ULONG  SourceOffset,
00992   IN PMDL  DestinationMdlChain,
00993   IN ULONG  DestinationOffset,
00994   OUT PULONG  BytesCopied);
00995 
00996 TDIKRNLAPI
00997 NTSTATUS
00998 NTAPI
00999 TdiCopyMdlToBuffer(
01000   IN PMDL  SourceMdlChain,
01001   IN ULONG  SourceOffset,
01002   IN PVOID  DestinationBuffer,
01003   IN ULONG  DestinationOffset,
01004   IN ULONG  DestinationBufferSize,
01005   OUT PULONG  BytesCopied);
01006 
01007 TDIKRNLAPI
01008 NTSTATUS
01009 NTAPI
01010 TdiDeregisterAddressChangeHandler(
01011   IN HANDLE  BindingHandle);
01012 
01013 TDIKRNLAPI
01014 NTSTATUS
01015 NTAPI
01016 TdiDeregisterDeviceObject(
01017   IN HANDLE  DevRegistrationHandle);
01018 
01019 TDIKRNLAPI
01020 NTSTATUS
01021 NTAPI
01022 TdiDeregisterNetAddress(
01023   IN HANDLE  AddrRegistrationHandle);
01024 
01025 TDIKRNLAPI
01026 NTSTATUS
01027 NTAPI
01028 TdiDeregisterPnPHandlers(
01029   IN HANDLE  BindingHandle);
01030 
01031 TDIKRNLAPI
01032 NTSTATUS
01033 NTAPI
01034 TdiDeregisterProvider(
01035   IN HANDLE  ProviderHandle);
01036 
01037 TDIKRNLAPI
01038 NTSTATUS
01039 NTAPI
01040 TdiEnumerateAddresses(
01041   IN HANDLE  BindingHandle);
01042 
01043 TDIKRNLAPI
01044 VOID
01045 NTAPI
01046 TdiInitialize(
01047   VOID);
01048 
01049 TDIKRNLAPI
01050 VOID
01051 NTAPI
01052 TdiMapBuffer(
01053   IN PMDL  MdlChain);
01054 
01055 TDIKRNLAPI
01056 NTSTATUS
01057 NTAPI
01058 TdiMapUserRequest(
01059   IN PDEVICE_OBJECT  DeviceObject,
01060   IN PIRP  Irp,
01061   IN PIO_STACK_LOCATION  IrpSp);
01062 
01063 TDIKRNLAPI
01064 BOOLEAN
01065 NTAPI
01066 TdiMatchPdoWithChainedReceiveContext(
01067   IN PVOID TsduDescriptor,
01068   IN PVOID PDO);
01069 
01070 TDIKRNLAPI
01071 VOID
01072 NTAPI
01073 TdiPnPPowerComplete(
01074   IN HANDLE  BindingHandle,
01075   IN PNET_PNP_EVENT  PowerEvent,
01076   IN NTSTATUS  Status);
01077 
01078 TDIKRNLAPI
01079 NTSTATUS
01080 NTAPI
01081 TdiPnPPowerRequest(
01082   IN PUNICODE_STRING  DeviceName,
01083   IN PNET_PNP_EVENT  PowerEvent,
01084   IN PTDI_PNP_CONTEXT  Context1,
01085   IN PTDI_PNP_CONTEXT  Context2,
01086   IN ProviderPnPPowerComplete  ProtocolCompletionHandler);
01087 
01088 TDIKRNLAPI
01089 NTSTATUS
01090 NTAPI
01091 TdiProviderReady(
01092   IN HANDLE  ProviderHandle);
01093 
01094 TDIKRNLAPI
01095 NTSTATUS
01096 NTAPI
01097 TdiRegisterAddressChangeHandler(
01098   IN TDI_ADD_ADDRESS_HANDLER  AddHandler,
01099   IN TDI_DEL_ADDRESS_HANDLER  DeleteHandler,
01100   OUT HANDLE  *BindingHandle);
01101 
01102 TDIKRNLAPI
01103 NTSTATUS
01104 NTAPI
01105 TdiRegisterDeviceObject(
01106   IN PUNICODE_STRING  DeviceName,
01107   OUT HANDLE  *DevRegistrationHandle);
01108 
01109 TDIKRNLAPI
01110 NTSTATUS
01111 NTAPI
01112 TdiRegisterNetAddress(
01113   IN PTA_ADDRESS  Address,
01114   IN PUNICODE_STRING  DeviceName,
01115   IN PTDI_PNP_CONTEXT  Context,
01116   OUT HANDLE  *AddrRegistrationHandle);
01117 
01118 TDIKRNLAPI
01119 NTSTATUS
01120 NTAPI
01121 TdiRegisterNotificationHandler(
01122   IN TDI_BIND_HANDLER  BindHandler,
01123   IN TDI_UNBIND_HANDLER  UnbindHandler,
01124   OUT HANDLE  *BindingHandle);
01125 
01126 TDIKRNLAPI
01127 NTSTATUS
01128 NTAPI
01129 TdiRegisterPnPHandlers(
01130   IN PTDI_CLIENT_INTERFACE_INFO  ClientInterfaceInfo,
01131   IN ULONG  InterfaceInfoSize,
01132   OUT HANDLE  *BindingHandle);
01133 
01134 TDIKRNLAPI
01135 NTSTATUS
01136 NTAPI
01137 TdiRegisterProvider(
01138   IN PUNICODE_STRING  ProviderName,
01139   OUT HANDLE  *ProviderHandle);
01140 
01141 TDIKRNLAPI
01142 VOID
01143 NTAPI
01144 TdiReturnChainedReceives(
01145   IN PVOID  *TsduDescriptors,
01146   IN ULONG   NumberOfTsdus);
01147 
01148 TDIKRNLAPI
01149 VOID
01150 NTAPI
01151 TdiUnmapBuffer(
01152   IN PMDL  MdlChain);
01153 
01154 #ifdef __cplusplus
01155 }
01156 #endif
01157 
01158 #endif /* __TDIKRNL_H */

Generated on Fri May 25 2012 04:28:52 for ReactOS by doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.