1.防卸载内核模块
不论是Windows还是Linux,当我们开发完一个内核模块的时候,内核模块中往往都承担这至关重要的作用。如果别人卸载了内核模块,那就起不到作用了。所以如何防止卸载。
2.Windows防卸载
Windows内核模块防卸载一般两种方法:
- 1.不写unload函数,很暴力的方法,确实没发卸载,但是自己也卸载不了了,那如果我们自己要升级的话,也卸载不了,是个问题。
- 2.在内核模块中创建一个device设备文件,然后用户态打开这个device,这个时候当我们卸载的时候,就会提示stop_pending。因为被占用了,所以卸载不掉,当我们自己需要升级的时候,直接关闭刚才打开的device设备文件,就可以卸载掉了。
3.Linux防卸载
Linux上就简单多了。
try_module_get(THIS_MODULE) //增加本内核模块的引用计数
module_put(THIS_MODULE) //减少该内核模块的引用计数
增加引用计数,卸载时就会提示in use。当我们自己想卸载的时候,就调用Put,减少引用计数。