// Win32 driver entry point NDIS_STATUS DriverEntry(DRIVER_OBJECT *DriverObject, UNICODE_STRING *RegistryPath) { NDIS_MINIPORT_CHARACTERISTICS miniport; ULONG os_major_ver = 0, os_minor_ver = 0; // Initialize the Neo library if (NeoInit() == FALSE) { // Initialization Failed return STATUS_UNSUCCESSFUL; } g_is_win8 = false; #ifndef NDIS30_MINIPORT // Get the OS version PsGetVersion(&os_major_ver, &os_minor_ver, NULL, NULL); if (os_major_ver >= 7 || (os_major_ver == 6 && os_minor_ver >= 2)) { // Windows 8 g_is_win8 = true; } #endif // NDIS30_MINIPORT // Initialize the NDIS wrapper NdisMInitializeWrapper(&ctx->NdisWrapper, DriverObject, RegistryPath, NULL); ndis_wrapper_handle = ctx->NdisWrapper; // Register a NDIS miniport driver NeoZero(&miniport, sizeof(NDIS_MINIPORT_CHARACTERISTICS)); miniport.MajorNdisVersion = NEO_NDIS_MAJOR_VERSION; miniport.MinorNdisVersion = NEO_NDIS_MINOR_VERSION; // Register the handler miniport.InitializeHandler = NeoNdisInit; miniport.HaltHandler = NeoNdisHalt; miniport.QueryInformationHandler = NeoNdisQuery; miniport.ResetHandler = NeoNdisReset; miniport.SetInformationHandler = NeoNdisSet; #ifndef NDIS30_MINIPORT miniport.SendPacketsHandler = NeoNdisSendPackets; #else // NDIS30_MINIPORT miniport.SendHandler = NULL; #endif // NDIS30_MINIPORT if (NG(NdisMRegisterMiniport(ctx->NdisWrapper, &miniport, sizeof(NDIS_MINIPORT_CHARACTERISTICS)))) { // Registration failure return STATUS_UNSUCCESSFUL; } // Initialization success return STATUS_SUCCESS; }
// Win32 driver entry point NDIS_STATUS DriverEntry(DRIVER_OBJECT *DriverObject, UNICODE_STRING *RegistryPath) { NDIS_MINIPORT_DRIVER_CHARACTERISTICS miniport; ULONG os_major_ver = 0, os_minor_ver = 0; NDIS_STATUS ret; // Initialize the Neo library if (NeoInit() == FALSE) { // Initialization Failed return STATUS_UNSUCCESSFUL; } g_is_win8 = false; // Get the OS version PsGetVersion(&os_major_ver, &os_minor_ver, NULL, NULL); if (os_major_ver >= 7 || (os_major_ver == 6 && os_minor_ver >= 2)) { // Windows 8 g_is_win8 = true; } // Register a NDIS miniport driver NeoZero(&miniport, sizeof(NDIS_MINIPORT_DRIVER_CHARACTERISTICS)); miniport.Header.Type = NDIS_OBJECT_TYPE_MINIPORT_DRIVER_CHARACTERISTICS; miniport.Header.Revision = NDIS_MINIPORT_DRIVER_CHARACTERISTICS_REVISION_2; miniport.Header.Size = NDIS_SIZEOF_MINIPORT_DRIVER_CHARACTERISTICS_REVISION_2; miniport.MajorNdisVersion = NEO_NDIS_MAJOR_VERSION; miniport.MinorNdisVersion = NEO_NDIS_MINOR_VERSION; // Register the handler miniport.InitializeHandlerEx = NeoNdisInitEx; miniport.HaltHandlerEx = NeoNdisHaltEx; miniport.OidRequestHandler = NeoNdisOidRequest; miniport.ResetHandlerEx = NeoNdisResetEx; miniport.CheckForHangHandlerEx = NeoNdisCheckForHangEx; miniport.UnloadHandler = NeoNdisDriverUnload; miniport.SendNetBufferListsHandler = NeoNdisSendNetBufferLists; miniport.SetOptionsHandler = NeoNdisSetOptions; miniport.PauseHandler = NeoNdisPause; miniport.RestartHandler = NeoNdisRestart; miniport.ReturnNetBufferListsHandler = NeoNdisReturnNetBufferLists; miniport.CancelSendHandler = NeoNdisCancelSend; miniport.DevicePnPEventNotifyHandler = NeoNdisDevicePnPEventNotify; miniport.ShutdownHandlerEx = NeoNdisShutdownEx; miniport.CancelOidRequestHandler = NeoNdisCancelOidRequest; ret = NdisMRegisterMiniportDriver(DriverObject, RegistryPath, NULL, &miniport, &ndis_miniport_driver_handle); if (NG(ret)) { // Registration failure return STATUS_UNSUCCESSFUL; } // Initialization success return STATUS_SUCCESS; }