无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
楼主: mdyblog
打印 上一主题 下一主题

[更新376#2825]PECMD2012.1.80.13_Win32_64.多窗口多线程.裸机系统2.3.3.1+18M酷M...

    [复制链接]
31#
发表于 2012-2-24 14:38:55 | 显示全部楼层
这是网上找到的代码,我不懂C语言,不知是否有用。
#include <Windows.h>
#include <Aclapi.h>
#pragma comment (lib,"Advapi32.lib")
void main()
{
    DWORD dwRet;
    LPSTR SamName = "MACHINE\\SAM\\SAM";
    PSECURITY_DESCRIPTOR pSD = NULL;
    PACL pOldDacl = NULL;
    PACL pNewDacl = NULL;
    EXPLICIT_ACCESS ea;
    HKEY hKey = NULL;
    // 获取SAM主键的DACL
    dwRet = GetNamedSecurityInfo(SamName, SE_REGISTRY_KEY, DACL_SECURITY_INFORMATION, NULL, NULL, &pOldDacl, NULL, &pSD);
    if (dwRet != ERROR_SUCCESS)
    {
        printf("GetNamedSecurityInfo Error: %d\n", dwRet);
        goto FreeAndExit;
    }
    // 创建一个ACE,允许Everyone完全控制对象,并允许子对象继承此权限
    ZeroMemory(&ea, sizeof(EXPLICIT_ACCESS));
    BuildExplicitAccessWithName(&ea, "Everyone", KEY_ALL_ACCESS, SET_ACCESS, SUB_CONTAINERS_AND_OBJECTS_INHERIT);
    // 将新的ACE加入DACL
    dwRet = SetEntriesInAcl(1, &ea, pOldDacl, &pNewDacl);
    if (dwRet != ERROR_SUCCESS)
    {
        printf("SetEntriesInAcl Error: %d\n", dwRet);
        goto FreeAndExit;
    }
    // 更新SAM主键的DACL
    dwRet = SetNamedSecurityInfo(SamName, SE_REGISTRY_KEY, DACL_SECURITY_INFORMATION, NULL, NULL, pNewDacl, NULL);
    if (dwRet != ERROR_SUCCESS)
    {
        printf("SetNamedSecurityInfo Error: %d\n", dwRet);
        goto FreeAndExit;
    }
    // 打开SAM的子键
    dwRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SAM\\SAM\\Domains\\Account\\Users\\000001F4", 0, KEY_ALL_ACCESS, &hKey);
    if (dwRet != ERROR_SUCCESS)
    {
        printf("RegOpenKeyEx Error: %d\n", dwRet);
        goto FreeAndExit;
    }
    printf("Open SAM Subkey Successfully.\n");
FreeAndExit:
    if (hKey) RegCloseKey(hKey);
    if (pNewDacl) LocalFree(pNewDacl);
    // 还原SAM主键的DACL
    if (pOldDacl) SetNamedSecurityInfo(SamName, SE_REGISTRY_KEY, DACL_SECURITY_INFORMATION, NULL, NULL, pOldDacl, NULL);
    if (pSD) LocalFree(pSD);
    return;
}
回复

使用道具 举报

32#
发表于 2012-2-24 16:21:31 | 显示全部楼层
原帖由 2012abc19701 于 2012-2-24 16:10 发表


你给的代码还是 同一问题。
出在 :
// 打开SAM的子键
    dwRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SAM\\SAM\\Domains\\Account\\Users\\000001F4", 0, KEY_ALL_ACCESS, &hKey);

由于 Administ ...

是这个问题。
可现实中存在这样的事情:黑客或病毒创建一个隐藏账户,把注册表的相关项的权限,除自身外全部删除(包括Administrator)。
针对这种情况,我现在是使用regini处理的。但是有个缺点,要对照注册表,一层一层用命令处理。
我测试的这个SAM文件是人为处理过的,专门用于测试。

[ 本帖最后由 lmle 于 2012-2-24 16:23 编辑 ]
回复

使用道具 举报

33#
发表于 2012-2-25 07:53:43 | 显示全部楼层
Hive添加Everyone权限完美了!
楼主的编程水平、对PECMD开发的投入、对问题的处理速度绝对一流,佩服,赞叹。
回复

使用道具 举报

34#
发表于 2012-2-25 14:18:37 | 显示全部楼层
楼主的PECMD在速度方面还有没有优化的可能?
1、同样的命令,用老九的PECMD和你的这个,老九的出现用户界面要快一点。或许是你的这个PECMD功能更多、更强大有关系。
2、HIVE命令挂载注册表,明显比reg load慢多了(老九的PECMD有同样的问题)。
3、或许还有其他命令,没具体测试。
这只是个人想法,意见不一定可行。
回复

使用道具 举报

35#
发表于 2012-2-25 20:04:30 | 显示全部楼层
关于KILL命令:
1、如下这段命令能关闭MESS的提示窗口:
_SUB AAA
    MESS- 这是提示信息AAA。@测试#ok
    WAIT 5000
_END
AAA
KILL \测试
2、下面这段命令则不能关闭:
_SUB Windows1,W300H240,窗口
   TIME t1,10,CALL AAA
_END
_SUB AAA
    ENVI @t1=0
    MESS- 这是提示信息AAA。@测试#ok
    WAIT 5000
_END
Windows1
KILL \测试

另:HIVE -quick速度确实快多了。我觉得HIVE默认就用-quick,特殊使用加-super_r,可以少一个参数。

[ 本帖最后由 lmle 于 2012-2-25 20:47 编辑 ]
回复

使用道具 举报

36#
发表于 2012-2-25 21:47:57 | 显示全部楼层
ITEM命令的问题,测试命令如下:
_SUB Windows1,W260H100,测试窗口
    ITEM Save1,L20T20W80H24,保存到文件,CALL SaveFile,,0
    ITEM Save2,L150T20W80H24,保存到文件,CALL SaveFile,,-1
_END
Windows1
按钮状态取值0时,文字居中,正常;按钮状态取值-1时,文字偏右。

但是,在窗口中初始可用,在函数中用“ENVI @按钮名称.Enable=0”设置为不可用时正常。

[ 本帖最后由 lmle 于 2012-2-25 21:58 编辑 ]
回复

使用道具 举报

37#
发表于 2012-2-26 06:03:54 | 显示全部楼层
原帖由 2012abc19701 于 2012-2-25 23:39 发表




关于KILL命令:

2、下面这段命令则不能关闭:
_SUB Windows1,W300H240,窗口
   TIME t1,10,CALL AAA
_END
_SUB AAA
    ENVI @t1=0
    MESS- 这是提示信息AAA。@测试#ok
    WAIT 5000
_EN ...

谢谢楼主解惑,可能是我理解错了。
应该是:窗口函数Windows1在关闭窗口之前(手动或Kill命令),是不会退出的,即便WAIT 5000时间已到。
也就是说,Windows1这句之后的“MESS   --将: KILL \测试”、“ KILL \测试”只有在关闭窗口后,才能执行。

[ 本帖最后由 lmle 于 2012-2-26 06:05 编辑 ]
回复

使用道具 举报

38#
发表于 2012-2-26 13:51:03 | 显示全部楼层
原帖由 2012abc19701 于 2012-2-26 09:35 发表
大家认为还有什么最需要加的功能。

是否可以加入以下功能:
1、字符与ASCII之间的相互转换。
2、十进制、十六进制等之间的相互转换。
第一个功能,我现在是使用查表法转换的;第二个功能中,十六进制转十进制数,可以用CALC简单实现。要实现十进制转十六进制,或二进制等就比较麻烦,要写很多语句才能实现。
我对PECMD的功能还不是很熟悉,不知这些功能是否已经能简单实现?或者功能多了,会不会使PECMD变得臃肿。毕竟PECMD的基本使用场所是PE环境。
回复

使用道具 举报

39#
发表于 2012-2-26 19:42:08 | 显示全部楼层
原帖由 2012abc19701 于 2012-2-26 18:03 发表
Q: 十进制、十六进制等之间的相互转换。

A: U56 的CALC  -base= 可以实现。
CALC  -base=16  A=256 + 1
CALC  -base=8   A=256 + 1
CALC  -base=2   A=256 + 1

数据(包刮浮点数)支持TGMKS后缀。K=1024 ...

谢谢更新。同时,580楼的回复让我了解了CODE命令的强大功能。
另:
嵌入脚本后的PECMD能不能还保留运行外部命令的能力?老九PECMD是支持的。
比如:Mypecmd是嵌入了脚本的,当没有参数运行Mypecmd时,调用的是嵌入内部的命令;当有参数调用Mypecmd时,解释执行参数中的命令,屏蔽嵌入的命令。
Mypecmd-----------运行内部嵌入的命令
Mypecmd MESS 测试@cs#ok------------运行“MESS 测试@cs#ok”
Mypecmd LOAD 测试.ini------------------执行“测试.ini”文件中的命令
回复

使用道具 举报

40#
发表于 2012-2-26 22:33:26 | 显示全部楼层
回复 #592 #593 2012abc19701 的帖子

原来自己用脚本就可以实现啊!学习了,谢谢。

#!pecmd这句话是什么意思,说明里好像找不到。

[ 本帖最后由 lmle 于 2012-2-26 22:45 编辑 ]
回复

使用道具 举报

41#
发表于 2012-2-28 00:05:14 | 显示全部楼层
原帖由 988668 于 2012-2-27 23:02 发表
功能真的增强了很多了,非常好啊,下面是我在很认真的读完全部帮助文本后想提出的一些建议,楼主看是否可以实现??

read 字符串的读取行字符可否考虑增加读取指定行号的指定位置的字符长度?
     增加查找 ...

第一个问题,用循环读取,再加字符串比较就可以实现。
第二个问题与第一个问题处理方法类似。
个人觉得已无添加相关命令的必要。
回复

使用道具 举报

42#
发表于 2012-2-28 00:19:18 | 显示全部楼层
楼主,现在用PECMD制作的用户界面窗口、对话框等的边框是可以拉动的(改变大小)。设计好的界面,拉动之后,看着很不舒服。

[ 本帖最后由 lmle 于 2012-2-28 00:20 编辑 ]
回复

使用道具 举报

43#
发表于 2012-2-28 14:56:54 | 显示全部楼层
LABE文字的颜色能做成在脚本里更改吗?
如:LABE原来的文字颜色是黑色,当符合某一条件后,我可以把它改成红色。
回复

使用道具 举报

44#
发表于 2012-3-1 08:29:49 | 显示全部楼层
原帖由 2012abc19701 于 2012-3-1 02:38 发表
[更新204#701:PECMD-32.2012.1除夕版.多窗口多线-U63裸机系统+18M酷MiniPE
204#701楼 U63       字符串参数顺序改了。

噢,嘎嘎,刚从老九的PECMD转变过来,又得转回去了。
不过这样也好,老九PECMD毕竟使用范围大,更改的人数可以大幅度减少,测试面也可以加大,还是很有好处的。
回复

使用道具 举报

45#
发表于 2012-3-3 17:30:23 | 显示全部楼层
楼主:
      在windows登录前,用“MESS-svr  这是测试。@ceshi#ok”能显示提示信息。但是,我用"KILL \ceshi"关闭不了提示窗口。
请问,有什么办法关闭它?(想实现关闭这个提示,显示下一个提示。)
回复

使用道具 举报

46#
发表于 2012-3-3 18:59:21 | 显示全部楼层
原帖由 2012abc19701 于 2012-3-3 18:53 发表



可以啊。测试如下:
138159

2:
138160
没了。

我测试是:在进入系统后是可以的,但在登录界面那里却不行。试过好几次了。
把PECMD注册成系统服务后可以进行这个测试。

[ 本帖最后由 lmle 于 2012-3-3 19:04 编辑 ]
回复

使用道具 举报

47#
发表于 2012-3-3 19:18:54 | 显示全部楼层
我是这样测试的:
把PECMD注册成服务,把服务参数里改成调用a.bat,a.bat里的内容大致如下:
start pecmd mess-srv 这是第一个提示信息@提示一#ok
dos的其他命令……
start pecmd kill \提示一
start pecmd mess-srv 这是第二个提示信息@提示二#ok
exit
用start应该如同多线程吧,是哪儿出问题了?
同样的bat文件,在进入桌面后测试正常,窗口可以如期关闭。

[ 本帖最后由 lmle 于 2012-3-3 19:24 编辑 ]
回复

使用道具 举报

48#
发表于 2012-3-3 20:02:22 | 显示全部楼层
原帖由 2012abc19701 于 2012-3-3 19:42 发表


你 的服务的注册命令是什么?详细的。

注册服务:EXEC =G:\PECMD.EXE EXEC  /InstallService Myservice G:\a.bat
a.bat内容:
start g:\pecmd MESS-svr 这是第一个窗口@测试一#ok
g:\pecmd wait 5000
start g:\pecmd kill \测试一
start g:\pecmd MESS-svr 这是第二个窗口@测试二#ok
pause
在桌面下,测试正常。“测试一”会被kill,弹出“测试二”,然后暂停。
在登录界面处,“测试一”窗口始终存在,不响应kill命令。手动关闭“测试一”后,会弹出“测试二”。

[ 本帖最后由 lmle 于 2012-3-3 20:20 编辑 ]
回复

使用道具 举报

49#
发表于 2012-3-3 22:38:57 | 显示全部楼层

回复 #840 2011hwo1 的帖子

系统登录界面处,已经不是单进程、单线程了。
另:你提到的自动字符串处理,个人认为不可行。假如位置和字符串都是由变量引入的呢?很有可能位置和字符串都是数字,而且位置的值比字符串还长(或大)。这样就引起混乱了。
回复

使用道具 举报

50#
发表于 2012-3-5 10:50:34 | 显示全部楼层
原帖由 2012abc19701 于 2012-3-4 23:36 发表



先用MS的私房菜(对话框),虽然不好看。 但是可以关闭。
a.bat:
start PECMD  mess-svr2 这是第一个提示信息@svr2#OK
ping -n 4 127.0.0.1
start /wait pecmd "TEAM kill *svr2|WAIT 1050"
start ...

呵呵,用SHUTDOWN啊,弹出那个窗口挺吓人的。
还有,进入桌面后,直接运行a.bat时,先弹出第一个窗口,关闭,再弹出第二个窗口,关闭,都正常。
注册成服务(加--killwin2的),即使进入桌面后,也不保证两个窗口都能顺利弹出,有时只出现一个窗口(大部分时候),有时一个也不弹出。
增加Ping的次数,加大Wait的等待时间等,这种情况也没有改善。
重启,在登录界面,等不到窗口的弹出。登录、进入桌面,能看到cmd窗口在运行。
看来这个问题比较棘手,而且使用率不高,可以先放一放。
让你费心了,谢谢!
回复

使用道具 举报

51#
发表于 2012-3-6 09:55:04 | 显示全部楼层
原帖由 2012abc19701 于 2012-3-5 21:32 发表


可以修改对话框。
在winlogon.exe: 1300

winlogon.exe 对话框1300
1.备份 winlogon.exe
2. 按下面编辑 winlogon.exe 对话框1300
3. 替换 Systen32\dllcache\winlogon.exe
4. Systen32\winlogon.ex ...

谢谢楼主提供的方法,不过我的工具不只是在自己电脑上用,而且不限于XP,修改winlogon.exe的方法不通用。
另外:EXIT怎样退出嵌套的函数(不是用LOAD载入的)?试了EXIT File、EXIT _SUB、KILL \ 等,都不成功。
已发短消息建议版主固顶,方便查阅。
回复

使用道具 举报

52#
发表于 2012-3-6 10:51:26 | 显示全部楼层
原帖由 2012abc19701 于 2012-3-6 10:08 发表


退出嵌套的函数必须用变量标志。

退出嵌套的函数.WCS:
CALL  F1
MESS  END

_SUB   F1
  ENVI &&RUN=1  //定义局部变量,运行标志, 不影响外部变量
  MESS -F1/1--
  CALL F1_1
  FIND $1=%&R ...

谢谢,明白了。工具基本完工。

[ 本帖最后由 lmle 于 2012-3-6 11:19 编辑 ]
回复

使用道具 举报

53#
发表于 2012-3-20 14:43:57 | 显示全部楼层
编辑框还有点问题:
在编辑框中输错内容后,再用删除键更正,还会提示错误,会残留一个字母。

回复

使用道具 举报

54#
发表于 2012-3-20 22:29:09 | 显示全部楼层
不知道哪个版本起,多次清空编辑框会引起程序崩溃。
家里的电脑只有U66H和U68-17.,U66H正常(针对下面的脚本,但U66H在另一个PECMD编的小工具中也会崩溃,目前还没找出是哪个部分引起的)。
运行下面的测试程序,然后一直点弹出的消息窗口的“确定”,i值有时到2,有时十几就会崩溃。
测试代码如下:
_SUB 主界面,W300H200,测试
    EDIT SystemDir,L20T20W100H18,f:\Windows,CALL CheckFile,0
    EDIT EditAAA,L20T50W100H17,,,0
    TIME t1,100,CALL CheckFile
_END
_SUB CheckFile
    ENVI @t1=0
    LOOP %i%<100,
    {
    mess i=%i%
    ENVI @EditAAA=
    CALC i=%i%+1
    }
_END
ENVI i=1
CALL @主界面


[ 本帖最后由 lmle 于 2012-3-20 22:44 编辑 ]
回复

使用道具 举报

55#
发表于 2012-3-23 14:12:44 | 显示全部楼层
原帖由 info 于 2012-3-23 13:02 发表
我需要这样的效果,如:C:\WINDOWS下有三个INI文件,分别为01.INI,02.INI,03.INI。

TEAM ENVI WIMN1=| ENVI WIMN=     //初始化为空
FORX C:\WINDOWS\*.INI,WIMP,0,TEAM NAME WIMN=%WIMP%
PATH Y:\%WIMN%\ ...

是不是这样就可以了:
TEAM ENVI WIMN1=| ENVI WIMN=     //初始化为空
FORX C:\WINDOWS\*.INI,WIMP,0,TEAM NAME WIMN=%WIMP%|PATH Y:\%WIMN%\%WIMN%
回复

使用道具 举报

56#
发表于 2012-3-27 11:25:55 | 显示全部楼层
2012abc19701:
请教一个问题:
能不能定义一个变量,里面保存的是空格的个数,方便输出的对齐。
想得到的效果:
abc (这里10各空格)      12345
abcdefg (这里6各空格)  56789
回复

使用道具 举报

57#
发表于 2012-3-27 18:57:24 | 显示全部楼层
原帖由 2012abc19701 于 2012-3-27 14:48 发表

//方法1:
ENVI$  SP10=*10 0x20   //10个空格
ENVI$    SP6=*6  0x20   //6个空格

//方法2:
ENVI  N=10
ENVI$  SP10=*%N% 0x20   //10个空格
ENVI  N=6
ENVI$  SP6=*%N% 0x20   //6个空格

//方法 ...

就是这样!你的方法真好,谢谢。
回复

使用道具 举报

58#
发表于 2012-3-28 22:03:45 | 显示全部楼层
PECMD制作小工具挺好的。但是有个缺点,就是设计界面太麻烦了。
楼主啥时候有空的话,能不能设计一个可视化的PECMD界面设计辅助工具?
论坛里有个类似的工具: 【2009.09.20更新】菜鸟第一帖:PECMD专用记事本
不过,这个工具只是第一次设计是可视化的,设计完成后,也只能在脚本里调整了。
回复

使用道具 举报

59#
发表于 2012-3-31 16:53:54 | 显示全部楼层
在Win7、Win8下,用IFEX判断Windows目录里的文件是否存在,需要管理员权限?
测试文件aa.ini,内有如下命令:
ENVI SystemFile=%SystemDir%\system32\config\SYSTEM
IFEX %SystemFile%,MESS “%SystemFile%”文件存在。!MESS “%SystemFile%”文件不存在。
直接把aa.ini拉到PECMD上,显示文件不存在。
在管理员权限的CMD里,显示文件存在。

[ 本帖最后由 lmle 于 2012-3-31 22:55 编辑 ]
回复

使用道具 举报

60#
发表于 2012-3-31 23:13:34 | 显示全部楼层
我所提到的“不存在”指的就是“发现”。

在资源管理器中明明能看到的文件,它却说“不存在”,让人不好理解。

家里没有测试环境,明天到单位再试试U69_9。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-6-18 00:15

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表