-
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个为第一行最后一个,依此类推。


