2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS NDIS User I/O driver
5 * PURPOSE: Driver entry point and protocol initialization
6 * PROGRAMMERS: Cameron Gutman (cameron.gutman@reactos.org)
14 PDEVICE_OBJECT GlobalDeviceObject
;
15 NDIS_HANDLE GlobalProtocolHandle
;
17 VOID NTAPI
NduUnload(PDRIVER_OBJECT DriverObject
)
19 IoDeleteDevice(GlobalDeviceObject
);
21 DPRINT("NDISUIO: Unloaded\n");
26 DriverEntry(PDRIVER_OBJECT DriverObject
,
27 PUNICODE_STRING RegistryPath
)
30 NDIS_PROTOCOL_CHARACTERISTICS Chars
;
32 /* Setup dispatch functions */
33 DriverObject
->MajorFunction
[IRP_MJ_CREATE
] = NduDispatchCreate
;
34 DriverObject
->MajorFunction
[IRP_MJ_CLOSE
] = NduDispatchClose
;
35 DriverObject
->MajorFunction
[IRP_MJ_DEVICE_CONTROL
] = NduDispatchDeviceControl
;
36 DriverObject
->MajorFunction
[IRP_MJ_READ
] = NduDispatchRead
;
37 DriverObject
->MajorFunction
[IRP_MJ_WRITE
] = NduDispatchWrite
;
38 DriverObject
->DriverUnload
= NduUnload
;
40 /* Create the NDISUIO device object */
41 Status
= IoCreateDevice(DriverObject
,
45 FILE_DEVICE_SECURE_OPEN
,
48 if (!NT_SUCCESS(Status
))
50 DPRINT1("Failed to create device object with status 0x%x\n", Status
);
54 /* Register the protocol with NDIS */
55 RtlZeroMemory(&Chars
, sizeof(Chars
));
56 Chars
.MajorNdisVersion
= NDIS_MAJOR_VERSION
;
57 Chars
.MinorNdisVersion
= NDIS_MINOR_VERSION
;
58 Chars
.OpenAdapterCompleteHandler
= NduOpenAdapterComplete
;
59 Chars
.CloseAdapterCompleteHandler
= NduCloseAdapterComplete
;
60 Chars
.SendCompleteHandler
= NduSendComplete
;
61 Chars
.TransferDataCompleteHandler
= NduTransferDataComplete
;
62 Chars
.ResetCompleteHandler
= NduResetComplete
;
63 Chars
.RequestCompleteHandler
= NduRequestComplete
;
64 Chars
.ReceiveHandler
= NduReceive
;
65 Chars
.ReceiveComplete
= NduReceiveComplete
;
66 Chars
.StatusHandler
= NduStatus
;
67 Chars
.StatusCompleteHandler
= NduStatusComplete
;
68 Chars
.Name
= NULL
; //FIXME
69 Chars
.ReceivePacketHandler
= NULL
; //NduReceivePacket
70 Chars
.BindAdapterHandler
= NduBindAdapter
;
71 Chars
.UnbindAdapterHandler
= NduUnbindAdapter
;
72 Chars
.PnPEventHandler
= NduPnPEvent
;
74 NdisRegisterProtocol(&Status
,
75 &GlobalProtocolHandle
,
78 if (Status
!= NDIS_STATUS_SUCCESS
)
80 DPRINT1("Failed to register protocol with status 0x%x\n", Status
);
81 IoDeleteDevice(GlobalDeviceObject
);
85 DPRINT("NDISUIO: Loaded\n");
87 return STATUS_SUCCESS
;