swigger’s BLOG

醉卧沙场君莫笑 古来征战几人回
RSS icon Email icon Home icon
  • 透明窗口,连鼠标键盘事件也不接受,全透明

    Posted on 八月 1st, 2009 admin No comments

    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只支持部分自定义协议

    Posted on 七月 20th, 2009 admin No comments

    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不能禁用的一些服务

    Posted on 六月 3rd, 2009 admin No comments

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

    其它待补充。

  • masm造weak symbol

    Posted on 四月 24th, 2009 admin No comments

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

    alias <sym2> = <sym1>

    这次是在这里搜到的:

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

  • php和mysql支持utf8

    Posted on 四月 15th, 2009 admin 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 admin No comments

    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, &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);

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

    Posted on 四月 4th, 2009 admin No comments

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

    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 admin 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+了:

    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自动运行的一种暴力方式

    Posted on 三月 13th, 2009 admin 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 admin No comments

    有些东西,知道的发现它很简单,不知道的无从下手。这不就是一例。

    想把一台linux加入到域中,网上记录倒是不少,但是都有个公共的特点,一开始就要输入域控制器和域里的kerberos服务器IP。在windows下,入域很简单,根本不用知道什么IP,在机器名那里改改就进去了。如果整个域是自己做的,那自然知道域控的IP。但如果不是自己做的,是在已经做好的环境如公司里,咋办呢?

    事实上,windows能找到,说明事情是有解的,只是解该怎样找的问题。搜了一圈也终于找到了,答案很简单,那就是微软有个nltest.exe的小工具,下回来运行一下就搞定了:

    用:
    nltest /DCLIST:DOMAINNAME        
    取得域里的控制器列表。它还会列入主域控制器(PDC)


    nltest /DSGETDC:DOMAINNAME  /KDC
    可以得到kerberos的IP。这就终于可以进行下面的尝试了。

    微软的工具是个安装包,我把文件提出来后压缩上传了,可点此处下载。