2005年4月5日
#
最近几天IE老是莫名其妙的弹出窗口,打开
www.henbang.net,让我很纳闷,因为我设置了广告拦截。回想上次的问题,怀疑又是某种IE控件在搞鬼,用dll列表工具察看一下,又看到一个陌生的家伙:hap.dll!看看属性,居然出现了henbang!小样儿,看我不灭了你!
regsvr32 /u hap.dll
del hap.dll
搞定!
唉,IE的漏洞简直是太。。。多了,不知道下次又会有什么玩艺出来。。。:-(
2005年3月31日
#
很多时候,我们要在嵌入式系统上实现比较多的功能,但是并不需要用到OS的支持。但是为了开发方便最后还是选择使用OS,例如linux,这样比较占存储器空间。实际上,不带OS的系统也可以很简单,只要认真的规划。
我的思想来自于PC,PC在引导OS之前,要执行BIOS程序,而且引导OS之后,很多对硬件的操作也是通过BIOS完成的。我将系统分成3个部分:Loader,Bios和App。
1. Loader。在嵌入式系统中,程序一般存储在flash上。nor flash里面可以直接运行程序,但是速度很慢。因此需要一段代码将程序主体(其实是BIOS)装载到RAM,然后运行。这个工作便由Loader完成。Loader只完成最基本的初始化,然后加载BIOS到RAM里运行。
2. Bios。类似PC,Bios进一部对系统进行初始化,然后装载App并运行。可以将常用外设支持过程放在Bios里,如串口,定时器等等。我的实现办法是将为每个设备定义一个结构,将常用的操作函数指针放在结构里,然后将所有的设备结构放在固定的地方,这样App就可以直接调用了。Bios的另外一大功能是实现程序的更新,即下载Loader,Bios和和App,并写入flash。Bios还有一个非常重要的功能就是管理中断,而且要留接口给App,以便App能处理对它特别的中断。Bios可以根据一定的条件,如某个端口的状态,从flash载入不同的App来运行,这样也节省了存储器空间。
3. App。App比较简单,对Bios已经支持的设备,可以直接通过指针来调用。这样可以只处理需要自己处理的东西。不同的功能可以用不同的App来实现。
2005年3月13日
#
在嵌入式系统中,经常需要接受用户输入或者选择。按键多的时候,一般采用现成的键盘扫描芯片来处理,如8279,而按键少的时候,则一般自己用I/O口做键盘扫描端口,这样便需要自己编写键盘扫描程序程序。
键盘扫描方式有两种,即交叉扫描和直接扫描,它们各有优点。在同样多I/O口的情况下,交叉扫描可以接比较多的键盘,但处理相对复杂一些,直接扫描可以接的键盘较少,但处理简单。
所谓交叉扫描,是将I/O口分成两组,分别做行和列,形成一个键盘矩阵。假设行为M个,列为N个,则可以提供MxN个按键,接法如下:

扫描每隔一段时间进行一次,例如50ms。扫描时,先将行作为输出,列作为输入。先在第一行输出L(低电平),其余行输出H(高电平),读取N个列的值,如果有L,则说明在则一列上有按键按下,那么将行变为输入,列变为输出,在该列输出L,其余列输出H,读出M行的值,哪一行为L则该行和该列交叉的按键被按下,这样便得到了按键的ID。按照这个方法,依次扫描到第M行,则所有按键都能被扫描到。在扫描过程中,如果有多行或者多列读出来的值为L,则说明有多个按键按下,因为每个按键都能被准确定位,因此每次只接受一个按键还是都接受可以按自己的需要处理。
所谓直接扫描,是每个端口直接接按键,不与其它端口交叉,因此有多少端口就可以接多少按键。接法如下:
跟交叉扫描一样,也是每隔一段时间扫描一次。扫描时,直接读取端口的值,如果某位为L,则表示对应的按键按下。
当然,不管是交叉扫描还是直接扫描,都有去抖动的问题,可以用软件来解决,如多次判断,或者加大扫描间隔,也可以用硬件来解决,如加RC网络。则要看自己的喜好和需要了。
还有一个问题就是重复按键的问题,即按住一个键一段时间后,可视为重复按键,这个也是根据需要通过软件的算法做到的。
2005年3月11日
#
呵呵,最近发现winroute也有防火墙产品!安装!
安装之后才发现,配置居然是通过web的方式!仔细看了看,功能绝对是用过的防火墙里最强的,可惜web方式反应太慢了!而且全部需要手动设置!这也太赶不上潮流了吧?除了非常专业的管理员,恐怕没有几个人能坚持用下来:(
还是回头说sygate。有一天往笔记本里拷贝文件,忽然发现速度好慢,大概也就1M/s的样子,这可不是100M网卡的作为呀,呵呵,再一看主机的CPU利用率,居然到了100%,sygate居然占到80%!晕!设置为allow all,速度有所提高,但是网络的带宽利用率居然还是只有40%,关闭sygate,大概能到70%的样子,唉,看来sygate的算法有点问题啊。。。
2004年12月18日
#
不知道什么时候起,养成了一种习惯,每次新装系统,装好必要软件,设定好系统的各项设置后,就用ghost做个备份,以便之后出现问题好恢复。
可是,想不到ghost居然是个分区杀手!
以前用win2000时,曾经碰到ghost之后启动某些硬盘会找不到,或者分区的名字丢失的现象,一直以为是IDE接口线的问题。最近开始用win2003,前几天做了个备份,结果启动的时候硬盘等一直亮着,启动了20分钟还没好,于是又以为是线的问题,便拆下来重新试试,结果把线给弄坏了,只好买条新的IDE接口线。可是装上之后现象依旧,于是怀疑是不是硬盘寿终正寝了。要真是坏了,那100G的电影岂不是白下了?心痛啊!
最后,想到用pqmagic在dos下看看硬盘到底是什么问题。呵呵,说到这里,又发生一个小插曲,pqmagic居然拒绝工作!说不能在server系统上运行!晕,明明启动的dos嘛!最后,拿掉那块硬盘到网上打算下载新版本的pqmagic,结果意外的发现不是版本的问题,而是它通过boot.ini识别到了server,只要改一下boot.ini就可以了:)
进入pqmagic,报告那块磁盘分区数据有错误,主分区上数据有CRC错误,唉,惨啊!难道真的磁盘坏了?先修复分区表再说,然后再检测其它分区数据有无问题,呵呵,居然没问题!看来只要主分区有问题,先格一下。。。还好主分区放的都是软件:)格完之后检查,居然也没有问题了!哈哈
PQ不愧是PQ啊,呵呵!
由此可以断定磁盘数据是被ghost破坏了!
可惜,PQ已经被symantec收购了。。。是不是该对symantec重新做个评价了。。。
2004年12月8日
#
我一向不大看电视,不过最近由于巧合,开始看CCTV1的这部片,片子讲述二战期间被俘虏到日本当劳工的中国人和韩国人的悲惨生活。
推荐大家有空都看看,我想看了之后,大家对日本这个民族的凶残本性一定会有更深的认识。
里面也反映出很多中国人自身的劣根性,值得深思。
时值中国跟日本不断发生各种摩擦的时候,央视放这么个节目,也许有一定的用意吧^_^
但愿历史不会重演。。。
广告一:
好像是麦当劳吧(要不就是肯德基)。一个女孩,同时跟两个男的约会,女孩坐在中间,右边的男的不断的拿出一些小零食给女的,很快女孩的头便靠在了他肩上。左边的男的很是眼红,忽然灵机一动,拿出了麦当劳的品种,女孩马上就投入了左边男孩的怀抱。
广告二:
天喔咖啡一刻。女的说“谁找到咖啡一刻,谁就是懂我的人”,结果很多男的开始献殷勤,有的拿来咖啡一客,有的拿来咖啡一克,有的拿来咖啡一颗。。。结果无一例外是被痛扁一顿,甚至被一拳打得飞到半空。后来一个终于找来天喔咖啡一刻,于是该女开心的品尝起来,最后。。。
疑问一:这就是现在的女孩子?
疑问二:这就是现在广告商的创意?
疑问三:这就是现在媒体的风格和导向?
疑问四:这就是广告管理机构的审查标准?
疑问五:很多广告都是播出后被禁,广告审查流程如何?
2004年11月16日
#
升级到了Win2k3,着实兴奋了一阵子,嘿嘿。
虽然玩windows算老鸟了,在应用中还是碰到了不少新问题:)今天就来说说IIS的问题。
Win2k3把IIS升级到了6.0,自然也加了不少新的特性,不过我的应用比较简单,只要能做个论坛就好了^_^
1.首先,到管理工具里找到“配置您的服务器向导”,添加IIS服务。(这也是Win2k3的一大改进之处了:配置方便)
2. 再到管理工具里运行“Internet信息服务管理器”,添加网站和虚拟目录,配置权限。如果是动态网页,必须手动打开扩展服务,在“Web服务扩展”那里根据自己的需要打开asp、isapi、cgi或者它们的组合。
3. 如果使用sygate防火墙,有个地方需要特别注意。如果虚拟目录下的网页有上载功能,则主目录一定要开放读取权限,而且sygate必须关掉”anti-IP spoofing”和”OS fingerprint”选项,否则当用户上载附件的时候会导致机器重新启动!
2004年11月13日
#
1. 不规则窗口和背景。用SetWindowRgn将窗口变成任意形状。源码网上很多地方都有。这里就不列出了。最好是配合背景图像,例如,在OnEraseBkgnd中作如下处理:
CRect rt;
GetClientRect(&rt);
pDC->DrawState(rt.TopLeft(),rt.Size(),hBkImg,DST_BITMAP);//hBkImg是背景位图句柄
return TRUE;
这样位图就拉伸到窗口客户区大小。如果要平铺,可用其它函数。
2.自定义非客户区的大小。只要响应WM_NCCALCSIZE消息,给出大小即可,如
void CXXDlg::OnNcCalcSize(BOOL bCalcValidRects, NCCALCSIZE_PARAMS FAR* lpncsp)
{
lpncsp->rgrc[0].top+=16; // add title bar by 16 pixels
CDialog::OnNcCalcSize(bCalcValidRects, lpncsp);
}
本功能配合下面的自定义窗口框架功能效果更好。
3.自定义窗口框架。在窗口非客户区重画的时候,自己绘制。如在WindowProc里做如下处理
if(message==WM_CAPTURECHANGED||message==WM_NCACTIVATE||message==WM_NCPAINT||
message==WM_INITMENUPOPUP){
CDialog::WindowProc(message,wParam,lParam);
DrawFrame();//画框架
bPressed=FALSE;
return 0;
}
当然,还有其它处理,如系统菜单和按钮的事件处理,只需要响应对应消息即可。另外,在有些系统中,当刚开始用鼠标拖动标题栏的时候,系统会自己重新绘制标题栏,这样破坏了自己绘制的样子。这时候只要处理wParam为0xF012的WM_SYSCOMMAND的消息,重新绘制即可。
4.让控件不遮住主窗口的背景。响应WM_CTLCOLOR,设置背景透明即可
HBRUSH CXXWinDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
pDC->SetBkMode(TRANSPARENT);
return ( HBRUSH )::GetStockObject( NULL_BRUSH );
}
当然,部分控件的背景不能简单的这样处理,需要自定义控件,如ListBox。
5.自定义不同控件或区域上的光标形状。响应WM_SETCURSOR,判断控件id并设置光标,如
BOOL CXXWinDlg::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
{
if(pWnd->GetDlgCtrlID()==IDC_SENT){
HCURSOR ret=::SetCursor(m_hCursor);//m_Cursor为自定义的光标
return TRUE;
}
else if(nHitTest==HTSYSMENU||nHitTest==HTCLOSE){
HCURSOR ret=::SetCursor(m_hCursor);
return TRUE;
}
return CDialog::OnSetCursor(pWnd, nHitTest, message);
}
附图是例子:
2004年11月12日
#
说Windows是用户量最大的操作系统我想没有人会反对。毕竟,少有人能抵挡它那友好界面的诱惑,我也不例外。
最近,把家里的电脑升级到了2003,却遇到一堆乱七八糟的问题。
先是MSN等利用SSL通信的软件大部分不能用,最后发现是安全证书的问题,这倒也不能怪Windows。
接着是系统事件记录里发现某个DCOM服务总是启动失败,仔细看,是word组件,于是用DCOM配置工具捣腾了半天,倒是弄好了
可是接下来发现IE不能打开超链接了!也不能启动新窗口打开!晕!网上查了一下资料,大都说什么病毒或者com组件没有注册,于是照着弄了一遍,还是不行!想想大概是配置DCOM的时候误操作了,于是只好又去配置DCOM,把权限要求降低,总算是ok了!
唉,难道易用性跟安全性就这么不共戴天?