tdikrnl.h 36 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159
  1. /*
  2. * tdikrnl.h
  3. *
  4. * TDI kernel mode definitions
  5. *
  6. * This file is part of the w32api package.
  7. *
  8. * Contributors:
  9. * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
  10. *
  11. * THIS SOFTWARE IS NOT COPYRIGHTED
  12. *
  13. * This source code is offered for use in the public domain. You may
  14. * use, modify or distribute it freely.
  15. *
  16. * This code is distributed in the hope that it will be useful but
  17. * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
  18. * DISCLAIMED. This includes but is not limited to warranties of
  19. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  20. *
  21. */
  22. #ifndef __TDIKRNL_H
  23. #define __TDIKRNL_H
  24. #include "tdi.h"
  25. #ifdef __cplusplus
  26. extern "C" {
  27. #endif
  28. #if defined(_TDI_)
  29. #define TDIKRNLAPI
  30. #else
  31. #define TDIKRNLAPI DECLSPEC_IMPORT
  32. #endif
  33. typedef struct _TDI_REQUEST_KERNEL {
  34. ULONG RequestFlags;
  35. PTDI_CONNECTION_INFORMATION RequestConnectionInformation;
  36. PTDI_CONNECTION_INFORMATION ReturnConnectionInformation;
  37. PVOID RequestSpecific;
  38. } TDI_REQUEST_KERNEL, *PTDI_REQUEST_KERNEL;
  39. /* Request codes */
  40. #define TDI_ASSOCIATE_ADDRESS 0x01
  41. #define TDI_DISASSOCIATE_ADDRESS 0x02
  42. #define TDI_CONNECT 0x03
  43. #define TDI_LISTEN 0x04
  44. #define TDI_ACCEPT 0x05
  45. #define TDI_DISCONNECT 0x06
  46. #define TDI_SEND 0x07
  47. #define TDI_RECEIVE 0x08
  48. #define TDI_SEND_DATAGRAM 0x09
  49. #define TDI_RECEIVE_DATAGRAM 0x0A
  50. #define TDI_SET_EVENT_HANDLER 0x0B
  51. #define TDI_QUERY_INFORMATION 0x0C
  52. #define TDI_SET_INFORMATION 0x0D
  53. #define TDI_ACTION 0x0E
  54. #define TDI_DIRECT_SEND 0x27
  55. #define TDI_DIRECT_SEND_DATAGRAM 0x29
  56. #define TDI_TRANSPORT_ADDRESS_FILE 1
  57. #define TDI_CONNECTION_FILE 2
  58. #define TDI_CONTROL_CHANNEL_FILE 3
  59. /* Internal TDI IOCTLS */
  60. #define IOCTL_TDI_QUERY_DIRECT_SEND_HANDLER _TDI_CONTROL_CODE(0x80, METHOD_NEITHER)
  61. #define IOCTL_TDI_QUERY_DIRECT_SENDDG_HANDLER _TDI_CONTROL_CODE(0x81, METHOD_NEITHER)
  62. /* TdiAssociateAddress */
  63. typedef struct _TDI_REQUEST_KERNEL_ASSOCIATE {
  64. HANDLE AddressHandle;
  65. } TDI_REQUEST_KERNEL_ASSOCIATE, *PTDI_REQUEST_KERNEL_ASSOCIATE;
  66. /* TdiDisassociateAddress */
  67. typedef TDI_REQUEST_KERNEL TDI_REQUEST_KERNEL_DISASSOCIATE,
  68. *PTDI_REQUEST_KERNEL_DISASSOCIATE;
  69. /* TdiAccept */
  70. typedef struct _TDI_REQUEST_KERNEL_ACCEPT {
  71. PTDI_CONNECTION_INFORMATION RequestConnectionInformation;
  72. PTDI_CONNECTION_INFORMATION ReturnConnectionInformation;
  73. } TDI_REQUEST_KERNEL_ACCEPT, *PTDI_REQUEST_KERNEL_ACCEPT;
  74. /* TdiConnect */
  75. typedef TDI_REQUEST_KERNEL TDI_REQUEST_KERNEL_CONNECT,
  76. *PTDI_REQUEST_KERNEL_CONNECT;
  77. /* TdiDisconnect */
  78. typedef TDI_REQUEST_KERNEL TDI_REQUEST_KERNEL_DISCONNECT,
  79. *PTDI_REQUEST_KERNEL_DISCONNECT;
  80. /* TdiListen */
  81. typedef TDI_REQUEST_KERNEL TDI_REQUEST_KERNEL_LISTEN,
  82. *PTDI_REQUEST_KERNEL_LISTEN;
  83. /* TdiReceive */
  84. typedef struct _TDI_REQUEST_KERNEL_RECEIVE {
  85. ULONG ReceiveLength;
  86. ULONG ReceiveFlags;
  87. } TDI_REQUEST_KERNEL_RECEIVE, *PTDI_REQUEST_KERNEL_RECEIVE;
  88. /* TdiReceiveDatagram */
  89. typedef struct _TDI_REQUEST_KERNEL_RECEIVEDG {
  90. ULONG ReceiveLength;
  91. PTDI_CONNECTION_INFORMATION ReceiveDatagramInformation;
  92. PTDI_CONNECTION_INFORMATION ReturnDatagramInformation;
  93. ULONG ReceiveFlags;
  94. } TDI_REQUEST_KERNEL_RECEIVEDG, *PTDI_REQUEST_KERNEL_RECEIVEDG;
  95. /* TdiSend */
  96. typedef struct _TDI_REQUEST_KERNEL_SEND {
  97. ULONG SendLength;
  98. ULONG SendFlags;
  99. } TDI_REQUEST_KERNEL_SEND, *PTDI_REQUEST_KERNEL_SEND;
  100. /* TdiSendDatagram */
  101. typedef struct _TDI_REQUEST_KERNEL_SENDDG {
  102. ULONG SendLength;
  103. PTDI_CONNECTION_INFORMATION SendDatagramInformation;
  104. } TDI_REQUEST_KERNEL_SENDDG, *PTDI_REQUEST_KERNEL_SENDDG;
  105. /* TdiSetEventHandler */
  106. typedef struct _TDI_REQUEST_KERNEL_SET_EVENT {
  107. LONG EventType;
  108. PVOID EventHandler;
  109. PVOID EventContext;
  110. } TDI_REQUEST_KERNEL_SET_EVENT, *PTDI_REQUEST_KERNEL_SET_EVENT;
  111. /* TdiQueryInformation */
  112. typedef struct _TDI_REQUEST_KERNEL_QUERY_INFO {
  113. LONG QueryType;
  114. PTDI_CONNECTION_INFORMATION RequestConnectionInformation;
  115. } TDI_REQUEST_KERNEL_QUERY_INFORMATION, *PTDI_REQUEST_KERNEL_QUERY_INFORMATION;
  116. /* TdiSetInformation */
  117. typedef struct _TDI_REQUEST_KERNEL_SET_INFO {
  118. LONG SetType;
  119. PTDI_CONNECTION_INFORMATION RequestConnectionInformation;
  120. } TDI_REQUEST_KERNEL_SET_INFORMATION, *PTDI_REQUEST_KERNEL_SET_INFORMATION;
  121. /* Event types */
  122. #define TDI_EVENT_CONNECT 0
  123. #define TDI_EVENT_DISCONNECT 1
  124. #define TDI_EVENT_ERROR 2
  125. #define TDI_EVENT_RECEIVE 3
  126. #define TDI_EVENT_RECEIVE_DATAGRAM 4
  127. #define TDI_EVENT_RECEIVE_EXPEDITED 5
  128. #define TDI_EVENT_SEND_POSSIBLE 6
  129. #define TDI_EVENT_CHAINED_RECEIVE 7
  130. #define TDI_EVENT_CHAINED_RECEIVE_DATAGRAM 8
  131. #define TDI_EVENT_CHAINED_RECEIVE_EXPEDITED 9
  132. #define TDI_EVENT_ERROR_EX 10
  133. typedef NTSTATUS
  134. (NTAPI *PTDI_IND_CONNECT)(
  135. IN PVOID TdiEventContext,
  136. IN LONG RemoteAddressLength,
  137. IN PVOID RemoteAddress,
  138. IN LONG UserDataLength,
  139. IN PVOID UserData,
  140. IN LONG OptionsLength,
  141. IN PVOID Options,
  142. OUT CONNECTION_CONTEXT *ConnectionContext,
  143. OUT PIRP *AcceptIrp);
  144. TDIKRNLAPI
  145. NTSTATUS
  146. NTAPI
  147. TdiDefaultConnectHandler(
  148. IN PVOID TdiEventContext,
  149. IN LONG RemoteAddressLength,
  150. IN PVOID RemoteAddress,
  151. IN LONG UserDataLength,
  152. IN PVOID UserData,
  153. IN LONG OptionsLength,
  154. IN PVOID Options,
  155. OUT CONNECTION_CONTEXT *ConnectionContext,
  156. OUT PIRP *AcceptIrp);
  157. typedef NTSTATUS
  158. (NTAPI *PTDI_IND_DISCONNECT)(
  159. IN PVOID TdiEventContext,
  160. IN CONNECTION_CONTEXT ConnectionContext,
  161. IN LONG DisconnectDataLength,
  162. IN PVOID DisconnectData,
  163. IN LONG DisconnectInformationLength,
  164. IN PVOID DisconnectInformation,
  165. IN ULONG DisconnectFlags);
  166. TDIKRNLAPI
  167. NTSTATUS
  168. NTAPI
  169. TdiDefaultDisconnectHandler(
  170. IN PVOID TdiEventContext,
  171. IN CONNECTION_CONTEXT ConnectionContext,
  172. IN LONG DisconnectDataLength,
  173. IN PVOID DisconnectData,
  174. IN LONG DisconnectInformationLength,
  175. IN PVOID DisconnectInformation,
  176. IN ULONG DisconnectFlags);
  177. typedef NTSTATUS
  178. (NTAPI *PTDI_IND_ERROR)(
  179. IN PVOID TdiEventContext,
  180. IN NTSTATUS Status);
  181. typedef NTSTATUS
  182. (NTAPI *PTDI_IND_ERROR_EX)(
  183. IN PVOID TdiEventContext,
  184. IN NTSTATUS Status,
  185. IN PVOID Buffer);
  186. TDIKRNLAPI
  187. NTSTATUS
  188. NTAPI
  189. TdiDefaultErrorHandler(
  190. IN PVOID TdiEventContext,
  191. IN NTSTATUS Status);
  192. typedef NTSTATUS
  193. (NTAPI *PTDI_IND_RECEIVE)(
  194. IN PVOID TdiEventContext,
  195. IN CONNECTION_CONTEXT ConnectionContext,
  196. IN ULONG ReceiveFlags,
  197. IN ULONG BytesIndicated,
  198. IN ULONG BytesAvailable,
  199. OUT ULONG *BytesTaken,
  200. IN PVOID Tsdu,
  201. OUT PIRP *IoRequestPacket);
  202. TDIKRNLAPI
  203. NTSTATUS
  204. NTAPI
  205. TdiDefaultReceiveHandler(
  206. IN PVOID TdiEventContext,
  207. IN CONNECTION_CONTEXT ConnectionContext,
  208. IN ULONG ReceiveFlags,
  209. IN ULONG BytesIndicated,
  210. IN ULONG BytesAvailable,
  211. OUT ULONG *BytesTaken,
  212. IN PVOID Tsdu,
  213. OUT PIRP *IoRequestPacket);
  214. typedef NTSTATUS
  215. (NTAPI *PTDI_IND_RECEIVE_DATAGRAM)(
  216. IN PVOID TdiEventContext,
  217. IN LONG SourceAddressLength,
  218. IN PVOID SourceAddress,
  219. IN LONG OptionsLength,
  220. IN PVOID Options,
  221. IN ULONG ReceiveDatagramFlags,
  222. IN ULONG BytesIndicated,
  223. IN ULONG BytesAvailable,
  224. OUT ULONG *BytesTaken,
  225. IN PVOID Tsdu,
  226. OUT PIRP *IoRequestPacket);
  227. TDIKRNLAPI
  228. NTSTATUS NTAPI
  229. TdiDefaultRcvDatagramHandler(
  230. IN PVOID TdiEventContext,
  231. IN LONG SourceAddressLength,
  232. IN PVOID SourceAddress,
  233. IN LONG OptionsLength,
  234. IN PVOID Options,
  235. IN ULONG ReceiveDatagramFlags,
  236. IN ULONG BytesIndicated,
  237. IN ULONG BytesAvailable,
  238. OUT ULONG *BytesTaken,
  239. IN PVOID Tsdu,
  240. OUT PIRP *IoRequestPacket);
  241. typedef NTSTATUS
  242. (NTAPI *PTDI_IND_RECEIVE_EXPEDITED)(
  243. IN PVOID TdiEventContext,
  244. IN CONNECTION_CONTEXT ConnectionContext,
  245. IN ULONG ReceiveFlags,
  246. IN ULONG BytesIndicated,
  247. IN ULONG BytesAvailable,
  248. OUT ULONG *BytesTaken,
  249. IN PVOID Tsdu,
  250. OUT PIRP *IoRequestPacket);
  251. TDIKRNLAPI
  252. NTSTATUS
  253. NTAPI
  254. TdiDefaultRcvExpeditedHandler(
  255. IN PVOID TdiEventContext,
  256. IN CONNECTION_CONTEXT ConnectionContext,
  257. IN ULONG ReceiveFlags,
  258. IN ULONG BytesIndicated,
  259. IN ULONG BytesAvailable,
  260. OUT ULONG *BytesTaken,
  261. IN PVOID Tsdu,
  262. OUT PIRP *IoRequestPacket);
  263. typedef NTSTATUS
  264. (NTAPI *PTDI_IND_CHAINED_RECEIVE)(
  265. IN PVOID TdiEventContext,
  266. IN CONNECTION_CONTEXT ConnectionContext,
  267. IN ULONG ReceiveFlags,
  268. IN ULONG ReceiveLength,
  269. IN ULONG StartingOffset,
  270. IN PMDL Tsdu,
  271. IN PVOID TsduDescriptor);
  272. TDIKRNLAPI
  273. NTSTATUS
  274. NTAPI
  275. TdiDefaultChainedReceiveHandler(
  276. IN PVOID TdiEventContext,
  277. IN CONNECTION_CONTEXT ConnectionContext,
  278. IN ULONG ReceiveFlags,
  279. IN ULONG ReceiveLength,
  280. IN ULONG StartingOffset,
  281. IN PMDL Tsdu,
  282. IN PVOID TsduDescriptor);
  283. typedef NTSTATUS
  284. (NTAPI *PTDI_IND_CHAINED_RECEIVE_DATAGRAM)(
  285. IN PVOID TdiEventContext,
  286. IN LONG SourceAddressLength,
  287. IN PVOID SourceAddress,
  288. IN LONG OptionsLength,
  289. IN PVOID Options,
  290. IN ULONG ReceiveDatagramFlags,
  291. IN ULONG ReceiveDatagramLength,
  292. IN ULONG StartingOffset,
  293. IN PMDL Tsdu,
  294. IN PVOID TsduDescriptor);
  295. TDIKRNLAPI
  296. NTSTATUS
  297. NTAPI
  298. TdiDefaultChainedRcvDatagramHandler(
  299. IN PVOID TdiEventContext,
  300. IN LONG SourceAddressLength,
  301. IN PVOID SourceAddress,
  302. IN LONG OptionsLength,
  303. IN PVOID Options,
  304. IN ULONG ReceiveDatagramFlags,
  305. IN ULONG ReceiveDatagramLength,
  306. IN ULONG StartingOffset,
  307. IN PMDL Tsdu,
  308. IN PVOID TsduDescriptor);
  309. typedef NTSTATUS
  310. (NTAPI *PTDI_IND_CHAINED_RECEIVE_EXPEDITED)(
  311. IN PVOID TdiEventContext,
  312. IN CONNECTION_CONTEXT ConnectionContext,
  313. IN ULONG ReceiveFlags,
  314. IN ULONG ReceiveLength,
  315. IN ULONG StartingOffset,
  316. IN PMDL Tsdu,
  317. IN PVOID TsduDescriptor);
  318. TDIKRNLAPI
  319. NTSTATUS
  320. NTAPI
  321. TdiDefaultChainedRcvExpeditedHandler(
  322. IN PVOID TdiEventContext,
  323. IN CONNECTION_CONTEXT ConnectionContext,
  324. IN ULONG ReceiveFlags,
  325. IN ULONG ReceiveLength,
  326. IN ULONG StartingOffset,
  327. IN PMDL Tsdu,
  328. IN PVOID TsduDescriptor);
  329. typedef NTSTATUS
  330. (NTAPI *PTDI_IND_SEND_POSSIBLE)(
  331. IN PVOID TdiEventContext,
  332. IN PVOID ConnectionContext,
  333. IN ULONG BytesAvailable);
  334. TDIKRNLAPI
  335. NTSTATUS
  336. NTAPI
  337. TdiDefaultSendPossibleHandler(
  338. IN PVOID TdiEventContext,
  339. IN PVOID ConnectionContext,
  340. IN ULONG BytesAvailable);
  341. /* Macros and functions to build IRPs */
  342. #define TdiBuildBaseIrp( \
  343. bIrp, bDevObj, bFileObj, bCompRoutine, bContxt, bIrpSp, bMinor) \
  344. { \
  345. bIrpSp->MajorFunction = IRP_MJ_INTERNAL_DEVICE_CONTROL; \
  346. bIrpSp->MinorFunction = (bMinor); \
  347. bIrpSp->DeviceObject = (bDevObj); \
  348. bIrpSp->FileObject = (bFileObj); \
  349. if (bCompRoutine) \
  350. { \
  351. IoSetCompletionRoutine(bIrp, bCompRoutine, bContxt, TRUE, TRUE, TRUE);\
  352. } \
  353. else \
  354. IoSetCompletionRoutine(bIrp, NULL, NULL, FALSE, FALSE, FALSE); \
  355. }
  356. /*
  357. * VOID
  358. * TdiBuildAccept(
  359. * IN PIRP Irp,
  360. * IN PDEVICE_OBJECT DevObj,
  361. * IN PFILE_OBJECT FileObj,
  362. * IN PVOID CompRoutine,
  363. * IN PVOID Contxt,
  364. * IN PTDI_CONNECTION_INFORMATION RequestConnectionInfo,
  365. * OUT PTDI_CONNECTION_INFORMATION ReturnConnectionInfo);
  366. */
  367. #define TdiBuildAccept( \
  368. Irp, DevObj, FileObj, CompRoutine, Contxt, \
  369. RequestConnectionInfo, ReturnConnectionInfo) \
  370. { \
  371. PTDI_REQUEST_KERNEL_ACCEPT _Request; \
  372. PIO_STACK_LOCATION _IrpSp; \
  373. \
  374. _IrpSp = IoGetNextIrpStackLocation(Irp); \
  375. \
  376. TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine, \
  377. Contxt, _IrpSp, TDI_ACCEPT); \
  378. \
  379. _Request = (PTDI_REQUEST_KERNEL_ACCEPT)&_IrpSp->Parameters; \
  380. _Request->RequestConnectionInformation = (RequestConnectionInfo); \
  381. _Request->ReturnConnectionInformation = (ReturnConnectionInfo); \
  382. }
  383. /*
  384. * VOID
  385. * TdiBuildAction(
  386. * IN PIRP Irp,
  387. * IN PDEVICE_OBJECT DevObj,
  388. * IN PFILE_OBJECT FileObj,
  389. * IN PVOID CompRoutine,
  390. * IN PVOID Contxt,
  391. * IN PMDL MdlAddr);
  392. */
  393. #define TdiBuildAction( \
  394. Irp, DevObj, FileObj, CompRoutine, Contxt, MdlAddr) \
  395. { \
  396. PIO_STACK_LOCATION _IrpSp; \
  397. \
  398. _IrpSp = IoGetNextIrpStackLocation(Irp); \
  399. \
  400. TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine, \
  401. Contxt, _IrpSp, TDI_ACTION); \
  402. \
  403. (Irp)->MdlAddress = (MdlAddr); \
  404. }
  405. /*
  406. * VOID
  407. * TdiBuildAssociateAddress(
  408. * IN PIRP Irp,
  409. * IN PDEVICE_OBJECT DevObj,
  410. * IN PFILE_OBJECT FileObj,
  411. * IN PVOID CompRoutine,
  412. * IN PVOID Contxt,
  413. * IN HANDLE AddrHandle);
  414. */
  415. #define TdiBuildAssociateAddress( \
  416. Irp, DevObj, FileObj, CompRoutine, Contxt, AddrHandle) \
  417. { \
  418. PTDI_REQUEST_KERNEL_ASSOCIATE _Request; \
  419. PIO_STACK_LOCATION _IrpSp; \
  420. \
  421. _IrpSp = IoGetNextIrpStackLocation(Irp); \
  422. \
  423. TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine, \
  424. Contxt, _IrpSp, TDI_ASSOCIATE_ADDRESS); \
  425. \
  426. _Request = (PTDI_REQUEST_KERNEL_ASSOCIATE)&_IrpSp->Parameters; \
  427. _Request->AddressHandle = (HANDLE)(AddrHandle); \
  428. }
  429. /*
  430. * VOID
  431. * TdiBuildConnect(
  432. * IN PIRP Irp,
  433. * IN PDEVICE_OBJECT DevObj,
  434. * IN PFILE_OBJECT FileObj,
  435. * IN PVOID CompRoutine,
  436. * IN PVOID Contxt,
  437. * IN PLARGE_INTEGER Time,
  438. * IN PTDI_CONNECTION_INFORMATION RequestConnectionInfo,
  439. * OUT PTDI_CONNECTION_INFORMATION ReturnConnectionInfo);
  440. */
  441. #define TdiBuildConnect( \
  442. Irp, DevObj, FileObj, CompRoutine, Contxt, \
  443. Time, RequestConnectionInfo, ReturnConnectionInfo) \
  444. { \
  445. PTDI_REQUEST_KERNEL _Request; \
  446. PIO_STACK_LOCATION _IrpSp; \
  447. \
  448. _IrpSp = IoGetNextIrpStackLocation(Irp); \
  449. \
  450. TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine, \
  451. Contxt, _IrpSp, TDI_CONNECT); \
  452. \
  453. _Request = (PTDI_REQUEST_KERNEL)&_IrpSp->Parameters; \
  454. _Request->RequestConnectionInformation = (RequestConnectionInfo); \
  455. _Request->ReturnConnectionInformation = (ReturnConnectionInfo); \
  456. _Request->RequestSpecific = (PVOID)(Time); \
  457. }
  458. /*
  459. * VOID
  460. * TdiBuildDisassociateAddress(
  461. * IN PIRP Irp,
  462. * IN PDEVICE_OBJECT DevObj,
  463. * IN PFILE_OBJECT FileObj,
  464. * IN PVOID CompRoutine,
  465. * IN PVOID Contxt);
  466. */
  467. #define TdiBuildDisassociateAddress( \
  468. Irp, DevObj, FileObj, CompRoutine, Contxt) \
  469. { \
  470. PIO_STACK_LOCATION _IrpSp; \
  471. \
  472. _IrpSp = IoGetNextIrpStackLocation(Irp); \
  473. \
  474. TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine, \
  475. Contxt, _IrpSp, TDI_DISASSOCIATE_ADDRESS); \
  476. }
  477. /*
  478. * VOID
  479. * TdiBuildDisconnect(
  480. * IN PIRP Irp,
  481. * IN PDEVICE_OBJECT DevObj,
  482. * IN PFILE_OBJECT FileObj,
  483. * IN PVOID CompRoutine,
  484. * IN PVOID Contxt,
  485. * IN PLARGE_INTEGER Time,
  486. * IN PULONG Flags,
  487. * IN PTDI_CONNECTION_INFORMATION RequestConnectionInfo,
  488. * OUT PTDI_CONNECTION_INFORMATION ReturnConnectionInfo);
  489. */
  490. #define TdiBuildDisconnect( \
  491. Irp, DevObj, FileObj, CompRoutine, Contxt, Time, \
  492. Flags, RequestConnectionInfo, ReturnConnectionInfo) \
  493. { \
  494. PTDI_REQUEST_KERNEL _Request; \
  495. PIO_STACK_LOCATION _IrpSp; \
  496. \
  497. _IrpSp = IoGetNextIrpStackLocation(Irp); \
  498. \
  499. TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine, \
  500. Contxt, _IrpSp, TDI_DISCONNECT); \
  501. \
  502. _Request = (PTDI_REQUEST_KERNEL)&_IrpSp->Parameters; \
  503. _Request->RequestConnectionInformation = (RequestConnectionInfo); \
  504. _Request->ReturnConnectionInformation = (ReturnConnectionInfo); \
  505. _Request->RequestSpecific = (PVOID)(Time); \
  506. _Request->RequestFlags = (Flags); \
  507. }
  508. /*
  509. * PIRP
  510. * TdiBuildInternalDeviceControlIrp(
  511. * IN CCHAR IrpSubFunction,
  512. * IN PDEVICE_OBJECT DeviceObject,
  513. * IN PFILE_OBJECT FileObject,
  514. * IN PKEVENT Event,
  515. * IN PIO_STATUS_BLOCK IoStatusBlock);
  516. */
  517. #define TdiBuildInternalDeviceControlIrp( \
  518. IrpSubFunction, DeviceObject, \
  519. FileObject, Event, IoStatusBlock) \
  520. IoBuildDeviceIoControlRequest( \
  521. IrpSubFunction, DeviceObject, \
  522. NULL, 0, NULL, 0, \
  523. TRUE, Event, IoStatusBlock)
  524. /*
  525. * VOID
  526. * TdiBuildListen(
  527. * IN PIRP Irp,
  528. * IN PDEVICE_OBJECT DevObj,
  529. * IN PFILE_OBJECT FileObj,
  530. * IN PVOID CompRoutine,
  531. * IN PVOID Contxt,
  532. * IN ULONG Flags,
  533. * IN PTDI_CONNECTION_INFORMATION RequestConnectionInfo,
  534. * OUT PTDI_CONNECTION_INFORMATION ReturnConnectionInfo);
  535. */
  536. #define TdiBuildListen( \
  537. Irp, DevObj, FileObj, CompRoutine, Contxt, \
  538. Flags, RequestConnectionInfo, ReturnConnectionInfo) \
  539. { \
  540. PTDI_REQUEST_KERNEL _Request; \
  541. PIO_STACK_LOCATION _IrpSp; \
  542. \
  543. _IrpSp = IoGetNextIrpStackLocation(Irp); \
  544. \
  545. TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine, \
  546. Contxt, _IrpSp, TDI_LISTEN); \
  547. \
  548. _Request = (PTDI_REQUEST_KERNEL)&_IrpSp->Parameters; \
  549. _Request->RequestConnectionInformation = (RequestConnectionInfo); \
  550. _Request->ReturnConnectionInformation = (ReturnConnectionInfo); \
  551. _Request->RequestFlags = (Flags); \
  552. }
  553. TDIKRNLAPI
  554. VOID
  555. NTAPI
  556. TdiBuildNetbiosAddress(
  557. IN PUCHAR NetbiosName,
  558. IN BOOLEAN IsGroupName,
  559. IN OUT PTA_NETBIOS_ADDRESS NetworkName);
  560. TDIKRNLAPI
  561. NTSTATUS
  562. NTAPI
  563. TdiBuildNetbiosAddressEa(
  564. IN PUCHAR Buffer,
  565. IN BOOLEAN IsGroupName,
  566. IN PUCHAR NetbiosName);
  567. /*
  568. * VOID
  569. * TdiBuildQueryInformation(
  570. * IN PIRP Irp,
  571. * IN PDEVICE_OBJECT DevObj,
  572. * IN PFILE_OBJECT FileObj,
  573. * IN PVOID CompRoutine,
  574. * IN PVOID Contxt,
  575. * IN UINT QType,
  576. * IN PMDL MdlAddr);
  577. */
  578. #define TdiBuildQueryInformation( \
  579. Irp, DevObj, FileObj, CompRoutine, Contxt, QType, MdlAddr) \
  580. { \
  581. PTDI_REQUEST_KERNEL_QUERY_INFORMATION _Request; \
  582. PIO_STACK_LOCATION _IrpSp; \
  583. \
  584. _IrpSp = IoGetNextIrpStackLocation(Irp); \
  585. \
  586. TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine, \
  587. Contxt, _IrpSp, TDI_QUERY_INFORMATION); \
  588. \
  589. _Request = (PTDI_REQUEST_KERNEL_QUERY_INFORMATION)&_IrpSp->Parameters; \
  590. _Request->RequestConnectionInformation = NULL; \
  591. _Request->QueryType = (ULONG)(QType); \
  592. (Irp)->MdlAddress = (MdlAddr); \
  593. }
  594. /*
  595. * VOID
  596. * TdiBuildReceive(
  597. * IN PIRP Irp,
  598. * IN PDEVICE_OBJECT DevObj,
  599. * IN PFILE_OBJECT FileObj,
  600. * IN PVOID CompRoutine,
  601. * IN PVOID Contxt,
  602. * IN PMDL MdlAddr,
  603. * IN ULONG InFlags,
  604. * IN ULONG ReceiveLen);
  605. */
  606. #define TdiBuildReceive( \
  607. Irp, DevObj, FileObj, CompRoutine, Contxt, \
  608. MdlAddr, InFlags, ReceiveLen) \
  609. { \
  610. PTDI_REQUEST_KERNEL_RECEIVE _Request; \
  611. PIO_STACK_LOCATION _IrpSp; \
  612. \
  613. _IrpSp = IoGetNextIrpStackLocation(Irp); \
  614. \
  615. TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine, \
  616. Contxt, _IrpSp, TDI_RECEIVE); \
  617. \
  618. _Request = (PTDI_REQUEST_KERNEL_RECEIVE)&_IrpSp->Parameters; \
  619. _Request->ReceiveFlags = (InFlags); \
  620. _Request->ReceiveLength = (ReceiveLen); \
  621. (Irp)->MdlAddress = (MdlAddr); \
  622. }
  623. /*
  624. * VOID
  625. * TdiBuildReceiveDatagram(
  626. * IN PIRP Irp,
  627. * IN PDEVICE_OBJECT DevObj,
  628. * IN PFILE_OBJECT FileObj,
  629. * IN PVOID CompRoutine,
  630. * IN PVOID Contxt,
  631. * IN PMDL MdlAddr,
  632. * IN ULONG ReceiveLen,
  633. * IN PTDI_CONNECTION_INFORMATION ReceiveDatagramInfo,
  634. * OUT PTDI_CONNECTION_INFORMATION ReturnInfo,
  635. * ULONG InFlags);
  636. */
  637. #define TdiBuildReceiveDatagram( \
  638. Irp, DevObj, FileObj, CompRoutine, Contxt, MdlAddr, \
  639. ReceiveLen, ReceiveDatagramInfo, ReturnInfo, InFlags) \
  640. { \
  641. PTDI_REQUEST_KERNEL_RECEIVEDG _Request; \
  642. PIO_STACK_LOCATION _IrpSp; \
  643. \
  644. _IrpSp = IoGetNextIrpStackLocation(Irp); \
  645. \
  646. TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine, \
  647. Contxt, _IrpSp, TDI_RECEIVE_DATAGRAM); \
  648. \
  649. _Request = (PTDI_REQUEST_KERNEL_RECEIVEDG)&_IrpSp->Parameters; \
  650. _Request->ReceiveDatagramInformation = (ReceiveDatagramInfo); \
  651. _Request->ReturnDatagramInformation = (ReturnInfo); \
  652. _Request->ReceiveLength = (ReceiveLen); \
  653. _Request->ReceiveFlags = (InFlags); \
  654. (Irp)->MdlAddress = (MdlAddr); \
  655. }
  656. /*
  657. * VOID
  658. * TdiBuildSend(
  659. * IN PIRP Irp,
  660. * IN PDEVICE_OBJECT DevObj,
  661. * IN PFILE_OBJECT FileObj,
  662. * IN PVOID CompRoutine,
  663. * IN PVOID Contxt,
  664. * IN PMDL MdlAddr,
  665. * IN ULONG InFlags,
  666. * IN ULONG SendLen);
  667. */
  668. #define TdiBuildSend( \
  669. Irp, DevObj, FileObj, CompRoutine, Contxt, \
  670. MdlAddr, InFlags, SendLen) \
  671. { \
  672. PTDI_REQUEST_KERNEL_SEND _Request; \
  673. PIO_STACK_LOCATION _IrpSp; \
  674. \
  675. _IrpSp = IoGetNextIrpStackLocation(Irp); \
  676. \
  677. TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine, \
  678. Contxt, _IrpSp, TDI_SEND); \
  679. \
  680. _Request = (PTDI_REQUEST_KERNEL_SEND)&_IrpSp->Parameters; \
  681. _Request->SendFlags = (InFlags); \
  682. _Request->SendLength = (SendLen); \
  683. (Irp)->MdlAddress = (MdlAddr); \
  684. }
  685. /*
  686. * VOID
  687. * TdiBuildSendDatagram(
  688. * IN PIRP Irp,
  689. * IN PDEVICE_OBJECT DevObj,
  690. * IN PFILE_OBJECT FileObj,
  691. * IN PVOID CompRoutine,
  692. * IN PVOID Contxt,
  693. * IN PMDL MdlAddr,
  694. * IN ULONG SendLen,
  695. * IN PTDI_CONNECTION_INFORMATION SendDatagramInfo);
  696. */
  697. #define TdiBuildSendDatagram( \
  698. Irp, DevObj, FileObj, CompRoutine, Contxt, \
  699. MdlAddr, SendLen, SendDatagramInfo) \
  700. { \
  701. PTDI_REQUEST_KERNEL_SENDDG _Request; \
  702. PIO_STACK_LOCATION _IrpSp; \
  703. \
  704. _IrpSp = IoGetNextIrpStackLocation(Irp); \
  705. \
  706. TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine, \
  707. Contxt, _IrpSp, TDI_SEND_DATAGRAM); \
  708. \
  709. _Request = (PTDI_REQUEST_KERNEL_SENDDG)&_IrpSp->Parameters; \
  710. _Request->SendDatagramInformation = (SendDatagramInfo); \
  711. _Request->SendLength = (SendLen); \
  712. (Irp)->MdlAddress = (MdlAddr); \
  713. }
  714. /*
  715. * VOID
  716. * TdiBuildSetEventHandler(
  717. * IN PIRP Irp,
  718. * IN PDEVICE_OBJECT DevObj,
  719. * IN PFILE_OBJECT FileObj,
  720. * IN PVOID CompRoutine,
  721. * IN PVOID Contxt,
  722. * IN INT InEventType,
  723. * IN PVOID InEventHandler,
  724. * IN PVOID InEventContext);
  725. */
  726. #define TdiBuildSetEventHandler( \
  727. Irp, DevObj, FileObj, CompRoutine, Contxt, \
  728. InEventType, InEventHandler, InEventContext) \
  729. { \
  730. PTDI_REQUEST_KERNEL_SET_EVENT _Request; \
  731. PIO_STACK_LOCATION _IrpSp; \
  732. \
  733. _IrpSp = IoGetNextIrpStackLocation(Irp); \
  734. \
  735. TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine, \
  736. Contxt, _IrpSp, TDI_SET_EVENT_HANDLER); \
  737. \
  738. _Request = (PTDI_REQUEST_KERNEL_SET_EVENT)&_IrpSp->Parameters; \
  739. _Request->EventType = (InEventType); \
  740. _Request->EventHandler = (PVOID)(InEventHandler); \
  741. _Request->EventContext = (PVOID)(InEventContext); \
  742. }
  743. /*
  744. * VOID
  745. * TdiBuildSetInformation(
  746. * IN PIRP Irp,
  747. * IN PDEVICE_OBJECT DevObj,
  748. * IN PFILE_OBJECT FileObj,
  749. * IN PVOID CompRoutine,
  750. * IN PVOID Contxt,
  751. * IN UINT SType,
  752. * IN PMDL MdlAddr);
  753. */
  754. #define TdiBuildSetInformation( \
  755. Irp, DevObj, FileObj, CompRoutine, Contxt, SType, MdlAddr) \
  756. { \
  757. PTDI_REQUEST_KERNEL_SET_INFORMATION _Request; \
  758. PIO_STACK_LOCATION _IrpSp; \
  759. \
  760. _IrpSp = IoGetNextIrpStackLocation(Irp); \
  761. \
  762. TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine, \
  763. Contxt, _IrpSp, TDI_SET_INFORMATION); \
  764. \
  765. _Request = (PTDI_REQUEST_KERNEL_SET_INFORMATION)&_IrpSp->Parameters; \
  766. _Request->RequestConnectionInformation = NULL; \
  767. _Request->SetType = (ULONG)(SType); \
  768. (Irp)->MdlAddress = (MdlAddr); \
  769. }
  770. /* TDI20_CLIENT_INTERFACE_INFO.TdiVersion constants */
  771. #define TDI_CURRENT_MAJOR_VERSION 2
  772. #define TDI_CURRENT_MINOR_VERSION 0
  773. #define TDI_CURRENT_VERSION ((TDI_CURRENT_MINOR_VERSION) << 8 \
  774. | (TDI_CURRENT_MAJOR_VERSION))
  775. #define TDI_VERSION_ONE 0x0001
  776. typedef enum _TDI_PNP_OPCODE {
  777. TDI_PNP_OP_MIN,
  778. TDI_PNP_OP_ADD,
  779. TDI_PNP_OP_DEL,
  780. TDI_PNP_OP_UPDATE,
  781. TDI_PNP_OP_PROVIDERREADY,
  782. TDI_PNP_OP_NETREADY,
  783. TDI_PNP_OP_ADD_IGNORE_BINDING,
  784. TDI_PNP_OP_DELETE_IGNORE_BINDING,
  785. TDI_PNP_OP_MAX
  786. } TDI_PNP_OPCODE;
  787. /* TDI_PNP_CONTEXT.ContextType */
  788. #define TDI_PNP_CONTEXT_TYPE_IF_NAME 0x1
  789. #define TDI_PNP_CONTEXT_TYPE_IF_ADDR 0x2
  790. #define TDI_PNP_CONTEXT_TYPE_PDO 0x3
  791. #define TDI_PNP_CONTEXT_TYPE_FIRST_OR_LAST_IF 0x4
  792. typedef struct _TDI_PNP_CONTEXT {
  793. USHORT ContextSize;
  794. USHORT ContextType;
  795. UCHAR ContextData[1];
  796. } TDI_PNP_CONTEXT, *PTDI_PNP_CONTEXT;
  797. typedef VOID
  798. (NTAPI *TDI_ADD_ADDRESS_HANDLER)(
  799. IN PTA_ADDRESS Address);
  800. typedef VOID
  801. (NTAPI *TDI_ADD_ADDRESS_HANDLER_V2)(
  802. IN PTA_ADDRESS Address,
  803. IN PUNICODE_STRING DeviceName,
  804. IN PTDI_PNP_CONTEXT Context);
  805. typedef VOID
  806. (NTAPI *TDI_BINDING_HANDLER)(
  807. IN TDI_PNP_OPCODE PnPOpcode,
  808. IN PUNICODE_STRING DeviceName,
  809. IN PWSTR MultiSZBindList);
  810. typedef VOID
  811. (NTAPI *TDI_BIND_HANDLER)(
  812. IN PUNICODE_STRING DeviceName);
  813. typedef VOID
  814. (NTAPI *TDI_DEL_ADDRESS_HANDLER)(
  815. IN PTA_ADDRESS Address);
  816. typedef VOID
  817. (NTAPI *TDI_DEL_ADDRESS_HANDLER_V2)(
  818. IN PTA_ADDRESS Address,
  819. IN PUNICODE_STRING DeviceName,
  820. IN PTDI_PNP_CONTEXT Context);
  821. typedef NTSTATUS
  822. (NTAPI *TDI_PNP_POWER_HANDLER)(
  823. IN PUNICODE_STRING DeviceName,
  824. IN PNET_PNP_EVENT PowerEvent,
  825. IN PTDI_PNP_CONTEXT Context1,
  826. IN PTDI_PNP_CONTEXT Context2);
  827. typedef VOID
  828. (NTAPI *TDI_UNBIND_HANDLER)(
  829. IN PUNICODE_STRING DeviceName);
  830. typedef VOID
  831. (NTAPI *ProviderPnPPowerComplete)(
  832. IN PNET_PNP_EVENT NetEvent,
  833. IN NTSTATUS ProviderStatus);
  834. typedef struct _TDI20_CLIENT_INTERFACE_INFO {
  835. _ANONYMOUS_UNION union {
  836. _ANONYMOUS_STRUCT struct {
  837. UCHAR MajorTdiVersion;
  838. UCHAR MinorTdiVersion;
  839. } DUMMYSTRUCTNAME;
  840. USHORT TdiVersion;
  841. } DUMMYUNIONNAME;
  842. USHORT Unused;
  843. PUNICODE_STRING ClientName;
  844. TDI_PNP_POWER_HANDLER PnPPowerHandler;
  845. _ANONYMOUS_UNION union {
  846. TDI_BINDING_HANDLER BindingHandler;
  847. _ANONYMOUS_STRUCT struct {
  848. TDI_BIND_HANDLER BindHandler;
  849. TDI_UNBIND_HANDLER UnBindHandler;
  850. } DUMMYSTRUCTNAME;
  851. }DUMMYUNIONNAME2;
  852. _ANONYMOUS_UNION union {
  853. _ANONYMOUS_STRUCT struct {
  854. TDI_ADD_ADDRESS_HANDLER_V2 AddAddressHandlerV2;
  855. TDI_DEL_ADDRESS_HANDLER_V2 DelAddressHandlerV2;
  856. } DUMMYSTRUCTNAME;
  857. _ANONYMOUS_STRUCT struct {
  858. TDI_ADD_ADDRESS_HANDLER AddAddressHandler;
  859. TDI_DEL_ADDRESS_HANDLER DelAddressHandler;
  860. } DUMMYSTRUCTNAME2;
  861. } DUMMYUNIONNAME3;
  862. } TDI20_CLIENT_INTERFACE_INFO, *PTDI20_CLIENT_INTERFACE_INFO;
  863. typedef TDI20_CLIENT_INTERFACE_INFO TDI_CLIENT_INTERFACE_INFO;
  864. typedef TDI_CLIENT_INTERFACE_INFO *PTDI_CLIENT_INTERFACE_INFO;
  865. /* TDI functions */
  866. /*
  867. * VOID
  868. * TdiCompleteRequest(
  869. * IN PIRP Irp,
  870. * IN NTSTATUS Status);
  871. */
  872. #define TdiCompleteRequest(Irp, Status) \
  873. { \
  874. (Irp)->IoStatus.Status = (Status); \
  875. IoCompleteRequest((Irp), IO_NETWORK_INCREMENT); \
  876. }
  877. TDIKRNLAPI
  878. NTSTATUS
  879. NTAPI
  880. TdiCopyBufferToMdl(
  881. IN PVOID SourceBuffer,
  882. IN ULONG SourceOffset,
  883. IN ULONG SourceBytesToCopy,
  884. IN PMDL DestinationMdlChain,
  885. IN ULONG DestinationOffset,
  886. IN PULONG BytesCopied);
  887. /*
  888. * VOID
  889. * TdiCopyLookaheadData(
  890. * IN PVOID Destination,
  891. * IN PVOID Source,
  892. * IN ULONG Length,
  893. * IN ULONG ReceiveFlags);
  894. */
  895. #define TdiCopyLookaheadData(Destination, Source, Length, ReceiveFlags) \
  896. RtlCopyMemory(Destination, Source, Length)
  897. TDIKRNLAPI
  898. NTSTATUS
  899. NTAPI
  900. TdiCopyMdlChainToMdlChain (
  901. IN PMDL SourceMdlChain,
  902. IN ULONG SourceOffset,
  903. IN PMDL DestinationMdlChain,
  904. IN ULONG DestinationOffset,
  905. OUT PULONG BytesCopied);
  906. TDIKRNLAPI
  907. NTSTATUS
  908. NTAPI
  909. TdiCopyMdlToBuffer(
  910. IN PMDL SourceMdlChain,
  911. IN ULONG SourceOffset,
  912. IN PVOID DestinationBuffer,
  913. IN ULONG DestinationOffset,
  914. IN ULONG DestinationBufferSize,
  915. OUT PULONG BytesCopied);
  916. TDIKRNLAPI
  917. NTSTATUS
  918. NTAPI
  919. TdiDeregisterAddressChangeHandler(
  920. IN HANDLE BindingHandle);
  921. TDIKRNLAPI
  922. NTSTATUS
  923. NTAPI
  924. TdiDeregisterDeviceObject(
  925. IN HANDLE DevRegistrationHandle);
  926. TDIKRNLAPI
  927. NTSTATUS
  928. NTAPI
  929. TdiDeregisterNetAddress(
  930. IN HANDLE AddrRegistrationHandle);
  931. TDIKRNLAPI
  932. NTSTATUS
  933. NTAPI
  934. TdiDeregisterPnPHandlers(
  935. IN HANDLE BindingHandle);
  936. TDIKRNLAPI
  937. NTSTATUS
  938. NTAPI
  939. TdiDeregisterProvider(
  940. IN HANDLE ProviderHandle);
  941. TDIKRNLAPI
  942. NTSTATUS
  943. NTAPI
  944. TdiEnumerateAddresses(
  945. IN HANDLE BindingHandle);
  946. TDIKRNLAPI
  947. VOID
  948. NTAPI
  949. TdiInitialize(
  950. VOID);
  951. TDIKRNLAPI
  952. VOID
  953. NTAPI
  954. TdiMapBuffer(
  955. IN PMDL MdlChain);
  956. TDIKRNLAPI
  957. NTSTATUS
  958. NTAPI
  959. TdiMapUserRequest(
  960. IN PDEVICE_OBJECT DeviceObject,
  961. IN PIRP Irp,
  962. IN PIO_STACK_LOCATION IrpSp);
  963. TDIKRNLAPI
  964. BOOLEAN
  965. NTAPI
  966. TdiMatchPdoWithChainedReceiveContext(
  967. IN PVOID TsduDescriptor,
  968. IN PVOID PDO);
  969. TDIKRNLAPI
  970. VOID
  971. NTAPI
  972. TdiPnPPowerComplete(
  973. IN HANDLE BindingHandle,
  974. IN PNET_PNP_EVENT PowerEvent,
  975. IN NTSTATUS Status);
  976. TDIKRNLAPI
  977. NTSTATUS
  978. NTAPI
  979. TdiPnPPowerRequest(
  980. IN PUNICODE_STRING DeviceName,
  981. IN PNET_PNP_EVENT PowerEvent,
  982. IN PTDI_PNP_CONTEXT Context1,
  983. IN PTDI_PNP_CONTEXT Context2,
  984. IN ProviderPnPPowerComplete ProtocolCompletionHandler);
  985. TDIKRNLAPI
  986. NTSTATUS
  987. NTAPI
  988. TdiProviderReady(
  989. IN HANDLE ProviderHandle);
  990. TDIKRNLAPI
  991. NTSTATUS
  992. NTAPI
  993. TdiRegisterAddressChangeHandler(
  994. IN TDI_ADD_ADDRESS_HANDLER AddHandler,
  995. IN TDI_DEL_ADDRESS_HANDLER DeleteHandler,
  996. OUT HANDLE *BindingHandle);
  997. TDIKRNLAPI
  998. NTSTATUS
  999. NTAPI
  1000. TdiRegisterDeviceObject(
  1001. IN PUNICODE_STRING DeviceName,
  1002. OUT HANDLE *DevRegistrationHandle);
  1003. TDIKRNLAPI
  1004. NTSTATUS
  1005. NTAPI
  1006. TdiRegisterNetAddress(
  1007. IN PTA_ADDRESS Address,
  1008. IN PUNICODE_STRING DeviceName,
  1009. IN PTDI_PNP_CONTEXT Context,
  1010. OUT HANDLE *AddrRegistrationHandle);
  1011. TDIKRNLAPI
  1012. NTSTATUS
  1013. NTAPI
  1014. TdiRegisterNotificationHandler(
  1015. IN TDI_BIND_HANDLER BindHandler,
  1016. IN TDI_UNBIND_HANDLER UnbindHandler,
  1017. OUT HANDLE *BindingHandle);
  1018. TDIKRNLAPI
  1019. NTSTATUS
  1020. NTAPI
  1021. TdiRegisterPnPHandlers(
  1022. IN PTDI_CLIENT_INTERFACE_INFO ClientInterfaceInfo,
  1023. IN ULONG InterfaceInfoSize,
  1024. OUT HANDLE *BindingHandle);
  1025. TDIKRNLAPI
  1026. NTSTATUS
  1027. NTAPI
  1028. TdiRegisterProvider(
  1029. IN PUNICODE_STRING ProviderName,
  1030. OUT HANDLE *ProviderHandle);
  1031. TDIKRNLAPI
  1032. VOID
  1033. NTAPI
  1034. TdiReturnChainedReceives(
  1035. IN PVOID *TsduDescriptors,
  1036. IN ULONG NumberOfTsdus);
  1037. TDIKRNLAPI
  1038. VOID
  1039. NTAPI
  1040. TdiUnmapBuffer(
  1041. IN PMDL MdlChain);
  1042. #ifdef __cplusplus
  1043. }
  1044. #endif
  1045. #endif /* __TDIKRNL_H */