swigger’s BLOG
醉卧沙场君莫笑 古来征战几人回-
XP不能禁用的一些服务
Posted on 六月 3rd, 2009 No commentsTCP/IP NetBIOS Helper : 访问其它机器的共享所需要。
其它待补充。
-
masm造weak symbol
Posted on 四月 24th, 2009 No commentsmasm或ml.exe可以用alias造weak external symbol,这样可以起到链接时有就选用户提供的,无就选系统默认的这样一个功能。这个语法很简单,但不好找。以前找了又忘了,特记下:
alias <sym2> = <sym1>
这次是在这里搜到的:
-
php和mysql支持utf8
Posted on 四月 15th, 2009 No comments老生常谈了,网上很多文,我再多写一篇!
1. my.cnf里加上:
[client]
default-character-set=utf8[mysqld]
default-character-set=utf8重启mysqld,连上去看看:
mysql> SHOW VARIABLES LIKE '%character%';SHOW VARIABLES LIKE 'collation%'; +--------------------------+----------------------------+ | Variable_name | Value | +--------------------------+----------------------------+ | character_set_client | utf8 | | character_set_connection | utf8 | | character_set_database | utf8 | | character_set_filesystem | binary | | character_set_results | utf8 | | character_set_server | utf8 | | character_set_system | utf8 | | character_sets_dir | /usr/share/mysql/charsets/ | +--------------------------+----------------------------+ 8 rows in set (0.00 sec) +----------------------+-----------------+ | Variable_name | Value | +----------------------+-----------------+ | collation_connection | utf8_general_ci | | collation_database | utf8_general_ci | | collation_server | utf8_general_ci | +----------------------+-----------------+ 3 rows in set (0.00 sec)2. php里也要改,写个函数:
<?php function connect_db($dbname) { global $mysql_addr, $mysql_user, $mysql_pass; $dbcon = mysql_connect($mysql_addr, $mysql_user, $mysql_pass); mysql_query("SET NAMES 'utf8'; SET CHARACTER_SET_CLIENT=utf8; " ."SET CHARACTER_SET_RESULTS=utf8; ", $dbcon); if ($dbname) { mysql_select_db($dbname, $dbcon); } return $dbcon; } ?>3. 数据库可以改一下:
alter database mydb CHARACTER SET ‘utf8′ ;
alter table tablename CHARACTER SET ‘utf8′;
不过这两句不会改内容,如果内容原来不是utf8的字节,就要导出导入了.
-
修改了一个setacl的BUG
Posted on 四月 7th, 2009 No commentssetacl在处理注册表时有问题,写得不对。修改如下:
csetacl.cpp:
--- CSetACL.cpp.old 2009-04-06 23:44:41.000000000 +0800 +++ CSetACL.cpp 2009-04-06 23:57:16.000000000 +0800 @@ -2288,7 +2288,7 @@ m_nAPIError = RegOpenKeyEx (hRemoteKey ? hRemoteKey : hMainKey, sSubkeyPath, 0, KEY_ENUMERATE_SUB_KEYS | KEY_EXECUTE, &hOpenStd); // We now know the key exists. Let's try some black magic and open it like a backup program - if (hOpenStd && (m_nAPIError == ERROR_SUCCESS || m_nAPIError == ERROR_ACCESS_DENIED)) + if (hOpenStd || m_nAPIError == ERROR_ACCESS_DENIED) { DWORD nNewCreated = 0; DWORD nErrTmp = 0; @@ -2307,6 +2307,7 @@ if (hOpenBckp && nErrTmp == ERROR_SUCCESS) { *hSubKey = hOpenBckp; + m_nAPIError = ERROR_SUCCESS; // The standard key is not needed RegCloseKey (hOpenStd);设置注册表权限方法:
setacl -ot reg -on HKEY_LOCAL_MACHINE\aaaa\hehe -rec yes -actn setowner -ownr n:Administrators -actn clear -clr dacl -actn setprot -op dacl:np
-
使hdtune扫硬盘时可以从某个位置开始
Posted on 四月 4th, 2009 No commentshdtune扫硬盘坏道,很慢。为了让它可以从某个位置开始,调了一下:
004089F5 . 57 PUSH EDI ; /lParam 004089F6 <blockpos> . 8B7C24 1C MOV EDI,DWORD PTR SS:[ESP+1C] ; | 004089FA . 8946 1A MOV DWORD PTR DS:[ESI+1A],EAX ; | 004089FD . 57 PUSH EDI ; |wParam 004089FE . 68 0E040000 PUSH 40E ; |Message = WM_USER+14. 00408A03 . 51 PUSH ECX ; |hWnd 00408A04 . FF15 FC964700 CALL DWORD PTR DS:[4796FC] ; \SendMessageA在 blockpos处,修改esp+1c里的值,就可以了。
总的来说,hdtune把硬盘分为很多个格子,每行50个,总共有很多行。每一个小格扫完后,就发送这个自定义的消息 WM_USER+14来通知主线程画一个色块。绿色表示无问题,红色表示有问题。运行到blockpos这一行时,把这个值改掉,即可定义到第n个格子。第0个为左上,第49个为第一行最后一个,依此类推。
-
重装com+
Posted on 三月 25th, 2009 No comments不知为何,给xp装iis发现装不了。装到一半安装界面死了,重启依旧。
换作普通人,此时只能重装系统了。没办法,谁让我是IT民工,拿出windbg慢慢调。发现创建一个com+对象时,进入NtRequestWaitReplyPort后死等了。猜是com+问题,好像我以前禁用过com+。
运行 dcomcnfg,其界面直接死掉。晕,再调,发现还是这个com+对象的问题,写段小程序验证,一样是死锁:
CoInitialize(0);
CLSID clsid;
CLSIDFromString(L”{182C40F0-32E4-11D0-818B-00A0C9231C29}”, &clsid);
MULTI_QI qi = {0};
qi.pIID = &IID_IUnknown;
CoCreateInstanceEx(clsid, 0, CLSCTX_LOCAL_SERVER, 0, 1, &qi);if (qi.pItf) qi.pItf->Release();
CoUninitialize();可见的确是com+问题。注册表中删掉这个clsid,发现dcomcnfg可以运行出界面了,但进入后有些操作还是报错。启动msdtc就报错。
用msdtc -resetlog 重置log后,msdtc服务(Distributed Transaction Coordinator)可以启动了。原因是我曾经删掉了C:\WINDOWS\system32\MsDtc下的LOG文件。微软真TM搞笑,没有了LOG你直接创建不行吗,还要像模像样的搞个命令行参数重置LOG。多此一举。
但恢复备分的clsid发现还是出错,只能重装com+了:
- 去掉光驱和虚拟光驱里的光盘或映象。保证第2步不会被系统自动找回dll
- 删 C:\WINDOWS\system32\dllcache\clbcatq.dll
- 重命令 C:\WINDOWS\system32\clbcatq.dll 为其它名如 ~clbcatq.dll
- 删 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\COM3 键
- 重启系统
- 删目录 c:\windows\Registration
- 复制 c:\windows\inf\sysoc.inf 到 c:\sysoc.inf,打开c:\sysoc.inf,找到com=那一行,去掉hide字样
- 运行命令: sysocmgr /y /i:C:\sysoc.inf ,可以看到com+并发现已经被勾选。直接点下一步安装com+。安装成功。
- 运行dcomcnfg检查是否真的成功。
- 重启系统。
OK, 这样com+就正常了,iis也能正常安装了。
-
关windows自动运行的一种暴力方式
Posted on 三月 13th, 2009 No comments关windows自动运行倒底有几种方法,我是说不清了。至少有一种是从组策略里关。不过这样关还不彻底,程序是不会自动运行了,但是右键菜单里还有,还会加载光驱的图标。不保险。
有一种暴力的方式是,直接让windows不去读取 autorun.ini, 这样光盘自定义的图标都不会显示出来,只显示默认光驱图标的。其原理是,利用windows已经有的重定向ini的技术,把ini重定向到注册表中的一个不存在的分支,从而破坏自动运行机制。
实现步骤:把以下内容存成 anti-autorun.reg ,导入到注册表即可。或者简单一点,直接点此下载运行。
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\IniFileMapping\autorun.inf]
@=”#USR:Software\\Microsoft\\Non_exist_node” -
识别域控制器
Posted on 三月 7th, 2009 No comments有些东西,知道的发现它很简单,不知道的无从下手。这不就是一例。
想把一台linux加入到域中,网上记录倒是不少,但是都有个公共的特点,一开始就要输入域控制器和域里的kerberos服务器IP。在windows下,入域很简单,根本不用知道什么IP,在机器名那里改改就进去了。如果整个域是自己做的,那自然知道域控的IP。但如果不是自己做的,是在已经做好的环境如公司里,咋办呢?
事实上,windows能找到,说明事情是有解的,只是解该怎样找的问题。搜了一圈也终于找到了,答案很简单,那就是微软有个nltest.exe的小工具,下回来运行一下就搞定了:
用:
nltest /DCLIST:DOMAINNAME
取得域里的控制器列表。它还会列入主域控制器(PDC)用
nltest /DSGETDC:DOMAINNAME /KDC
可以得到kerberos的IP。这就终于可以进行下面的尝试了。微软的工具是个安装包,我把文件提出来后压缩上传了,可点此处下载。
-
强制机器重启的一个办法
Posted on 三月 4th, 2009 No comments一个windows 服务器出现问题了。有些系统服务无法关掉。任务管理器打不开,procexp.exe打不开。无法关机,重启。包括 shutdown.exe 命令行。
看起来,不断电重启是没有办法了。机器不在身边,远在机房,要去跑一次不容易。只能去那边断电重启了吗?不是!
分析一下原因,是服务程序出了问题导致系统的关机前关闭服务的步骤出了问题。这个时候还能运行程序,能无程桌面,说明kernel是没有问题的。
所以,如果强制调用kernel的重启函数,不关闭任何程序和服务,就能重启。所以我写了一个程序,不通知任何程序关闭,直接调kernel重启,跟断电差不多!可能会有断电类似的数据问题。
点这里下载。 这个程序的原理就是直接调ZwShutdownSystem重启。一定要小心,管理员级别帐户不能随便双击,一双击立马黑屏重启。
-
升级到word press 2.7.1
Posted on 三月 4th, 2009 3 comments升级过程还算顺利。看了升级说明,说只要上传文件,执行/wp-admin/upgrade.php 就行了。我就想,这至少也要先发wp-config.php吧?后来才搞清楚。这里说的上传文件是覆盖式上传,这样原来的文件就都还在。
但这样做的话,就留下一大堆垃圾了。我比较了一下新的2.7.1和原来的目录的内容,把原来我加的文件copy了过来。不是我加的就不管了。然后运行,升级成功。回首页一看,惨了,一片空白。
因为想就着这个机会改一下theme,所以我没有copy theme过来,也许是这个原因吧。我把theme copy过去,果然行了。赶紧下个新的theme。设为新theme。OK,一切正常。最后把发表评论的那个图片验证码的逻辑小改了一下。默认这个图片验证码是在提交按钮下面的,移动一行解决。


