void (*OnLinkStatusChanged)(struct hv_device *dev, u32 Status);
 
        /* Specific to this driver */
-       int (*OnClose)(struct hv_device *dev);
        int (*OnSend)(struct hv_device *dev, struct hv_netvsc_packet *packet);
 
        void *Context;
 /* Interface */
 int NetVscInitialize(struct hv_driver *drv);
 int RndisFilterOnOpen(struct hv_device *Device);
+int RndisFilterOnClose(struct hv_device *Device);
 
 #endif /* _NETVSC_API_H_ */
 
 
 static void RndisFilterOnCleanup(struct hv_driver *Driver);
 
-static int RndisFilterOnClose(struct hv_device *Device);
-
 static int RndisFilterOnSend(struct hv_device *Device,
                             struct hv_netvsc_packet *Packet);
 
        Driver->Base.OnDeviceRemove = RndisFilterOnDeviceRemove;
        Driver->Base.OnCleanup = RndisFilterOnCleanup;
        Driver->OnSend = RndisFilterOnSend;
-       Driver->OnClose = RndisFilterOnClose;
        /* Driver->QueryLinkStatus = RndisFilterQueryDeviceLinkStatus; */
        Driver->OnReceiveCallback = RndisFilterOnReceive;
 
        return ret;
 }
 
-static int RndisFilterOnClose(struct hv_device *Device)
+int RndisFilterOnClose(struct hv_device *Device)
 {
        int ret;
        struct netvsc_device *netDevice = Device->Extension;
 
 static int netvsc_close(struct net_device *net)
 {
        struct net_device_context *net_device_ctx = netdev_priv(net);
-       struct driver_context *driver_ctx =
-           driver_to_driver_context(net_device_ctx->device_ctx->device.driver);
-       struct netvsc_driver_context *net_drv_ctx =
-               (struct netvsc_driver_context *)driver_ctx;
-       struct netvsc_driver *net_drv_obj = &net_drv_ctx->drv_obj;
        struct hv_device *device_obj = &net_device_ctx->device_ctx->device_obj;
        int ret;
 
 
        netif_stop_queue(net);
 
-       ret = net_drv_obj->OnClose(device_obj);
+       ret = RndisFilterOnClose(device_obj);
        if (ret != 0)
                DPRINT_ERR(NETVSC_DRV, "unable to close device (ret %d).", ret);