| Profilo di William撒旦的天堂FotoBlogElenchi | Guida |
|
撒旦的天堂09/07/2007 windows xp文件系统过滤驱动入门时间过得飞快,07年也已经过了一大半了。
更新一下这个space:)。
写了个关于文件系统过滤驱动程序的入门教程。对一个新手来说,如何入门,才是最重要的。
希望这篇教程能帮到一些人。
文档在google上:
http://docs.google.com/Doc?id=acbdkvhw9w8s_23fqn983
因为这里不能上传文档,所以暂不提供代码。需要的可发mail或留言索取。 31/10/2006 NTEmacs中文设置终于为emacs找到了一个比较好的中文设置,中文使用雅黑字体,英文使用Courier New字体。
(setq w32-charset-info-alist (create-fontset-from-fontset-spec (set-default-font "fontset-williamx") (setq default-frame-alist
这是一个简单的设置,还有一些字体没有列出,需要注意的是,gb2312需要设置为iso10646-1,而 不是gb2312。 25/10/2006 SVN 快速起步万事开头难,因为拿到一个新的东西,不知道从何入手,一旦入门就会发现,其实事情并非如想象中的那么复杂。 在http://subversion.tigris.org/servlets/ProjectDocumentList?folderID=91下载svn安装程序。安装完成之后,svn会自动添加到环境变量之中,你可以在任何CMD中运行svn的程序。 首先,创建一个仓库。 svnadmin create d:/svnrepos 执行上面的命令,会在D盘创建一个svnrepos的目录,用来作为svn的仓库。 然后,导入一个工程到这个仓库中。作为简单的起点,这里不考虑工程在仓库中的结构,比如trunk、branch等等的存储位置。这方面的深入了解,可以参考帮助文件。 svn import . file:///d:/svnrepos --message 'initial' 执行上面的命令,会把当前目录中的文件导入到仓库中。需要注意的是,如果message中有空格的话,需要使用" "。 最后,可以启动snv服务,来支持svn://协议。 svnserve -d -r d:\ 在TortoiseSVN中,可以使用svn://svn_server_name_or_ip/svnrepos来访问仓库。 29/09/2006 Remote Debug Native Codes With Visual Studio 2003.netVisual Studio 2003.net提供了三种方法来进行远程调试:DCOM,TCPIP,和PIPE。后两种只能调试Native Codes——我一般也只处理Native Code,虽然我还是有点怀疑,我是否已经正确理解了"Native"在这里的含义。 我一般使用PIPE模式,因为简单:PIPE是MSVCMON.exe启动后默认的模式,无需指定任何的参数,在桌面上创建快捷方式之后,我只需要双击就可以了。但是简单的往往不强大——我遇到问题了。 在另一台所谓target电脑上,我只是把Visual Studio 2003中的Debugger目录复制了过去,没有使用Visual Studio 2003的安装盘来安装Debug Tools。在Debugger目录中有两个可执行文件,ManagedDbgCA.exe,就名字来看,是受控代码的调试工具,需要.Net Framework v1.1.4322、v1.1.3705才可以运行,bypass。另一个就是msvcmon.exe。 结果msvcmon.exe不行,host上的visual studio 2003无法连接上。一开始怀疑是网络的问题,但检查下来都是好的,也不是防火墙的问题。 几经研究,猜想可能是权限的问题。在微软的网站上果然发现msvcmon.exe的使用需要有调试权限,即用户需要加入到"Debug Group"组中才可以。但是因为我是直接复制Debugger目录,没有安装,没有"Debug Group"。 最后研究msvcmon.exe /?的显示信息发现,-anyuser可以让任何能够连接上的用户进行调试。但是微软网站上说这个设置只针对tcpip模式,经过测试,也确实如此。 至此,这个问题算是有了一个确定的结果。 msvcmon.bat: msvcmon.exe -tcpip -timeout -1 -anyuser 27/08/2006 windbg on 1394Softice是一个非常fantastic的调试工具,但是在windows xp上面,我受够了。我不知道在其他的操作系统上怎么样,但是在windows xp上面,非常不稳定——我是说调试驱动。大概也只有在做crack的时候我才想用它——在试过ida和ollydbg还搞不定的时候。 很早以前我就想试试微软出品的、免费的调试器:kb和windbg,因为自己的本本没有1394和com接口,一直没有机会。这次机会来了了——我的驱动遇到一个让人抓狂的问题:'(。而一旦把softice启动之后,自动测试程序就工作不正常了。 网上很多人都说有遇到过1394无法稳定工作的问题、各式各样的问题;还好,可能是看我初学的缘故,买来的一个不知道什么牌子的carbus的1394卡和其自带的cable,工作以来还没有什么特别的状况。整个过程,除了反应有一点点慢,下断点的时候常常下错状态和位置之外,其他一切正常。特别是加载了symbols之后,整个过程变得非常清晰友好。以后就真的可以把softice供起来了。:) 双击通过1394互连的时候,可以看到网络的带宽有400M。虽然感觉实际调试的时候绝对没有那么快,但是看宣传,比COM口不知道要快多少。一份ppt文档上说,通过COM口dump 128M的内存,需要2-3个小时,1394只需要10秒钟。 通过1394的调试功能还在逐渐加强中,这个和USB应该是以后的双机调试协议的重点了。虽然花费了一个双休日,但是还是“物有所值”的!:D Writer beta之前的两篇是用opera写的,还是有点遗憾:没有换行。 下了一个Windows Live Writer,虽然还是beta版本,先试一下下。:) 23/08/2006 程序、用户和安全http://blogs.msdn.com/oldnewthing/archive/2006/08/18/705957.aspx
在争论一些程序和用户的问题。
现在的操作系统,安全授权都是对于用户而非程序,这就是问题所在。对于绝大多数的用户,甚至是一些专业的用户,无法知道系统中到底运行了哪些程序和各自的作用。
系统设计成用户有权启动和停止程序的运行,但是程序的启动和运行却并不都需要取得用户的授权。现在大多数的防火墙已经都具有“程序权限”的概念了,用户可以很明确的授权程序访问网络,或者拒绝。但是操作系统还没有这样的功能。
如果操作系统从对用户授权转变到对程序授权,整个计算机世界的安全会有很大的改善。用户从被授权者转变为授权者,可以很明确的了解系统中运行了多少用户程序以及各自的作用。
现代的操作系统,对运行在内存中的代码已经有了严格的区分。用户的代码无法越界破坏系统代码,而且,各个程序都有自己的独立的地址空间,理论上各不影响,这很好。但是,对于存储在硬盘上的二进制文件,系统却没有提供这样的保护。所以当用户运行了病毒程序,系统就会被破坏。
而事实上,用户程序根本没有非要写入或删除系统分区中的任何文件的必要。如果把删除系统文件的权利授予用户,该用户的任何程序都可以删除系统文件;而如果让系统或用户把权利授予某个程序,则可以有效地阻止有意或无意的破坏。
这样做的同时,也可以提高对软件破解的门槛。 10/08/2006 Subversion今天想试一下subversion,先下载了TortoiseSVN,再想下载svn server的时候,它的官方网站http://subversion.tigris.org怎么也连不上。不过发现本地使用的时候,没有svn server,也工作得挺好的。除了svn://xxx这样的地址TortoiseSVN无法认识和密码没有用处之外,其他看起来一切正常。
还没有深入研究,也许过几天可以在我的本本上装一个,取代vss。
P.S.:对我,它们的区别主要是集成了TortoiseSVN之后的文件夹图标比较漂亮!:P 26/05/2006 Render引起filters无法进入running状态如果一个render没有接收到数据,将无法进入running。由于graph中,filter的状态改变的顺序是从下游往上游进行,所以会导致所有的filter都无法进入running。
如果filter的deliver函数和running状态做了同步(其实两个同步应该是分开的),就会进入死锁。此时也无法正常停止整个graph,除非自上而下传递EndOfStream event,这时Filter的Stop函数将会被直接调用,而Pause函数则会被跳过。
但一个问题是,filter/graph的stream time只有在running之后才会被初始化,这会导致任何在running之前对CBaseFilter::StreamTime的调用都没有意义。 25/05/2006 Windows Live Message and Look 'n' Stop in LANSince I switched to lns from skynet firewall, wlm could not login in. At beginning, I created a rule to enable all packets passed when wlm started. For I thought this rule is only for wlm, but I realized that's wrong---- It works for all after wlm started. So, I started to trace the logs. The only blocked packets are on this rule: [CODE]ICMP : All ICMP types (nukes, ...)[/CODE] A ICMP from gateway with Type 3, code 4. Though I did not know exactly what the packet do, but should pass it for wlm. The rule could just above the rule : ICMP : All ICMP types (nukes, ...). 25/04/2006 The first step for developing driver驱动程序包含两方面的含义:
一个驱动首先要把它安装到系统中,但是wdm是分层的,那么首先就需要考虑如何安装到正确的层级。 如果inf文件不对,也就无从验证sys正确与否。
明白我的意思? 18/03/2006 sscanf函数keywords: %[a-z] sscanf delimit
很久以前,我以为c没有自己的split string函数,后来我发现了sscanf;一直以来,我以为sscanf只能以空格来界定字符串,现在我发现我错了。
sscanf是一个运行时函数,原形很简单:
int sscanf(
const char *buffer, const char *format [, argument ] ... ); 它强大的功能体现在对format的支持上。 我以前用它来分隔类似这样的字符串2006:03:18:
int a, b, c;
sscanf("2006:03:18", "%d:%d:%d", a, b, c);
以及2006:03:18 - 2006:04:18:
char sztime1[16] = "", sztime2[16] = "";
sscanf("2006:03:18 - 2006:04:18", "%s - %s", sztime1, sztime2);
但是后来,我需要处理2006:03:18-2006:04:18
仅仅是取消了‘-’两边的空格,却打破了%s对字符串的界定。
我需要重新设计一个函数来处理这样的情况?这并不复杂,但是,为了使所有的代码都有统一的风格,我需要改动很多地方,把已有的sscanf替换成我自己的分割函数。我以为我肯定需要这样做,并伴随着对sscanf的强烈不满而入睡;一觉醒来,发现其实不必。
format-type中有%[]这样的type field。如果读取的字符串,不是以空格来分隔的话,就可以使用%[]。
%[]类似于一个正则表达式。[a-z]表示读取a-z的所有字符,[^a-z]表示读取除a-z以外的所有字符。
所以那个问题也就迎刃而解了:
sscanf("2006:03:18 - 2006:04:18", "%[0-9,:] - %[0-9,:]", sztime1, sztime2); 01/03/2006 BDA驱动filter无法和network provider连接的问题网友写了个BDA的驱动,看似什么都没有问题,但就是连不起来
其实,有时候问题很简单,微软提供的那些network provider,都需要首先submit一个tune request,然后才可以和tuner连接。
特别是在graphedit中。 28/02/2006 一些软件的office插件Dr.eye 6.0的word工具条
注册:
regsvr32 F:\Inventec\Dreye\DreyeMT\DreyeWdAddin.dll
反注册:
regsvr32 -U F:\Inventec\Dreye\DreyeMT\DreyeWdAddin.dll Acrobat7.0的office插件
注册:
regsvr32 F:\Inventec\Dreye\DreyeMT\DreyeWdAddin.dll
反注册:
regsvr32 -U F:\Inventec\Dreye\DreyeMT\DreyeWdAddin.dll
08/02/2006 在纯英文系统下打开包含中文路径的文件纯英文系统下很多软件无法打开路径中包含non-ascii字符的文件,需要更改控制面板中的"Language for non-Unicode programs"设置才可以。
但是,解决这一问题,其实只需要一个很简单的技巧,但是不知道为什么还是有很多知名的软件不支持这个功能。比如Adobe Acrobat,我相信Adobe的其他软件也存在这个问题。
当一个软件使用UNICODE编译的时候,这个问题就迎刃而解。但是由于历史问题,很多软件如果完全的按照UNICODE来编译,成本太大。一些软件,可以很完美的显示中文,但是却无法直接打开文件名中包含中文的文件。
下面的代码可以很好的运行在ANSI版本的程序中,结合MultiBytetoWideChar等函数,可以很快地解决这个功能。
VOID OpenFileName(HWND hwnd)
{ OPENFILENAMEW ofn; // common dialog box structure WCHAR szFile[260]; // buffer for file name HANDLE hf; // file handle // Initialize OPENFILENAME
ZeroMemory(&ofn, sizeof(ofn)); ofn.lStructSize = sizeof(ofn); ofn.hwndOwner = hwnd; ofn.lpstrFile = szFile; // // Set lpstrFile[0] to '\0' so that GetOpenFileName does not // use the contents of szFile to initialize itself. // ofn.lpstrFile[0] = '\0'; ofn.nMaxFile = sizeof(szFile); ofn.lpstrFilter = L"All\0*.*\0Text\0*.TXT\0"; ofn.nFilterIndex = 1; ofn.lpstrFileTitle = NULL; ofn.nMaxFileTitle = 0; ofn.lpstrInitialDir = NULL; ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST; // Display the Open dialog box.
if (GetOpenFileNameW(&ofn)==TRUE)
hf = CreateFileW(ofn.lpstrFile, GENERIC_READ, 0, (LPSECURITY_ATTRIBUTES) NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, (HANDLE) NULL); } 24/01/2006 软件的国际化中国的软件商,在国际化这一块是比较失败的。
在IM的战场上,腾讯QQ一直处在防守的状态:防守中国大陆市场。之所以这么说,是因为,虽然QQ有一个英文的版本,但是在纯英文的系统下,无法正常的显示中文消息和中文昵称。反观微软,MSN Messenger的中文版一本与英文版同时出现,并且,哪怕是英文版,亦可以正常的显示中文。客户,就在不知不觉中流失。
另一个让人惋惜的软件,是“天网防火墙”。在英文系统下,有一半的中文可以正常显示,却一直没有推出一个国际化的版本,甚至一直没有推出一个可以在英文系统中正常显示的中文版本。这种现状,不能不叫人扼腕。
除了这两个软件,还有Dr.eye,一个来自台湾的非常优秀的翻译软件,也许是出于某种商业控制的策略,国际化做得也是比较失败的。
从ANSI转到UNICODE,会有这么麻烦吗?是技术上的不敢动,还是商业上的不能动?或者仅仅只是思想上的不想动?
无论是哪一种,失败是必然的!
虽然说,只有是民族的,才是世界的。但是这句话不能孤立地看。在当今,如果无法成为世界的,恐怕在民族中,亦无立足之地。 10/01/2006 tuning space和graphedit在graphedit中使用DVB-T BDA的graph时,有时会出现保存的graph再打开时DVBT network provider是断开的,必须submit request一下才可以连接上。而且,这种情况下,有时还无法tune台,driver收不到任何的命令。
经过测试,发现network provider的tuning spaces中必须要有一个的UniqueName叫做“DVB-T”的,否则就会出现上述的情况。
这个问题只在graphedit中会出现。
这应该是微软的问题了。 09/01/2006 winxp x64和winxp x86双启动只需要使用CD引导到恢复控制台,然后复制i386下的 ntldr和ntdetect.com,无需运行FIXBOOT或FIXMBR命令,否则 反而无法解决故障。 winxp x64的文件可以引导winxp x86。 08/12/2005 emacs模拟VC的页面滚动VC下有两种滚动模式,一种叫做up up/down,使移动光标,当光标到达页面顶端的时候,滚动页面;一种是Scroll line up/down,光标所在的绝对行和列不变,滚动页面。
Emacs下有第一种滚动方式,但是第二种滚动方式一直没有找到。于是自己写了两个函数,来实现这个功能,以方便边浏览边编辑代码的操作。
(defun hold-line-scroll-up()
"Scroll the page with the cursor in the same line" (interactive) (let ((next-screen-context-lines (count-lines (window-start) (window-end) ) )) (scroll-up) )) (defun hold-line-scroll-down()
"Scroll the page with the cursor in the same line" (interactive) (let ((next-screen-context-lines (count-lines (window-start) (window-end) ) )) (scroll-down) )) ; define the key binding
(global-set-key (kbd "M-n") 'hold-line-scroll-up) (global-set-key (kbd "M-p") 'hold-line-scroll-down) 14/11/2005 Recent Projects in Visua Studio几天前开始,我的visual studio c++ 2003启动的时候变得非常的慢,这是以前都没有出现过的问题。我disable了所有的plugins还是一样,眼见已经启动完了,整个程序却hung在那里不动了。虽然过个几十秒,也可以正常启动,但是非常不方便,不敢随便的启动新的工程。
今天发誓一定要找出这个原因。filemon, regmon都用上了,发现没有什么异常的,既没有读写大量的文件,也没有访问注册表,只是停在那里。没准是访问了网络?
打开防火墙的log,发现有一个程序在访问192.168.0.33,是公司电脑的ip。难道是在查找其上的工程?打开regedit,定位到HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\7.1\ProjectMRUList和HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\7.1\FileMRUList,发现其中果然有几个工程和文件实在33的电脑上的。删除之后一切OK。 10/11/2005 汇编、C及其他C,C++和java合作完成了一个程序,交给机器语言测试。
这日,汇编和C在一起喝酒,席间汇编接到机器语言打来电话说程序宕机,汇编瞥了一眼传过来的代码,对C说:靠,你们写的程序,都是垃圾。C涨红了脸,默不作声,把喝得醉醺醺的汇编扶回了办公室。
从汇编办公室出来的C遇上了正赶去吃饭的C++,于是哼了一声,挥着手中打印出来的代码说:丫的,你们写的什么代码?全都是垃圾。C++赔着笑容,结果代码,让过打着饱嗝的C,下楼吃饭。
极度不爽的C++边吃边看代码,吃了一半,扔下筷子,掏出手机,拨了个电话到java的办公桌,把java训了一顿,最后撂下一句:看看你写的,尽是些垃圾。
java扔下电话,又羞又怒,胸中一口恶气涌出,一不小心喷了一显示屏面包渣。但见他略作镇定,扯下键盘,闯进机器语言的办公室。只听一阵&*$%^@#之后,java提了半个键盘从办公室里出来,嘴里嘟哝着:叫你丫宕机。 03/11/2005 DWORD and BYTES(strings)在C/C++中,有一些转换是隐式发生的。类型之间的转换各个地方都已经有过很多的讨论,现在来看看一个晦涩的转换。
int main(int argc, char* argv[]){ DWORD test = (DWORD)"\x00\x00\x01\xBA"; return 0;} 现在来看看test的值。
我们知道,编译器会为DWORD test;在栈上分配一个地址,比如0x0012FDE4,根据其类型,拥有4个BYTE的地址空间,内容可能是cc cc cc cc。
当我们对test变量赋一个整数值得时候,比如:
test = 0x000001BA;
0x0012FDE4的内容变为 BA 01 00 00 (PC字节序)。这是我们一般意义上的复制,也是我们需要的结果。但是如果:
test = "\x00\x00\x01\xBA";
这样的赋值,只能说不太符合C的传统。
此时,0x0012FFE4的内容并不是该字符串30 30 30 30 30 31 42 41(溢出,不是吗?不过这不是现在的重点)。而是如d4 40 42 00这样的数字。这个0x004240D4是怎么来的呢?
我们猜测一下,字节串"\x00\x00\x01\xBA"在编译的时候,需要分配地址,其地址就是0x004240D4。是不是呢?其实很好验证。如果你有IDA,很容易就能看到该字符串的地址正是0x004240D4;或是查看汇编代码:
17: DWORD test = (DWORD)"\x00\x00\x01\xBA"; 00411A6E mov dword ptr [test],offset string "\0\0\x01\xba" (4240D4h) 所以,把一个字符串赋给一个整型变量,传递的是该字符串的指针,而非字符串本身。其实,这在编译的时候,是会有warning的,只要注意一下,就会明白。
这虽然不是一种好的编程方式,但也不是一无是处,主要是可以用来消除字节序的问题。
01/11/2005 让其他程序拥有emacs的快捷键自从使用了emacs之后,对他的快捷键(键绑定)非常的认同,但是windows下的很多程序都无法自定义快捷键,即使可以,要把快捷键改成和emacs的一样的功能,更多时候也是impossiable mission。
现在我使用xkeymacs http://www.cam.hi-ho.ne.jp/oishi/indexen.html,一款来自日本的小工具。通过它,可以让大部分的windows程序拥有部分的emacs的键绑定。特别是Visual Studio。
Visual Studio的自定义快捷键很强大,但是很多功能还是无法实现,比如C-space定义块的开始点这样的功能,使用xkeymacs可以轻松搞定。
不过,并不是所有的设置都是有效的,有些设置之后,会出一些莫名其妙的问题。 |
|
||
|
|