/* * Kernel entry point. * * Initialize/finalize the module and return. * * Return 0 on success, errno on failure. */ static int netmap_loader(__unused struct module *module, int event, __unused void *arg) { int error = 0; switch (event) { case MOD_LOAD: error = netmap_init(); break; case MOD_UNLOAD: netmap_fini(); break; default: error = EOPNOTSUPP; break; } return (error); }
VOID ioctlUnloadDriver(__in PDRIVER_OBJECT DriverObject) { PDEVICE_OBJECT deviceObject = DriverObject->DeviceObject; UNICODE_STRING uniWin32NameString; UNREFERENCED_PARAMETER(deviceObject); netmap_fini(); keexit_GST(); RtlInitUnicodeString(&uniWin32NameString, NETMAP_DOS_DEVICE_NAME); // Delete the link from our device name to a name in the Win32 namespace. IoDeleteSymbolicLink(&uniWin32NameString); if (deviceObject != NULL) { IoDeleteDevice(deviceObject); } return; }