阅读:1594回复:14
filedisk问题请教
请问filedisk是不是不能在非管理员权限下用?
|
|
沙发#
发布于:2004-01-06 16:28
常规情况下是不可以的,不过可以自己想办法,饶过微软的保护,与内核驱动通信。。。。。。
|
|
|
板凳#
发布于:2004-01-07 09:47
thanks,那应该怎么实现,有没有人实现过?
常规情况下是不可以的,不过可以自己想办法,饶过微软的保护,与内核驱动通信。。。。。。 |
|
地板#
发布于:2004-01-07 10:47
通过在你的驱动在GDT中加入CALLGATE,然后在你的用户程序中通过他进入RING0,然后直接IOBUILDDEVICEIOCONTROL,直接找到驱动对象,然后IOCALLDRIVE,我没测试过,不过你可以试试。。。。。
|
|
|
地下室#
发布于:2004-01-08 14:18
通过在你的驱动在GDT中加入CALLGATE,然后在你的用户程序中通过他进入RING0,然后直接IOBUILDDEVICEIOCONTROL,直接找到驱动对象,然后IOCALLDRIVE,我没测试过,不过你可以试试。。。。。 没有必要吧,让Filedisk静态启动不久可以了吗? |
|
5楼#
发布于:2004-01-08 15:13
thanks,两位
静态启动是什么意思? |
|
6楼#
发布于:2004-01-08 16:34
静态启动有什么用,现在的问题是驱动加载了,但是应用层无法同驱动通信,在非ADMINISTRATOR下,是不能DEVICEIOCONTROL的,所以没用,只能通过自己的方法,直接进入RING0去直接找到设备对象,自己分配IRP,自己和内核通信。。。。。。
|
|
|
7楼#
发布于:2004-01-09 09:36
看上去很复杂的说,:)
有没有人这样做过? thanks 静态启动有什么用,现在的问题是驱动加载了,但是应用层无法同驱动通信,在非ADMINISTRATOR下,是不能DEVICEIOCONTROL的,所以没用,只能通过自己的方法,直接进入RING0去直接找到设备对象,自己分配IRP,自己和内核通信。。。。。。 |
|
8楼#
发布于:2004-01-11 12:21
顶!
|
|
9楼#
发布于:2004-01-13 13:07
搞那么复杂干什么?写一个最小的NT Service跟filedisk通讯,然后别的应用程序跟这个Service通讯不就行了?
在应用层处理安全问题还是比较容易的,比如用Socket或Namedpipe甚至SharedMemory都可以. |
|
|
10楼#
发布于:2004-01-13 20:30
非管理员权限下,可以用CreateService启动一个服务吗?
|
|
|
11楼#
发布于:2004-01-14 20:14
>> 非管理员权限下,可以用CreateService启动一个服务吗?
非管理员权限下,还不可以安装驱动呢。 我的意思是在装驱动的时候装一个NT Service上去(自动用Admin或LocalSystem帐户启动),以后不管用什么帐户登录,和这个Service交互应该没有什么困难的吧? |
|
|
12楼#
发布于:2004-01-14 21:19
如何做呢??请指点一二???
|
|
|
13楼#
发布于:2004-01-14 23:04
如何做呢??请指点一二??? 装Filedisk驱动的时候同时装一个与之对应的User level的NT Service。 NT Service怎么写怎么装就不用我说了吧,主要说说里面干什么。 1、把原来你要在应用程序里使用的DeviceIoControl全部移到这个NT Service应用里。 2、Service设置成Auto Start,不设置登录帐号(就是用LocalSystem了吧,我估计,但这样不能使用NamedPipe之类的IPC)或设置成Administrator(这样IPC手段的选择更多些),根据你的选择,在Service里打开一个Socket或NamedPipe或一片SharedMemory(需要一个或一组命名的Event或Mutex配合使用,当然,在创建MemoryMap或Event或Mutex时要注意那个LPSECURITY_ATTRIBUTES参数需要做一些特殊处理,以便于其它非Admin进程可以使用OpenXXX打开)。 3、剩下的事就简单了,在你自己的应用打开Service正在Listen的IPC通道跟Service通讯(Socket连接或NamedPipe连接或MemoryMapping),告诉Service你想对Filedisk执行的操作,由Service进行DeviceIoControl不就行了。 这样做也许比直接进入ring0代码多些,但容易调试和移植。 |
|
|
14楼#
发布于:2004-01-14 23:14
lpServiceStartName 给个NULL就是LocalSystem的账号了。 :D
|
|