宽带连接不见了

囧,把Remote Access Connection Manager的image path从svchost.exe改成svchost1.exe后,(已经把svchost.exe copy一份到svchost1.exe) , 宽带连接就不见了。

还能创建宽带拨号连接,但不能和之前创建的重名,创建后也看不到。

查了不少时间,才想起做了这一改动,改回去重启,果然又出现了。

微软真搞笑,还有检查这一名字的。

同时发现,创建的这些宽带拨号连接,都保存在 C:\Documents and Settings\All Users\Application Data\Microsoft\Network\Connections\Pbk 下的 rasphone.pbk 里。而不是在注册表。

发表在 软件使用 | 留下评论

透明窗口,连鼠标键盘事件也不接受,全透明

windows的透明窗口,如果设置了LWA_ALPHA和WS_EX_TRANSPARENT,就会连鼠标键盘事件也给透明过去,这个功能还不错。可以在屏上显示水印。

关键代码:

SetWindowLong(m_hWnd, GWL_EXSTYLE, WS_EX_LAYERED|WS_EX_TRANSPARENT|WS_EX_TOPMOST);
 SetLayeredWindowAttributes(m_hWnd, RGB(0,0,0), 120, LWA_ALPHA);
 SetWindowPos(m_hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE|SWP_SHOWWINDOW);

demo代码:

static LRESULT WINAPI UIWndProcBase(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
 if (msg == WM_PAINT)
 {
  PAINTSTRUCT ps;
  BeginPaint(hWnd, &ps);
  //OnPaint(ps.hdc);
  EndPaint(hWnd, &ps);
 }
 else if (msg == WM_DESTROY)
 {
  PostQuitMessage(0);
 }
 return DefWindowProc(hWnd, msg, wParam, lParam);
}
 
void UIRun()
{
 WNDCLASSEX wc = {sizeof(wc)};
 wc.hInstance     = GetModuleHandle(0);
 wc.lpszClassName = _T("uiclassname");
 wc.lpfnWndProc   = &UIWndProcBase;
 wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
 RegisterClassEx(&wc);
 wstring ws = L"aaabbcd";
 HWND hParent = CreateWindowExW(WS_EX_TRANSPARENT, _T("EDIT"), _T(""),  WS_POPUP, 0, 0, 100, 100, 0, NULL, wc.hInstance, NULL);
 HWND m_hWnd = CreateWindowEx(0, wc.lpszClassName, ws.c_str(),  WS_POPUP, 0, 0, 100, 100,
  hParent, NULL, wc.hInstance, NULL);
 
 SetWindowLong(m_hWnd, GWL_EXSTYLE, WS_EX_LAYERED|WS_EX_TRANSPARENT|WS_EX_TOPMOST);
 SetLayeredWindowAttributes(m_hWnd, RGB(0,0,0), 120, LWA_ALPHA);
 SetWindowPos(m_hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE|SWP_SHOWWINDOW);
 
 MSG msg;
 while (GetMessage(&msg, 0, 0, 0))
 {
  TranslateMessage(&msg);
  DispatchMessage(&msg);
 }
}
 
int main()
{
 UIRun();
 
 return 0;
}
发表在 开发 | 留下评论

flash只支持部分自定义协议

IE支持一种Asynchronous Pluggable Protocols的格式,然而,flash不能处理通过这种方式定义的自定义协议,在flash.ocx中有一份列表,列表外的自定义协议是不能用的,包括res协议,不能用。

 
0374675E <>/$ 55             PUSH EBP
0374675F   |. 8BEC           MOV EBP,ESP
03746761   |. 83EC 2C        SUB ESP,2C
03746764   |. A1 D0449B03    MOV EAX,DWORD PTR DS:[39B44D0]
03746769   |. 33C5           XOR EAX,EBP
0374676B   |. 8945 FC        MOV DWORD PTR SS:[EBP-4],EAX
0374676E   |. 53             PUSH EBX
0374676F   |. 8B5D 0C        MOV EBX,DWORD PTR SS:[EBP+C]
03746772   |. 56             PUSH ESI
03746773   |. 8B75 08        MOV ESI,DWORD PTR SS:[EBP+8]
03746776   |. 57             PUSH EDI
03746777   |. 8BCB           MOV ECX,EBX
03746779   |. 895D E4        MOV DWORD PTR SS:[EBP-1C],EBX
0374677C   |. E8 8D9EF0FF    CALL Flash10b.0365060E
03746781   |. 68 E0BD9103    PUSH Flash10b.0391BDE0           ;  ASCII "http://"
03746786   |. 56             PUSH ESI
03746787   |. E8 7085F2FF    CALL <Flash10b.lead_cmp>
0374678C   |. 59             POP ECX
0374678D   |. 59             POP ECX
0374678E   |. 85C0           TEST EAX,EAX
03746790   |. 0F85 82020000  JNZ Flash10b.03746A18
03746796   |. 68 14BE9103    PUSH Flash10b.0391BE14           ;  ASCII "https://"
0374679B   |. 56             PUSH ESI
0374679C   |. E8 5B85F2FF    CALL <Flash10b.lead_cmp>
037467A1   |. 59             POP ECX
037467A2   |. 59             POP ECX
037467A3   |. 85C0           TEST EAX,EAX
037467A5   |. 0F85 6D020000  JNZ Flash10b.03746A18
037467AB   |. 68 70DD9103    PUSH Flash10b.0391DD70           ;  ASCII "ftp://"
037467B0   |. 56             PUSH ESI
037467B1   |. E8 4685F2FF    CALL <Flash10b.lead_cmp>
037467B6   |. 59             POP ECX
037467B7   |. 59             POP ECX
037467B8   |. 85C0           TEST EAX,EAX
037467BA   |. 0F85 58020000  JNZ Flash10b.03746A18
037467C0   |. BF 300D9203    MOV EDI,Flash10b.03920D30        ;  ASCII "file://"
037467C5   |. 57             PUSH EDI
037467C6   |. 56             PUSH ESI
037467C7   |. E8 3085F2FF    CALL <Flash10b.lead_cmp>
037467CC   |. 59             POP ECX
037467CD   |. 59             POP ECX
037467CE   |. 85C0           TEST EAX,EAX
037467D0   |. 0F85 42020000  JNZ Flash10b.03746A18
037467D6   |. 68 64349203    PUSH Flash10b.03923464           ;  ASCII "mk:@MSITStore:"
037467DB   |. 56             PUSH ESI
037467DC   |. E8 1B85F2FF    CALL <Flash10b.lead_cmp>
037467E1   |. 59             POP ECX
037467E2   |. 59             POP ECX
037467E3   |. 85C0           TEST EAX,EAX
037467E5   |. 0F85 2D020000  JNZ Flash10b.03746A18
037467EB   |. 68 5C349203    PUSH Flash10b.0392345C           ;  ASCII "Ms-its:"
037467F0   |. 56             PUSH ESI
037467F1   |. E8 0685F2FF    CALL <Flash10b.lead_cmp>
037467F6   |. 59             POP ECX
037467F7   |. 59             POP ECX
037467F8   |. 85C0           TEST EAX,EAX
037467FA   |. 0F85 18020000  JNZ Flash10b.03746A18
03746800   |. 68 54349203    PUSH Flash10b.03923454           ;  ASCII "mhtml:"
03746805   |. 56             PUSH ESI
03746806   |. E8 F184F2FF    CALL <Flash10b.lead_cmp>
0374680B   |. 59             POP ECX
0374680C   |. 59             POP ECX
0374680D   |. 85C0           TEST EAX,EAX
0374680F   |. 0F85 03020000  JNZ Flash10b.03746A18
03746815   |. 68 4C349203    PUSH Flash10b.0392344C           ;  ASCII "wmhtml:"
0374681A   |. 56             PUSH ESI
0374681B   |. E8 DC84F2FF    CALL <Flash10b.lead_cmp>
03746820   |. 59             POP ECX
03746821   |. 59             POP ECX
03746822   |. 85C0           TEST EAX,EAX
03746824   |. 0F85 EE010000  JNZ Flash10b.03746A18
0374682A   |. 68 3C349203    PUSH Flash10b.0392343C           ;  ASCII "vnd.ms.wmhtml:"
0374682F   |. 56             PUSH ESI
03746830   |. E8 C784F2FF    CALL <Flash10b.lead_cmp>
03746835   |. 59             POP ECX
03746836   |. 59             POP ECX
03746837   |. 85C0           TEST EAX,EAX
03746839   |. 0F85 D9010000  JNZ Flash10b.03746A18
0374683F   |. 68 34349203    PUSH Flash10b.03923434           ;  ASCII "etc:"
03746844   |. 56             PUSH ESI
03746845   |. E8 B284F2FF    CALL <Flash10b.lead_cmp>
0374684A   |. 59             POP ECX
0374684B   |. 59             POP ECX
0374684C   |. 85C0           TEST EAX,EAX
0374684E   |. 0F85 C4010000  JNZ Flash10b.03746A18
03746854   |. 68 E01A9203    PUSH Flash10b.03921AE0           ;  ASCII "ms-help:"
03746859   |. 56             PUSH ESI
0374685A   |. E8 9D84F2FF    CALL <Flash10b.lead_cmp>
0374685F   |. 59             POP ECX
03746860   |. 59             POP ECX
03746861   |. 85C0           TEST EAX,EAX
03746863   |. 0F85 AF010000  JNZ Flash10b.03746A18
03746869   |. 68 2C349203    PUSH Flash10b.0392342C           ;  ASCII "hcp:"
0374686E   |. 56             PUSH ESI
0374686F   |. E8 8884F2FF    CALL <Flash10b.lead_cmp>
03746874   |. 59             POP ECX
03746875   |. 59             POP ECX
03746876   |. 85C0           TEST EAX,EAX
03746878   |. 0F85 9A010000  JNZ Flash10b.03746A18
0374687E   |. 68 20349203    PUSH Flash10b.03923420           ;  ASCII "msencdata:"
03746883   |. 56             PUSH ESI
03746884   |. E8 7384F2FF    CALL <Flash10b.lead_cmp>
03746889   |. 59             POP ECX
0374688A   |. 59             POP ECX
0374688B   |. 85C0           TEST EAX,EAX
0374688D   |. 0F85 85010000  JNZ Flash10b.03746A18
发表在 未分类 | 留下评论

XP不能禁用的一些服务

TCP/IP NetBIOS Helper : 访问其它机器的共享所需要。

dcom server process launcher:  some programs need it.

其它待补充。

发表在 未分类 | 留下评论

masm造weak symbol

masm或ml.exe可以用alias造weak external symbol,这样可以起到链接时有就选用户提供的,无就选系统默认的这样一个功能。这个语法很简单,但不好找。以前找了又忘了,特记下:

alias <sym2> = <sym1>

这次是在这里搜到的:

http://rs1.szif.hu/~tomcat/win32/win32asm.txt

发表在 开发 | 留下评论

php和mysql支持utf8

老生常谈了,网上很多文,我再多写一篇!

1. my.cnf里加上:
[client]
default-character-set=utf8

[mysqld]
character_set_server=utf8

重启mysqld,连上去看看:

mysql&gt; 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里也要改,写个函数:

 
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

setacl在处理注册表时有问题,写得不对。修改如下:

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, &amp;hOpenStd);
 
        // We now know the key exists. Let's try some black magic and open it like a backup program
-       if (hOpenStd &amp;&amp; (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 &amp;&amp; nErrTmp == ERROR_SUCCESS)
                {
                        *hSubKey                =       hOpenBckp;
+                       m_nAPIError = ERROR_SUCCESS;
 
                        // The standard key is not needed
                        RegCloseKey (hOpenStd);

新exe在这里.

设置注册表权限方法:

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扫硬盘时可以从某个位置开始

hdtune扫硬盘坏道,很慢。为了让它可以从某个位置开始,调了一下:

004089F5                            . 57                      PUSH EDI                                 ; /lParam
004089F6 &lt;blockpos&gt;                 . 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+

不知为何,给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+了:

  1. 去掉光驱和虚拟光驱里的光盘或映象。保证第2步不会被系统自动找回dll
  2. 删 C:\WINDOWS\system32\dllcache\clbcatq.dll
  3. 重命令 C:\WINDOWS\system32\clbcatq.dll 为其它名如 ~clbcatq.dll
  4. 删 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\COM3 键
  5. 重启系统
  6. 删目录 c:\windows\Registration
  7. 复制 c:\windows\inf\sysoc.inf 到 c:\sysoc.inf,打开c:\sysoc.inf,找到com=那一行,去掉hide字样
  8. 运行命令: sysocmgr /y /i:C:\sysoc.inf ,可以看到com+并发现已经被勾选。直接点下一步安装com+。安装成功。
  9. 运行dcomcnfg检查是否真的成功。
  10. 重启系统。

OK, 这样com+就正常了,iis也能正常安装了。

发表在 日经 | 留下评论

关windows自动运行的一种暴力方式

关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”

发表在 软件使用 | 留下评论