阅读:1662回复:7
第一位答对的给40分!!!
如何让一个普通进程写访问一个Service创建的内存映射文件?同样的问题,一个Service程序创建的内核对象如Event,如何在一个进程中用Modify_State权限打开并Set?
答对的奉送40分。 |
|
|
沙发#
发布于:2002-07-15 11:01
什么service?
是2000的服务?不是驱动? 服务和普通进程没什么区别啊 如果是驱动,去看ZwOpenSection in DDK 和File Mapping API in msdn |
|
|
板凳#
发布于:2002-07-15 13:29
什么service? 不是驱动,就是2000的服务。 Service和普通进程还是不同的,至少表现在我前面说的那个问题,服务创建的内核对象对普通进程是只读的,即使使用读写属性创建。一般返回的错误是权限不够,但我曾试着修改普通进程的权限,比如打开Debug权限或者Security权限等,都是同样的问题。 不过抱歉的很,我倒没有试着组合多个权限,有空试试。 各位请各位老大不吝赐教。 |
|
|
地板#
发布于:2002-07-15 13:32
修改DACL
|
|
地下室#
发布于:2002-07-15 13:33
有这个问题?
我以前倒真不知道。 你要是有答案了贴出来让大家分享啊 但你要写它干什么呢?如果服务是你自己写的,你可以进程通讯让服务做啊 |
|
|
5楼#
发布于:2002-07-15 14:04
easy.
SECURITY_ATTRIBUTES SecuAttr = {0}; char SecurityDescriptorData[SECURITY_DESCRIPTOR_MIN_LENGTH] = {0}; SecuAttr.lpSecurityDescriptor = (PSECURITY_DESCRIPTOR) SecurityDescriptorData); InitializeSecurityDescriptor(SecuAttr.lpSecurityDescriptor, SECURITY_DESCRIPTOR_REVISION)); SetSecurityDescriptorDacl(SecuAttr.lpSecurityDescriptor, TRUE, (PACL) NULL, FALSE); SecuAttr.nLength = sizeof(SecuAttr); SecuAttr.bInheritHandle = FALSE; hndShareMem = GlobalCreateFileMapping( INVALID_HANDLE_VALUE, &SecuAttr, PAGE_READWRITE | SEC_COMMIT, 0, sizeof(xxxxxx), yyyy); |
|
6楼#
发布于:2002-07-15 14:04
如何让一个普通进程写访问一个Service创建的内存映射文件?同样的问题,一个Service程序创建的内核对象如Event,如何在一个进程中用Modify_State权限打开并Set? 简单方向: 权限之争。 方法很多,比如: 1、服务创建对象时设置好SD,而非用默认的 2、服务试你写的话让它为客户进程DuplicateHandle 3、让客户进程拥有Tcb特权,首先要有administrator权限或利用漏洞,麻烦 等等 |
|
7楼#
发布于:2002-07-15 20:18
多谢各位老大,小弟对DACL之类的东西几乎一无所知,以后有空还得向各位请教。只是这次得食言了,根据各位的解答,xdjm仁兄肯定是答对了,可要把这40分都给了您,似乎对不住后面的两位,还是匀些出来吧,呵呵。
不好意思,原先把分数设少了,干脆每位送上20分吧。 版主大哥也这么关心,送几分意思意思吧。 [编辑 - 7/15/02 by TonyHuyan] |
|
|