00001
00002
00003
00004
00005
typedef
00006
VOID
00007 (*OPEN_ADAPTER_COMPLETE_HANDLER)(
00008 IN
NDIS_HANDLE ProtocolBindingContext,
00009 IN
NDIS_STATUS Status,
00010 IN
NDIS_STATUS OpenErrorStatus
00011 );
00012
00013
typedef
00014
VOID
00015 (*CLOSE_ADAPTER_COMPLETE_HANDLER)(
00016 IN
NDIS_HANDLE ProtocolBindingContext,
00017 IN
NDIS_STATUS Status
00018 );
00019
00020
typedef
00021
VOID
00022 (*RESET_COMPLETE_HANDLER)(
00023 IN
NDIS_HANDLE ProtocolBindingContext,
00024 IN
NDIS_STATUS Status
00025 );
00026
00027
typedef
00028
VOID
00029 (*REQUEST_COMPLETE_HANDLER)(
00030 IN
NDIS_HANDLE ProtocolBindingContext,
00031 IN
PNDIS_REQUEST NdisRequest,
00032 IN
NDIS_STATUS Status
00033 );
00034
00035
typedef
00036
VOID
00037 (*STATUS_HANDLER)(
00038 IN
NDIS_HANDLE ProtocolBindingContext,
00039 IN
NDIS_STATUS GeneralStatus,
00040 IN PVOID StatusBuffer,
00041 IN
UINT StatusBufferSize
00042 );
00043
00044
typedef
00045
VOID
00046 (*STATUS_COMPLETE_HANDLER)(
00047 IN
NDIS_HANDLE ProtocolBindingContext
00048 );
00049
00050
typedef
00051
VOID
00052 (*SEND_COMPLETE_HANDLER)(
00053 IN
NDIS_HANDLE ProtocolBindingContext,
00054 IN
PNDIS_PACKET Packet,
00055 IN
NDIS_STATUS Status
00056 );
00057
00058
typedef
00059
VOID
00060 (*WAN_SEND_COMPLETE_HANDLER) (
00061 IN
NDIS_HANDLE ProtocolBindingContext,
00062 IN
PNDIS_WAN_PACKET Packet,
00063 IN
NDIS_STATUS Status
00064 );
00065
00066
typedef
00067
VOID
00068 (*TRANSFER_DATA_COMPLETE_HANDLER)(
00069 IN
NDIS_HANDLE ProtocolBindingContext,
00070 IN
PNDIS_PACKET Packet,
00071 IN
NDIS_STATUS Status,
00072 IN
UINT BytesTransferred
00073 );
00074
00075
typedef
00076
VOID
00077 (*WAN_TRANSFER_DATA_COMPLETE_HANDLER)(
00078
VOID
00079 );
00080
00081
typedef
00082
NDIS_STATUS
00083 (*RECEIVE_HANDLER)(
00084 IN
NDIS_HANDLE ProtocolBindingContext,
00085 IN
NDIS_HANDLE MacReceiveContext,
00086 IN PVOID HeaderBuffer,
00087 IN
UINT HeaderBufferSize,
00088 IN PVOID LookAheadBuffer,
00089 IN
UINT LookaheadBufferSize,
00090 IN
UINT PacketSize
00091 );
00092
00093
typedef
00094
NDIS_STATUS
00095 (*WAN_RECEIVE_HANDLER)(
00096 IN
NDIS_HANDLE NdisLinkHandle,
00097 IN PUCHAR Packet,
00098 IN ULONG PacketSize
00099 );
00100
00101
typedef
00102
VOID
00103 (*RECEIVE_COMPLETE_HANDLER)(
00104 IN
NDIS_HANDLE ProtocolBindingContext
00105 );
00106
00107
00108
00109
00110 typedef struct _NDIS30_PROTOCOL_CHARACTERISTICS
00111 {
00112 UCHAR
MajorNdisVersion;
00113 UCHAR
MinorNdisVersion;
00114 USHORT Filler;
00115
union
00116
{
00117 UINT Reserved;
00118 UINT Flags;
00119 };
00120 OPEN_ADAPTER_COMPLETE_HANDLER OpenAdapterCompleteHandler;
00121 CLOSE_ADAPTER_COMPLETE_HANDLER CloseAdapterCompleteHandler;
00122
union
00123
{
00124 SEND_COMPLETE_HANDLER SendCompleteHandler;
00125 WAN_SEND_COMPLETE_HANDLER WanSendCompleteHandler;
00126 };
00127
union
00128
{
00129 TRANSFER_DATA_COMPLETE_HANDLER TransferDataCompleteHandler;
00130 WAN_TRANSFER_DATA_COMPLETE_HANDLER WanTransferDataCompleteHandler;
00131 };
00132
00133 RESET_COMPLETE_HANDLER ResetCompleteHandler;
00134 REQUEST_COMPLETE_HANDLER RequestCompleteHandler;
00135
union
00136
{
00137 RECEIVE_HANDLER ReceiveHandler;
00138 WAN_RECEIVE_HANDLER WanReceiveHandler;
00139 };
00140 RECEIVE_COMPLETE_HANDLER ReceiveCompleteHandler;
00141 STATUS_HANDLER StatusHandler;
00142 STATUS_COMPLETE_HANDLER StatusCompleteHandler;
00143 NDIS_STRING Name;
00144 }
NDIS30_PROTOCOL_CHARACTERISTICS;
00145
00146
00147
00148
00149
typedef
00150
INT
00151 (*RECEIVE_PACKET_HANDLER)(
00152 IN
NDIS_HANDLE ProtocolBindingContext,
00153 IN
PNDIS_PACKET Packet
00154 );
00155
00156
typedef
00157
VOID
00158 (*BIND_HANDLER)(
00159 OUT
PNDIS_STATUS Status,
00160 IN
NDIS_HANDLE BindContext,
00161 IN
PNDIS_STRING DeviceName,
00162 IN PVOID SystemSpecific1,
00163 IN PVOID SystemSpecific2
00164 );
00165
00166
typedef
00167
VOID
00168 (*UNBIND_HANDLER)(
00169 OUT
PNDIS_STATUS Status,
00170 IN
NDIS_HANDLE ProtocolBindingContext,
00171 IN
NDIS_HANDLE UnbindContext
00172 );
00173
00174
typedef
00175
NDIS_STATUS
00176 (*PNP_EVENT_HANDLER)(
00177 IN
NDIS_HANDLE ProtocolBindingContext,
00178 IN PNET_PNP_EVENT NetPnPEvent
00179 );
00180
00181
typedef
00182
VOID
00183 (*UNLOAD_PROTOCOL_HANDLER)(
00184
VOID
00185 );
00186
00187
00188
00189
00190 typedef struct _NDIS40_PROTOCOL_CHARACTERISTICS
00191 {
00192
#ifdef __cplusplus
00193
NDIS30_PROTOCOL_CHARACTERISTICS Ndis30Chars;
00194
#else
00195 NDIS30_PROTOCOL_CHARACTERISTICS;
00196
#endif
00197
00198
00199
00200
00201 RECEIVE_PACKET_HANDLER ReceivePacketHandler;
00202
00203
00204
00205
00206 BIND_HANDLER BindAdapterHandler;
00207 UNBIND_HANDLER UnbindAdapterHandler;
00208 PNP_EVENT_HANDLER PnPEventHandler;
00209 UNLOAD_PROTOCOL_HANDLER UnloadHandler;
00210
00211 }
NDIS40_PROTOCOL_CHARACTERISTICS;
00212
00213
00214
00215
00216
00217
typedef
00218
VOID
00219 (*CO_SEND_COMPLETE_HANDLER)(
00220 IN
NDIS_STATUS Status,
00221 IN
NDIS_HANDLE ProtocolVcContext,
00222 IN
PNDIS_PACKET Packet
00223 );
00224
00225
typedef
00226
VOID
00227 (*CO_STATUS_HANDLER)(
00228 IN
NDIS_HANDLE ProtocolBindingContext,
00229 IN
NDIS_HANDLE ProtocolVcContext OPTIONAL,
00230 IN
NDIS_STATUS GeneralStatus,
00231 IN PVOID StatusBuffer,
00232 IN
UINT StatusBufferSize
00233 );
00234
00235
typedef
00236
UINT
00237 (*CO_RECEIVE_PACKET_HANDLER)(
00238 IN
NDIS_HANDLE ProtocolBindingContext,
00239 IN
NDIS_HANDLE ProtocolVcContext,
00240 IN
PNDIS_PACKET Packet
00241 );
00242
00243
typedef
00244
NDIS_STATUS
00245 (*CO_REQUEST_HANDLER)(
00246 IN
NDIS_HANDLE ProtocolAfContext,
00247 IN
NDIS_HANDLE ProtocolVcContext OPTIONAL,
00248 IN
NDIS_HANDLE ProtocolPartyContext OPTIONAL,
00249 IN OUT
PNDIS_REQUEST NdisRequest
00250 );
00251
00252
typedef
00253
VOID
00254 (*CO_REQUEST_COMPLETE_HANDLER)(
00255 IN
NDIS_STATUS Status,
00256 IN
NDIS_HANDLE ProtocolAfContext OPTIONAL,
00257 IN
NDIS_HANDLE ProtocolVcContext OPTIONAL,
00258 IN
NDIS_HANDLE ProtocolPartyContext OPTIONAL,
00259 IN
PNDIS_REQUEST NdisRequest
00260 );
00261
00262
00263
00264
00265
typedef
00266
NDIS_STATUS
00267 (*CO_CREATE_VC_HANDLER)(
00268 IN
NDIS_HANDLE ProtocolAfContext,
00269 IN
NDIS_HANDLE NdisVcHandle,
00270 OUT
PNDIS_HANDLE ProtocolVcContext
00271 );
00272
00273
typedef
00274
NDIS_STATUS
00275 (*CO_DELETE_VC_HANDLER)(
00276 IN
NDIS_HANDLE ProtocolVcContext
00277 );
00278
00279
typedef
00280
VOID
00281 (*CO_AF_REGISTER_NOTIFY_HANDLER)(
00282 IN
NDIS_HANDLE ProtocolBindingContext,
00283 IN
PCO_ADDRESS_FAMILY AddressFamily
00284 );
00285
00286 typedef struct _NDIS50_PROTOCOL_CHARACTERISTICS
00287 {
00288
#ifdef __cplusplus
00289
NDIS40_PROTOCOL_CHARACTERISTICS Ndis40Chars;
00290
#else
00291 NDIS40_PROTOCOL_CHARACTERISTICS;
00292
#endif
00293
00294
00295
00296
00297 PVOID
ReservedHandlers[4];
00298
00299
00300
00301
00302
00303 CO_SEND_COMPLETE_HANDLER CoSendCompleteHandler;
00304 CO_STATUS_HANDLER CoStatusHandler;
00305 CO_RECEIVE_PACKET_HANDLER CoReceivePacketHandler;
00306 CO_AF_REGISTER_NOTIFY_HANDLER CoAfRegisterNotifyHandler;
00307
00308 }
NDIS50_PROTOCOL_CHARACTERISTICS;
00309
00310
#if NDIS50
00311
typedef NDIS50_PROTOCOL_CHARACTERISTICS NDIS_PROTOCOL_CHARACTERISTICS;
00312
#else
00313
#if NDIS40
00314
typedef NDIS40_PROTOCOL_CHARACTERISTICS NDIS_PROTOCOL_CHARACTERISTICS;
00315
#else
00316 typedef NDIS30_PROTOCOL_CHARACTERISTICS NDIS_PROTOCOL_CHARACTERISTICS;
00317
#endif
00318
#endif
00319 typedef NDIS_PROTOCOL_CHARACTERISTICS *
PNDIS_PROTOCOL_CHARACTERISTICS;
00320
00321
00322
00323
00324
00325
EXPORT
00326
VOID
00327
NdisRegisterProtocol(
00328 OUT PNDIS_STATUS Status,
00329 OUT PNDIS_HANDLE NdisProtocolHandle,
00330 IN PNDIS_PROTOCOL_CHARACTERISTICS ProtocolCharacteristics,
00331 IN UINT CharacteristicsLength
00332 );
00333
00334
EXPORT
00335
VOID
00336
NdisDeregisterProtocol(
00337 OUT PNDIS_STATUS Status,
00338 IN NDIS_HANDLE NdisProtocolHandle
00339 );
00340
00341
00342
EXPORT
00343
VOID
00344
NdisOpenAdapter(
00345 OUT PNDIS_STATUS Status,
00346 OUT PNDIS_STATUS OpenErrorStatus,
00347 OUT PNDIS_HANDLE NdisBindingHandle,
00348 OUT PUINT SelectedMediumIndex,
00349 IN PNDIS_MEDIUM MediumArray,
00350 IN UINT MediumArraySize,
00351 IN NDIS_HANDLE NdisProtocolHandle,
00352 IN NDIS_HANDLE ProtocolBindingContext,
00353 IN PNDIS_STRING AdapterName,
00354 IN UINT OpenOptions,
00355 IN PSTRING AddressingInformation OPTIONAL
00356 );
00357
00358
00359
EXPORT
00360
VOID
00361
NdisCloseAdapter(
00362 OUT PNDIS_STATUS Status,
00363 IN NDIS_HANDLE NdisBindingHandle
00364 );
00365
00366
00367
EXPORT
00368
VOID
00369
NdisCompleteBindAdapter(
00370 IN NDIS_HANDLE BindAdapterContext,
00371 IN NDIS_STATUS Status,
00372 IN NDIS_STATUS OpenStatus
00373 );
00374
00375
EXPORT
00376
VOID
00377
NdisCompleteUnbindAdapter(
00378 IN NDIS_HANDLE UnbindAdapterContext,
00379 IN NDIS_STATUS Status
00380 );
00381
00382
EXPORT
00383
VOID
00384
NdisSetProtocolFilter(
00385 OUT PNDIS_STATUS Status,
00386 IN NDIS_HANDLE NdisBindingHandle,
00387 IN
RECEIVE_HANDLER ReceiveHandler,
00388 IN
RECEIVE_PACKET_HANDLER ReceivePacketHandler,
00389 IN NDIS_MEDIUM Medium,
00390 IN UINT Offset,
00391 IN UINT Size,
00392 IN PUCHAR Pattern
00393 );
00394
00395
EXPORT
00396
VOID
00397
NdisOpenProtocolConfiguration(
00398 OUT PNDIS_STATUS Status,
00399 OUT PNDIS_HANDLE ConfigurationHandle,
00400 IN PNDIS_STRING ProtocolSection
00401 );
00402
00403
EXPORT
00404
VOID
00405
NdisGetDriverHandle(
00406 IN NDIS_HANDLE NdisBindingHandle,
00407 OUT PNDIS_HANDLE NdisDriverHandle
00408 );
00409
00410
EXPORT
00411
VOID
00412
NdisReEnumerateProtocolBindings(
00413 IN NDIS_HANDLE NdisProtocolHandle
00414 );
00415
00416
EXPORT
00417
NDIS_STATUS
00418
NdisWriteEventLogEntry(
00419 IN PVOID LogHandle,
00420 IN NDIS_STATUS EventCode,
00421 IN ULONG UniqueEventValue,
00422 IN USHORT NumStrings,
00423 IN PVOID StringsList OPTIONAL,
00424 IN ULONG DataSize,
00425 IN PVOID Data OPTIONAL
00426 );
00427
00428
00429
00430
00431
00432
EXPORT
00433
VOID
00434
NdisCompletePnPEvent(
00435 IN NDIS_STATUS Status,
00436 IN NDIS_HANDLE NdisBindingHandle,
00437 IN PNET_PNP_EVENT NetPnPEvent
00438 );
00439
00440
00441
00442
00443
00444
00445
00446
00447
EXPORT
00448
NDIS_STATUS
00449
NdisQueryAdapterInstanceName(
00450 OUT PNDIS_STRING pAdapterInstanceName,
00451 IN NDIS_HANDLE NdisBindingHandle
00452 );
00453
00454
EXPORT
00455
NDIS_STATUS
00456
NdisQueryBindInstanceName(
00457 OUT PNDIS_STRING pAdapterInstanceName,
00458 IN NDIS_HANDLE BindingContext
00459 );
00460
00461
00462
00463
00464
00465
typedef
00466
NTSTATUS
00467 (*TDI_REGISTER_CALLBACK)(
00468 IN PUNICODE_STRING DeviceName,
00469 OUT HANDLE * TdiHandle
00470 );
00471
00472
typedef
00473
NTSTATUS
00474 (*TDI_PNP_HANDLER)(
00475 IN PUNICODE_STRING UpperComponent,
00476 IN PUNICODE_STRING LowerComponent,
00477 IN PUNICODE_STRING BindList,
00478 IN PVOID ReconfigBuffer,
00479 IN
UINT ReconfigBufferSize,
00480 IN
UINT Operation
00481 );
00482
00483
EXPORT
00484
VOID
00485
NdisRegisterTdiCallBack(
00486 IN
TDI_REGISTER_CALLBACK RegsterCallback,
00487 IN
TDI_PNP_HANDLER PnPHandler
00488 );
00489
00490
EXPORT
00491
VOID
00492
NdisRegisterTdiPnpHandler(
00493 IN TDI_PNP_HANDLER PnPHandler
00494 );
00495
00496
#if BINARY_COMPATIBLE
00497
00498
VOID
00499
NdisSend(
00500 OUT PNDIS_STATUS Status,
00501 IN NDIS_HANDLE NdisBindingHandle,
00502 IN
PNDIS_PACKET Packet
00503 );
00504
00505
VOID
00506
NdisSendPackets(
00507 IN NDIS_HANDLE NdisBindingHandle,
00508 IN
PPNDIS_PACKET PacketArray,
00509 IN UINT NumberOfPackets
00510 );
00511
00512
VOID
00513
NdisTransferData(
00514 OUT PNDIS_STATUS Status,
00515 IN NDIS_HANDLE NdisBindingHandle,
00516 IN NDIS_HANDLE MacReceiveContext,
00517 IN UINT ByteOffset,
00518 IN UINT BytesToTransfer,
00519 IN OUT
PNDIS_PACKET Packet,
00520 OUT PUINT BytesTransferred
00521 );
00522
00523
VOID
00524
NdisReset(
00525 OUT PNDIS_STATUS Status,
00526 IN NDIS_HANDLE NdisBindingHandle
00527 );
00528
00529
VOID
00530
NdisRequest(
00531 OUT PNDIS_STATUS Status,
00532 IN NDIS_HANDLE NdisBindingHandle,
00533 IN
PNDIS_REQUEST NdisRequest
00534 );
00535
00536
#else // BINARY_COMPATIBLE
00537
00538 #define NdisSend(Status, NdisBindingHandle, Packet) \
00539
{ \
00540
*(Status) = \
00541
(((PNDIS_OPEN_BLOCK)(NdisBindingHandle))->SendHandler)( \
00542
((PNDIS_OPEN_BLOCK)(NdisBindingHandle))->MacBindingHandle, \
00543
(Packet)); \
00544
}
00545
00546 #define NdisSendPackets(NdisBindingHandle, PacketArray, NumberOfPackets) \
00547
{ \
00548
(((PNDIS_OPEN_BLOCK)(NdisBindingHandle))->SendPacketsHandler)( \
00549
(PNDIS_OPEN_BLOCK)(NdisBindingHandle), \
00550
(PacketArray), \
00551
(NumberOfPackets)); \
00552
}
00553
00554
#define WanMiniportSend(Status, \
00555
NdisBindingHandle, \
00556
NdisLinkHandle, \
00557 WanPacket) \
00558
{ \
00559
*(Status) = \
00560
((((PNDIS_OPEN_BLOCK)(NdisBindingHandle))->WanSendHandler))( \
00561
((PNDIS_OPEN_BLOCK)(NdisBindingHandle))->MacBindingHandle, \
00562
(NdisLinkHandle), \
00563
(PNDIS_PACKET)(WanPacket)); \
00564
}
00565
00566
#define NdisTransferData(Status, \
00567
NdisBindingHandle, \
00568
MacReceiveContext, \
00569
ByteOffset, \
00570
BytesToTransfer, \
00571
Packet, \
00572 BytesTransferred) \
00573
{ \
00574
*(Status) = \
00575
(((PNDIS_OPEN_BLOCK)(NdisBindingHandle))->TransferDataHandler)( \
00576
((PNDIS_OPEN_BLOCK)(NdisBindingHandle))->MacBindingHandle, \
00577
(MacReceiveContext), \
00578
(ByteOffset), \
00579
(BytesToTransfer), \
00580
(Packet), \
00581
(BytesTransferred)); \
00582
}
00583
00584
00585 #define NdisReset(Status, NdisBindingHandle) \
00586
{ \
00587
*(Status) = \
00588
(((PNDIS_OPEN_BLOCK)(NdisBindingHandle))->ResetHandler)( \
00589
((PNDIS_OPEN_BLOCK)(NdisBindingHandle))->MacBindingHandle); \
00590
}
00591
00592 #define NdisRequest(Status, NdisBindingHandle, NdisRequest) \
00593
{ \
00594
*(Status) = \
00595
(((PNDIS_OPEN_BLOCK)(NdisBindingHandle))->RequestHandler)( \
00596
((PNDIS_OPEN_BLOCK)(NdisBindingHandle))->MacBindingHandle, \
00597
(NdisRequest)); \
00598
}
00599
00600
#endif // BINARY_COMPATIBLE
00601
00602
00603
00604
00605
00606
00607
00608
00609
00610
00611
00612
00613
00614
00615
00616 #define NdisSetSendFlags(_Packet,_Flags) (_Packet)->Private.Flags = (_Flags)
00617
00618
00619
00620
00621
00622
00623
00624
00625
00626
00627
00628 #define NdisQuerySendFlags(_Packet,_Flags) *(_Flags) = (_Packet)->Private.Flags
00629
00630
00631
00632
00633
00634 #define PROTOCOL_RESERVED_SIZE_IN_PACKET (4 * sizeof(PVOID))
00635
00636
EXPORT
00637
VOID
00638
NdisReturnPackets(
00639 IN
PNDIS_PACKET * PacketsToReturn,
00640 IN UINT NumberOfPackets
00641 );
00642
00643
EXPORT
00644
PNDIS_PACKET
00645
NdisGetReceivedPacket(
00646 IN NDIS_HANDLE NdisBindingHandle,
00647 IN NDIS_HANDLE MacContext
00648 );
00649
00650
00651
00652
00653
#if BINARY_COMPATIBLE
00654
00655
EXPORT
00656 ULONG
00657
NdisBufferLength(
00658 IN
PNDIS_BUFFER Buffer
00659 );
00660
00661
EXPORT
00662 PVOID
00663
NdisBufferVirtualAddress(
00664 IN
PNDIS_BUFFER Buffer
00665 );
00666
00667
#else // BINARY_COMPATIBLE
00668
00669
#ifdef NDIS_NT
00670
#define NdisBufferLength(Buffer) MmGetMdlByteCount(Buffer)
00671
#define NdisBufferVirtualAddress(_Buffer) MmGetSystemAddressForMdl(_Buffer)
00672
#define NdisBufferVirtualAddressSafe(_Buffer, _Priority) MmGetSystemAddressForMdlSafe(_Buffer, _Priority)
00673
#else
00674 #define NdisBufferLength(_Buffer) (_Buffer)->Length
00675 #define NdisBufferVirtualAddress(_Buffer) (_Buffer)->VirtualAddress
00676 #define NdisBufferVirtualAddressSafe(_Buffer, _Priority) (_Buffer)->VirtualAddress
00677
#endif
00678
00679
#endif // BINARY_COMPATIBLE
00680
00681