<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet href="/xsl/rss.xsl" type="text/xsl" media="screen"?>
<rss version="2.0" 
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:ppp="http://blog.sohu.com/rss/module/ppp/"
	>

	<channel>
		<title>Home Piggy</title>
		<link>http://itsais.blog.sohu.com/</link>
		<description><![CDATA[Home Piggy]]></description>
		<pubDate>Fri, 20 Oct 2006 17:21:10 +0800</pubDate>
		<generator>搜狐博客</generator>
		<ppp:ebi>404d894792</ppp:ebi>
		<image>
			<title>http://blog.sohu.com</title>
			<url>http://js.pp.sohu.com/ppp/blog/images/common/logo_150_60.gif</url>
			<link>http://blog.sohu.com/</link>
			<width>100</width>
			<height>43</height>
			<description>搜狐博客</description>
		</image>
		<item>
			<title>加菲猫语录集</title>
			<link>http://itsais.blog.sohu.com/17561385.html</link>
			<comments>http://itsais.blog.sohu.com/17561385.html#comment</comments>
			<dc:creator>Home Piggy</dc:creator>
			<pubDate>Fri, 20 Oct 2006 17:14:18 +0800</pubDate>
			<guid>http://itsais.blog.sohu.com/17561385.html</guid>
			<description><![CDATA[<font color="#000000">
<p><br />&ldquo;现在的梦想决定着你的将来&rdquo;，所以还是再睡一会吧。</p>
<p><br />--------------------------------------------------------------------------------</p>
<p><br />今天我要做俯卧撑！&hellip;&hellip;今天先俯卧，明天再撑。</p>
<p>&nbsp;</p>
<p>--------------------------------------------------------------------------------</p>
<p>真不愿意起来，尤其我还病了，可我还得带病坚持吃饭。</p>
<p>&nbsp;</p>
<p>--------------------------------------------------------------------------------</p>
<p>嘘&mdash;&mdash;千万不要告诉他们我做了好事，这会影响我的形象的！</p>
<p>&nbsp;</p>
<p><br />--------------------------------------------------------------------------------</p>
<p>肚子大不可怕，可怕的是肚子里没有好东西。</p>
<p>&nbsp;</p>
<p>或者说，没有好吃的东西很可怕。</p>
<p><br />--------------------------------------------------------------------------------</p>
<p>今天是元旦，我决定在新的一年里每天睡眠时间不超过8小时，这样的话，8乘以365除以24&hellip;&hellip;121.6天&hellip;&hellip;5月3日叫我起床！</p>
<p>&nbsp;</p>
<p>--------------------------------------------------------------------------------</p>
<p><br />我向星星许了个愿。我并不是真的相信它，但是反正也是免费的，而且也没有证据证明它不灵。</p>
<p>&nbsp;</p>
<p><br />--------------------------------------------------------------------------------</p>
<p><br />狗的问题就在于，它们身上没有装一个ON/OFF开关。</p>
<p>&nbsp;</p>
<p><br />--------------------------------------------------------------------------------</p>
<p><br />球状也是身材。</p>
<p>&nbsp;</p>
<p><br />--------------------------------------------------------------------------------</p>
<p><br />今后我永远不做对不起欧迪的事，&hellip;&hellip;也许，也许不是永远。</p>
<p>&nbsp;</p>
<p><br />--------------------------------------------------------------------------------</p>
<p><br />失败的人特点是会不断地失败。如果你想看看他的失败的话，他是不会让你失望的。</p>
<p>&nbsp;</p>
<p><br />--------------------------------------------------------------------------------</p>
<p>&ldquo;欧迪在窗外冻得瑟瑟发抖，真可怜。我真有点不忍心看他这样。不，难道我能坐视不管吗？我必须做点什么。&rdquo;加菲拉上了窗帘。</p>
<p>&nbsp;</p>
<p><br />--------------------------------------------------------------------------------</p>
<p>这个汉堡包的味道不错，但不如前八个好。</p>
<p>&nbsp;</p>
<p><br />--------------------------------------------------------------------------------</p>
<p>除了吃和睡，生命也许还有别的意义，不过我觉得没有就挺好。</p>
<p>&nbsp;</p>
<p><br />--------------------------------------------------------------------------------</p>
<p>我的体重是我自己的事。</p>
<p>&nbsp;</p>
<p>走自己的路，让别人说去吧。</p>
<p><br />--------------------------------------------------------------------------------</p>
<p>我每天只吃四类食物：早饭、午饭、晚饭和零食。</p>
<p>&nbsp;</p>
<p><br />--------------------------------------------------------------------------------<br />我并不是每次吃完饭就看电视，有时我边吃饭边看电视，生活中有些改变会增加乐趣。</p>
<p>&nbsp;</p>
<p><br />--------------------------------------------------------------------------------<br />学的越多，知道的越多；知道的越多，忘记的越多；忘记的越多，知道的越少；为什么学来着。</p>
<p>&nbsp;</p>
<p><br />--------------------------------------------------------------------------------</p>
<p>上帝决定了谁是你的亲戚，幸运的是在选择朋友方面他给了你留了余地。</p>
<p>&nbsp;</p>
<p><br />--------------------------------------------------------------------------------<br />工作好有意思耶！尤其是看着别人工作。</p>
<p>&nbsp;</p>
<p><br />--------------------------------------------------------------------------------</p>
<p>努力工作不会导致死亡！不过我不会用自己去证明。</p>
<p>&nbsp;</p>
<p><br />--------------------------------------------------------------------------------</p>
<p>后排座位上的小孩会生出意外，后排座位上的意外会生出小孩。</p>
<p>&nbsp;</p>
<p>加菲猫谈电影院包厢。</p>
<p><br />--------------------------------------------------------------------------------</p>
<p>爱情就象照片，需要大量的暗房时间来培养。</p>
<p>&nbsp;</p>
<p><br />--------------------------------------------------------------------------------</p>
<p>不要等明天交不上差再找借口，今天就要找好。</p>
<p>&nbsp;</p>
<p><br />--------------------------------------------------------------------------------</p>
<p>聪明人都是未婚的，结婚的人很难再聪明起来。</p>
<p>&nbsp;</p>
<p><br />--------------------------------------------------------------------------------<br />每个成功男人的背后，都有一个女人。每个不成功男人的背后，都有两个。</p>
<p>&nbsp;</p>
<p><br />--------------------------------------------------------------------------------</p>
<p>要用心去爱你的邻居，不过不要让她的老公知道。</p>
<p>&nbsp;</p>
<p><br />--------------------------------------------------------------------------------</p>
<p>要节约用水，尽量和女友一起洗澡。</p>
<p>&nbsp;</p>
<p><br />--------------------------------------------------------------------------------</p>
<p>钞票不是万能的，有时还需要信用卡。</p>
<p>&nbsp;</p>
<p><br />--------------------------------------------------------------------------------<br />你竟然带了一个又老又没用的家伙回来，而且不是我。</p>
<p><br /></p></font>&nbsp;<p></p>]]></description>
		</item>
		    
		
		<item>
			<title>VC++学习笔记</title>
			<link>http://itsais.blog.sohu.com/17551362.html</link>
			<comments>http://itsais.blog.sohu.com/17551362.html#comment</comments>
			<dc:creator>Home Piggy</dc:creator>
			<pubDate>Fri, 20 Oct 2006 17:21:10 +0800</pubDate>
			<category>IT 之生存</category>
			<guid>http://itsais.blog.sohu.com/17551362.html</guid>
			<description><![CDATA[VC++学习笔记 
<p><font size="2">1.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 日期转成字符串：</font> </p>
<p><font size="2">&nbsp;&nbsp; COleDateTime&nbsp;&nbsp;&nbsp; ww;<br />ww=COleDateTime::GetCurrentTime();<br />AfxMessageBox(ww.Format(&quot;%Y-%m-%d %H:%M:%S&quot;));</font> </p>
<p><font size="2">2.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 字符串转成日期：</font> </p>
<p><font size="2">COleDateTime dt;</font> </p>
<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dt.ParseDateTime(&ldquo;2006-08-08 08:08:08&rdquo;);</font> </p>
<p><font size="2">3.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 资源文件</font> </p>
<p><font size="2">资源文件名:xxx.rc,其中要包含的主要文件:resource.h和afxres.h</font> </p>
<p><font size="2">4.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; vc开发环境没有自动提示时:</font> </p>
<p><font size="2">&nbsp;&nbsp; 删除 目录下的ncb文件 ，再打开一般就ok了</font> </p>
<p><font size="2">5.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 利用_variant_t 取数据库数据的方法:</font> </p>
<p><font size="2">&nbsp;&nbsp; _variant_t ibb;</font> </p>
<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ibb=(_variant_t)rs-&gt;GetCollect(&quot;inta&quot;);</font> </p>
<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(ibb.vt!=VT_NULL)</font> </p>
<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</font> </p>
<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_b=ibb.lVal;</font> </p>
<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</font> </p>
<p><font size="2">6.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 平时取记录集字段值的方法:</font> </p>
<p><font size="2">&nbsp;&nbsp; (LPCTSTR)(_bstr_t)rs-&gt;GetCollect(&quot;datea&quot;)</font> </p>
<p><font size="2">7.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DoModal()可以返回两个结果 IDOK,IDCANCEL,他们都是int型，分别是：1,2。通过EndDialog(IDOK)的方式返回。</font> </p>
<p><font size="2">8.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 一般将数据库连接方面的信息放到app中。则AfxGetApp()非常重要，如；</font> </p>
<p><font size="2">&nbsp;&nbsp; CAdo2App* mapp=（CAdo2App*）AfxGetApp();</font> </p>
<p><font size="2">&nbsp;&nbsp; Map-&gt;conn-&gt;Execute(sql,NULL,adCmdText);</font> </p>
<p><font size="2">9.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DECLARE_DYNCREATE（类名）,IMPLEMENT_DYNCREATE(类名，基类名)&nbsp; 使得由CObject继承来的类在程序运行的时候能够动态的创建。</font> </p>
<p><font size="2">10.&nbsp;&nbsp; DECLARE_DYNAMIC（类名）,IMPLEMENT_DYNAMIC(类名，基类名)&nbsp; 可以在运行时获得该类的信息</font> </p>
<p><font size="2">11.&nbsp;&nbsp; DECLARE_SERIAL（类名）,IMPLEMENT_SERIAL(类名，基类名,0)为一个可以串行化的CObject派生类产生必要的C++标题代码</font> </p>
<p><font size="2">12.&nbsp;&nbsp; 获得文档的方法： CMainFrame * pFrame=(CMainFrame *) AfxGetMainWnd();</font> </p>
<p><font size="2">CPClientDoc * pDoc =(CPClientDoc *) pFrame-&gt;GetActiveDocument();<br />&nbsp;</font> </p>
<p><font size="2">13.&nbsp;&nbsp; 获得视图的方法：CMainFrame * pFrame=(CMainFrame *) AfxGetMainWnd();</font> </p>
<p><font size="2">myView =(CPClientView*) pFrame-&gt;GetActiveView();</font> </p>
<p><font size="2">14.&nbsp;&nbsp; 如果要引用全局变量或者全局方法，须在当前类中引入：extern 名字;</font> </p>]]></description>
		</item>
		    
		
		<item>
			<title>2006年最低调变态的精品语录</title>
			<link>http://itsais.blog.sohu.com/17441988.html</link>
			<comments>http://itsais.blog.sohu.com/17441988.html#comment</comments>
			<dc:creator>Home Piggy</dc:creator>
			<pubDate>Thu, 19 Oct 2006 17:31:58 +0800</pubDate>
			<guid>http://itsais.blog.sohu.com/17441988.html</guid>
			<description><![CDATA[<p>2006年最低调变态的精品语录<br />&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp; 1.人的一生就象在拉屎,有时你已经很努力了可出来的只是一个屁.<br />　　<br />　　2.小时侯，我家里很穷，没钱买自行车，我只好每天打的上学。初中的时候，因为我成绩太突出，学校领导留我多读了两年。初中毕业后，高中的校长觉得我很有前途，就多收了我三万。高三的时候，班主任认为我已经有独立生存的能力，于是让我退了学。<br />　　<br />　　3.某鲜花店的广告：今日本店的玫瑰售价最为低廉，甚至可以买几朵送给太太。<br />　　<br />　　4.我和超人的唯一区别是把内裤穿在里面了！　　<br />　　<br />　　5.避孕的效果：不成功，便成&ldquo;人&rdquo;。<br />　　<br />　　6.我不是随便的人！但随便起来就不是人！<br />　　<br />　　7.虽然你是暴牙！别自悲，暴牙很好！暴牙可以刨地瓜，下雨可以遮下巴，喝茶可以隔茶渣，野餐可以当刀叉，你说暴牙是不是顶呱呱！<br />　　<br />　　8.家庭顺治、生活康熙、人品雍正、事业乾隆、万事嘉庆、前途道光、财富咸丰、内外同治、千秋光绪、万众宣统！<br />　　<br />　　9.我是一颗葱，站在风雨中，谁敢拿我沾大酱，X他老祖宗！走过南~闯过北~厕所后面喝过水，火车道上压过腿，还和傻子亲过嘴。上过山、打过虎~少林寺上练过武，左青龙，右白虎，常拿别人当二百五，还拿释迦摩尼喂老虎！金字塔上跳过舞,耶稣头上打过鼓.<br />　　<br />　　10.我身在江湖,江湖却没有关于我的传说!　　<br />　　<br />　　11.关于丁字裤：以前，脱下内裤看屁股；现在，拔开屁股看内裤&hellip;&hellip;<br />　　<br />　　12.走别人的路,让别人无路可走!<br />　　<br />　　13.我就像一只趴在玻璃上的苍蝇,前途一片光明,而我却找不到出路.<br />　　<br />　　14.浑人落魄江湖行，东西南北分不清。撞到墙角浑不觉，躺在地上数星星!<br />　　<br />　　15.聽說女人如衣服，兄弟如手足。回想起來，我竟然七手八腳的裸奔了19年！<br />　　<br />　　16.宿舍的弟兄决定对舍友实施以下惩罚：让其抱着贴满老中医广告的电线杆，饱含热泪充满深情的大声呐喊：我的病终于有救了啊！<br />　　<br />　　17.插人家洞的是插头，有洞被人家插的是插座！<br />　　<br />　　18.三过女厕所而不入！<br />　　<br />　　19.老鼠从不浪费晚上的时间，而我们人类却浪费了每天的三分之一.<br />　　<br />　　20.&ldquo;什么叫乐观派的人？&rdquo;&ldquo;这个&hellip;&hellip;就像茶壶一样，屁股都烧得红红的，他还有心情吹口哨！&rdquo;<br />&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp; 21.宁愿相信世间有鬼，也不相信男人那张嘴！<br />　　<br />　　22.现在最&ldquo;损&rdquo;人的一句话是：&ldquo;你真TMD陈水扁呀&rdquo;<br />　　<br />　　23.没有人值得你流泪，值得你流泪的人不会让你流泪！<br />　　<br />　　24、男人靠的住，母猪能上树。<br />　　<br />　　25、当大学从我身上下来，提着裤子说：你可以走，但青春必须留下，此刻才恍然大悟不是我上大学而是大学上了我！<br />　　<br />　　26、其文五百年不朽，其人一千年不朽，一千年以后，世界末日，什么都朽了。<br />　　<br />　　27、有人向我挑战说：你放马过来。我不回话，只是疾弛而去，然后马后炮打倒他。<br />　　<br />　　28、所谓长大，就是你知道那是什么事，所谓成熟，就是你知道后故意说不知道。<br />　　<br />　　29、工作要做到&ldquo;被饭催&rdquo;，而不是&ldquo;等饭吃&rdquo;。这样才及格。<br />　　<br />　　30、知道看人背后的，是智者和唯美主义者，知道背后看人的，是奸雄。<br />　　<br />　　31、胆小的伪君子把白的说成灰的；胆大的伪君子把黑的说成灰的，颠倒黑白最成功的不是颠倒黑白，而是没有了黑白。<br />　　<br />　　32、铁杵能磨成针，但木杵只能磨成牙签，材料不对，再努力也没用。<br />　　<br />　　33、笨人的可怕之处并不在其笨，而在起自作聪明。、<br />　　<br />　　34、小便后忘记拉上拉链，你就是中年人了；小便后忘记拉下拉链，你就是老年人了。<br />　　<br />　　35、洗澡是屁股享福，脑袋吃苦；看电影是脑袋享福，屁股吃苦，在这里看博的是脑袋、屁股都吃苦。<br />　　<br />　　36、网上自古无娇娘，残花败柳一行行，偶有几对鸳鸯鸟，也是野鸡配色狼。<br />　　<br />　　37、怎么维持身材呢？暴饮暴食。<br />　　<br />　　38、学问之美，在于使人一头雾水；诗歌之美，在于煽动男女出轨；女人之美，在于蠢得无怨无悔；男人之美，在于说得白日见鬼。<br />　　<br />　　39、你瞧你吧！看背影急煞千军万马；转过头吓退百万雄师。还看什么看,就是说你!<br />　　<br />　　40、戳瞎眼睛拔光头发泼一脸的硫酸敲掉牙齿割掉舌头做成人棍。</p><p>&nbsp;&nbsp; 41、如果回帖是一种美德，那我早就成为圣人了。<br />　　<br />　　42、宁可让中国没有一个处男，也不能让日本有一个处女。<br />　　<br />　　43、男人长的帅有个屁用呀？到银行能用脸刷卡吗？<br />　　<br />　　44、你唱歌绝对不会把狼引来，真的&mdash;&mdash;你只会把狼吓跑。<br />　　<br />　　45、如果你恨一个男人，就把他的女人揍成李宇春，让他无法享受上半身的快乐，如果你狠一个女人，就把她的男人揍成李宇春，让她无法享受下半身的快乐。<br />　　<br />　　46、他的刀是冷的，剑是冷的，心是凉的，血是冷的，靠，这人不死了吗？<br />　　<br />　　47、真的不想再做了&mdash;&mdash;因为铁杵已经磨成了&ldquo;绣花针&rdquo;了。<br />　　<br />　　48、东风吹、战鼓擂、美人醉、盼君回、捷报飞、壮士归。<br />　　<br />　　49、手来手断、脚来脚断、脑袋来了西吧烂。<br />　　<br />　　50、聊天诚可贵，网费价更高，若为睡觉故，二者皆可抛。<br />　　<br />　　51、上网不聊天，气死活神仙。<br />　　<br />　　52、此人已死、有事烧纸。<br />　　<br />　　53、天马流星拳&mdash;&mdash;庐山升龙霸&mdash;&mdash;凤翼天翔&mdash;&mdash;钻石星尘&mdash;&mdash;星云锁链&mdash;&mdash;还不死的话请留言。<br />　　<br />　　54、师傅正在组织专项会议研究到底要清炖白骨精还是红烧。<br />　　<br />　　55、迎风淌眼泪、撒尿嗤脚背。<br />　　<br />　　56、人老皮肉松、干啥啥不中。<br />　　<br />　　57、妈妈教小孩子小便，一拉链、二掏出、三往后拉、四尿尿、五往前推、六放回进去，七拉链。小男孩长大了！有一天她妈妈在外面听到他在里面喊&ldquo;三、五；三、五&rdquo;。5555555555555555555555<br />　　<br />　　58、人生不能像做菜、把所有的料都准备好才下锅。<br />　　<br />　　59、恐惧让你论为囚犯。希望让你重获自由。<br />　　<br />　　60、正是女人对商场的爱，才使商场变得越来越精彩。女人是商场的救星，每个商场的的门口都应该用最大的字留：感谢女人。</p><p>　　61、低头要有勇气，抬头要有低气。<br />　　<br />　　62、不怕被人利用，就怕你没用。<br />　　<br />　　63、好脾气是一个人在社交中所能穿着的最佳服饰。<br />　　<br />　　64、有时候，我们对别人的小恩小惠感激不尽，却对亲人一辈子的恩情视而不见。<br />　　<br />　　65、只知刚的人，难免会被折断；只有柔的人，到头来终是懦夫。<br />　　<br />　　66、别看我不美，我拿你照样当土匪，别看我不肥，我拿你照样当棒槌。<br />　　<br />　　67、我不在乎你有没有钱，我只在乎你有没有钱途。<br />　　<br />　　68、美人便秘时，与常人无二，话虽然损了点，毕竟也是人家的心声啊。<br />　　<br />　　69、再完美的身材，在不爱她的人的眼里，也是一种解调侃的作料。<br />　　<br />　　70、小树不修不成材、小孩不打不成器。<br />　　<br />　　71、积累久了，可能的导致爆发；而爆发久了，都可能导致崩溃。<br />　　<br />　　72、对上要恭、对下要威、对同级要含而不露。<br />　　<br />　　73、再难再苦，就当自己是二百五，再难再险，就当自己是二皮脸。<br />　　<br />　　74、你说你落后个脑袋还戴个前进帽。<br />　　<br />　　75、炮轰的脑袋还梳个雷劈的逢。<br />　　<br />　　76、我不会讲话，一见人多就结结巴巴，像羊拉屎一样，不合你的胃口请多多包涵。<br />　　<br />　　77、上晓天文，下晓地理，中小儿科，知阴阳，懂八卦，运筹于帷幄之中，决策于千里之外。<br />　　<br />　　78、前骷髅后玄武，左青龙右白虎。<br />　　<br />　　79、解释就是掩饰，掩饰就是编故事。、<br />　　<br />　　80、远看青山绿水，近看痴压裂嘴。</p><p>&nbsp;&nbsp; 81、不知不觉时间已匆匆，人生往往活在后悔中。<br />　　<br />　　82、蜡炬成灰泪始干，化做春泥我会更胡花。<br />　　<br />　　83、今日不为打狗英斗士，明日竟沦为八卦难民。<br />　　<br />　　84、光说不练假把势、真材实料真功夫。<br />　　<br />　　85、懂得用错误的答案来证明自己对色情是清白的。<br />　　<br />　　86、男人不醉，女人怎么有小费；女人不醉，男人怎么有机会；女人男人都不醉，宾馆没人睡。<br />　　<br />　　87、非常大男子主义，&ldquo;非常大&rdquo;正是根据我的某个器官特制而量身定做的。<br />　　<br />　　88、商女不知亡国恨、妓女不懂婚外情。<br />　　<br />　　89、其实很多人说我像粱朝伟，我不愿意承认，因为我觉得做人要做出特色，我还是觉得我长的比较像木村拓哉。<br />　　<br />　　90、我身为和尚，我的任务是把爱分给众生。<br />　　<br />　　91、你拿了我的定海神针，海底失去平衡，害得我们只能移民上岸边。<br />　　<br />　　92、到了山顶才发现，错误的路和正确的路就差那么几步的距离。<br />　　<br />　　93、不蒸馒头争口气行吗？<br />　　<br />　　94、我吃的盐比你吃的米还多呢？那是你口重；我过的桥比你走的路还多呢？那是你懒的动。<br />　　<br />　　95、忍一忍风平浪静、退不步海阔天空。<br />　　<br />　　96、我没事，十三太保金钟罩，练的就是屁股。<br />　　<br />　　97、人生自古谁无死，啊个拉屎不用纸。<br />　　<br />　　98、就这样让你舒服，脱下你常拉的裤。<br />　　<br />　　99、乐观者在灾祸中看到机会，悲观者在机会中看到灾祸。<br />　　<br />　　100、生气是那别人的错误来惩罚自己。</p>]]></description>
		</item>
		    
		
		<item>
			<title>网摘&#8212;&#8212;时间管理三招 and养成重要的习惯</title>
			<link>http://itsais.blog.sohu.com/15323947.html</link>
			<comments>http://itsais.blog.sohu.com/15323947.html#comment</comments>
			<dc:creator>Home Piggy</dc:creator>
			<pubDate>Sun, 1 Oct 2006 17:15:21 +0800</pubDate>
			<category>生活</category>
			<guid>http://itsais.blog.sohu.com/15323947.html</guid>
			<description><![CDATA[<div><div><h2><font size="7">&nbsp;时间管理三招<img style="FLOAT: right; MARGIN: 0px 0px 10px 10px" alt="10e96a4f10d.jpg" src="http://img94.pp.sohu.com/images/blog/2006/10/1/17/8/10e96a4f10d.jpg" border="0" /></font></h2></div><!--
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22- rdf- syntax- ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
<rdf:Description
rdf:about="http://blog.run2me.com/runliu/archive/2005/08/19/9671.aspx"
dc:identifier="http://blog.run2me.com/runliu/archive/2005/08/19/9671.aspx"
dc:title="时间管理三招"
trackback:ping="http://blog.run2me.com/runliu/services/trackbacks/9671.aspx" />
</rdf:RDF>
--><div><p>这两天给一个公司的员工们作了一个关于时间管理的演讲，强调对时间的管理基本上不是6-sigma的范畴，因为时间管理重要的不是如何从17分钟里面省出17秒来，而是这17分钟值不值得做，以及如何用17分钟省出17个小时来。</p><p>我提出了以年为单位的时间管理，以天为单位的时间管理和以小时为单位的时间管理三个层次。</p><p><strong>以年为单位的时间管理</strong></p><p>每年一月份，我都会制定新的一年的行动计划，以及审视去年的实施情况（参见：<a href="http://blog.run2me.com/runliu/archive/2004/02/02/213.aspx">2002 - 2003 - 2004</a>）。这个计划的逻辑是：1）职业/生活目标，2）我的强项/弱项，3）具体的支持活动。只有制定了一年的计划，我才知道有朋友叫我去唱歌的时候是不是该拒绝，我才知道晚上是不是放弃看《康熙来了》而研读逻辑，我才知道要定期在当当上买书、做卓越的终生VIP。以年为单位的&ldquo;有目标的&rdquo;时间管理，帮我省下来的是若干月的时间。</p><p><strong>以天为单位的时间管理</strong></p><p>上帝给了每个人公平的每天三个八小时。第一个八小时大家都在工作，第二个八小时大家都在睡觉。人与人的区别都是第三个八小时创造出来的。如果你每天花3个小时上下班，2个小时吃早中晚饭，1个小时看电视，那你自由支配的时间就只剩2个小时了。你可能会非常节省的用它来陪女朋友看电影，健身或者唱歌，打打游戏。但是如果你从交通、睡觉、吃饭里分别省出一些时间花在学习上，你的学习进步将是惊人的。如果你把这些时间花在拓展交际、锻炼身体、参加公益，你的人脉增长将是同样惊人的。</p><p>&nbsp;<strong>以小时为单位的时间管理</strong></p><p>我们和CPU一样都是分时系统，只不过芯片每秒分成上亿份，人类一小时分成四、五份。每一个时刻我们只能做一件事情，如果被打断再转回来的时候会有一定的时间浪费在回忆刚刚在做什么、做到哪里。我们需要锻炼在不同事务之间迅速切换的本领，这样就会更加有效的利用每一个小时的时间，在每一个时间片里100%的专注。这要借助工具，所以我一直在非常大的依赖于微软的Outlook和我的智能手机来管理我的每一个小时。把事情分为&ldquo;轻重缓急&rdquo;，按照规律去顺序处理。</p><p>如果你不能以年的方式来管理时间，那么这样白白浪费掉的时间让以小时为单位的时间管理显得毫无意义。如果不能在每一个小时上有所节省，那么每年的时间也无法真正管理。这三种层次是缺一不可的。</p><p>&gt;&gt;&gt;&gt; 关于工具，推荐一个视频和一篇文章</p><p>视频：让你生活工作更轻松-OUTLOOK 时间管理篇<br /><a href="http://www.microsoft.com/china/technet/webcasts/ondemand/episode.aspx?newsID=msft061305vxpm">http://www.microsoft.com/china/technet/webcasts/ondemand/episode.aspx?newsID=msft061305vxpm</a></p><p>文章：Outlook 2003 时间管理秘笈<br /><a href="http://download.microsoft.com/download/d/2/9/d29acda5-d1e9-4614-b23d-cd9bbd56bc73/Outlook-Ex03.pdf">http://download.microsoft.com/download/d/2/9/d29acda5-d1e9-4614-b23d-cd9bbd56bc73/Outlook-Ex03.pdf</a></p></div></div><p></p><p></p><p><font face="新宋体" size="7">养成重要的习惯</font></p><p>一位朋友看完《<a href="http://blog.run2me.com/runliu/archive/2005/08/19/9671.aspx" target="_blank" rel="nofollow">时间管理三招</a>》之后皱着眉头说，&ldquo;润，你的文章写得还不错，但是如果每个人都真的这样来管理时间，生活还有什么乐趣？&rdquo;这个问题不是第一次有人来问我，所以我很自然地给了他回答。</p><p><strong>习惯与性格</strong></p><p>我们来做一个实验。请把你的双手十指交叉，紧紧地握在一起。好的，不要松手，现在来看一看，你的哪个手的拇指在最上面？右手？还是左手？紧接着，请你的几位同事也照做一遍。咦？他们其中有人与你不同！那么，让我们自己改变一下，试着故意让另一个手的拇指在上呢？怎么这么别扭？这么别扭的事情，怎么他就做得那么自然呢？我做的那么自然的事情，怎么他就那么别扭呢？</p><p>是的，这就叫&ldquo;习惯&rdquo;。习惯，就是也许别人做起来就那么别扭的事情，你可以做得那么自然。</p><p>你要去夏威夷旅行，非常难得的机会，你会怎么安排在目的地的五天呢？有两个选择：</p><p>1） 定一个详细的日程表，每天早上去那里、中午在哪里吃饭、下午去哪里。仔细审视，保证不会漏掉任何一个重要的景点。然后才会出发。</p><p>2） 不定任何日程表，只管带足胶卷，五天要随性游玩，在喜欢的地方就多待甚至住下来，不喜欢的地方立刻就走。精心计划反而会破坏游玩的心情。</p><p>这还用说？当然是&hellip;&hellip;。不急，问问你身边的其他五位朋友。怎么？他居然会喜欢这样旅游？太不可思议了！</p><p>是的，这就叫&ldquo;性格&rdquo;。性格，就是也许在别人看来那么不可理解的行为，你认为理所当然。</p><p><strong>这和乐趣无关</strong></p><p>刚学自行车的时候，很痛苦，不知道摔了多少跤。当时就很诧异，发明自行车的人不简单，第一个学会骑自行车的人更不简单。学会之后，每天骑车上下学之后，从学校出来，到了家里，经常有这样的感觉，咦，我是怎么到家的？完全不记得了！骑车，已经成了一种习惯。当年痛苦学车的时候，觉得是车在骑我。当成为习惯之后，才是我在骑车。</p><p>开车同理。有朋友说，你开手动档的车，很痛苦吧？我说，哪里，你不提醒我，我完全不记得我的右手在换档，已经习惯了，一点都不痛苦。</p><p>当我们把时间管理作为一项规则来遵守，毫无乐趣可言，甚至很痛苦，是时间在管理我们；当时间管理成为习惯之后，一切自然而然，才是我们在管理时间。</p><p>这和乐趣无关。觉得毫无乐趣的，是因为那不是你的方式，不是你的习惯，不是你的性格。滔滔不绝的人觉得不善言辞的人无趣，不善言辞的人觉得滔滔不绝的人鼓噪；精心计划的人觉得浪漫随意的人不严谨，浪漫随意的人觉得精心计划的人不灵活。都是一个道理。</p><p>习惯不会让人痛苦，养成习惯的过程是痛苦的。</p><p>Stephen Covey说过，想法产生行动，行动养成习惯，习惯变成性格，性格决定命运。所以，我们需要养成一些重要的习惯，接下来的就交给命运了。:-)</p><p></p><p>摘自：<a href="http://blog.run2me.com/runliu/">刘润博客</a></p>]]></description>
		</item>
		    
		
		<item>
			<title>大学生使用最多的web工具&#8212;&#8212;前10名</title>
			<link>http://itsais.blog.sohu.com/15059221.html</link>
			<comments>http://itsais.blog.sohu.com/15059221.html#comment</comments>
			<dc:creator>Home Piggy</dc:creator>
			<pubDate>Fri, 29 Sep 2006 13:13:29 +0800</pubDate>
			<category>生活</category>
			<guid>http://itsais.blog.sohu.com/15059221.html</guid>
			<description><![CDATA[<div><a title="View all posts in Tips" href="http://www.educatednation.com/category/tips/" rel="category tag"></a></div><h2>Best Web Tools for College Students</h2><p>I have a set of Web sites / Web tools that I use on a regular basis. As a student, they&rsquo;re handy because they either a) help me get things done or b) educate / inform me about things I need to know.</p><p>Here&rsquo;s a medley of sites and tools that I love to use (or plan to start using very soon)!</p><p>1) <a href="http://www.writely.com/">Writely</a> - The &ldquo;Web word processor.&rdquo; Allows you to save your work and documents on the Web, and access them from anywhere. </p><p>2) <a href="http://www.soundslides.com/">Soundslides</a> - Storytelling management made easy. Allows you to easily merge sound and audio to create and audio slideshow presentations. Requires a small registration fee.</p><p>3) <a href="http://bluedot.us/friends/dots">Bluedot.Us</a> - A great social bookmarking/networking service. With the click of a button, you can &ldquo;Dot&rdquo; a Web site / page that you find interesting and instantly share it with all of your friends. Perfect for groups of students who have similar interests - it&rsquo;s an easy way to share information.</p><p>4) <a href="http://www.efax.com/">eFax</a> - Need to receive a fax? Do it for free over e-mail! eFax will hook you up with a phone number that you can give to people&hellip;your faxes will show up in your inbox.</p><p>5) <a href="http://www.pdfonline.com/">PDF Online</a> - Create PDFs for free. I&rsquo;ve used this on numerous occasions in conjunctions w/ e-fax. It&rsquo;s great when you don&rsquo;t have a scanner handy. Just e-fax yourself the document and then convert it into a pdf. </p><p>6) <a href="http://www.google.com/calendar">Google Calendar </a>- Add events and activities to this simple and easy to use calendar. You can also share your calendar with other people, have multiple calendars, and have events e-mailed to you or sent to your cell phone.</p><p>7) <a href="http://www.spreadsheets.google.com/">Google Spreadsheets</a> - I&rsquo;ve only just started using this, but it seems like a great way to create and save spreadsheets online. </p><p>8) <a href="http://www.bloglines.com/">Bloglines</a> - A way to search for and subscribe to news feeds and blogs. Not so new anymore, but I use it every day.</p><p>9) <a href="http://www.technorati.com/">Technorati </a>- They claim to track 51.3 million blogs. You can search for pretty much any type of blog you are looking for. However, I have heard there are other (perhaps better) options to Technorati these days.</p><p>10) <a href="http://mynoteit.com/">mynoteIT</a> - mynoteIT is a free service built for students to help keep school information organized and have it easily accessable whenever, wherever.</p>]]></description>
		</item>
		    
		
		<item>
			<title>介绍四个小小软件</title>
			<link>http://itsais.blog.sohu.com/15043615.html</link>
			<comments>http://itsais.blog.sohu.com/15043615.html#comment</comments>
			<dc:creator>Home Piggy</dc:creator>
			<pubDate>Fri, 29 Sep 2006 10:48:55 +0800</pubDate>
			<category>IT 之生存</category>
			<guid>http://itsais.blog.sohu.com/15043615.html</guid>
			<description><![CDATA[<blockquote><p align="left"><font size="2"><strong><u>四款经典小软件&mdash;&mdash;近期发现</u></strong></font></p><p>1.Riva FLV Encoder：在线视频很多精彩，可无法下来留作纪念也是遗憾。就是下载下来，.flv格式还需要专门的播放器，现在网上下载的播放器也都是属于垃圾软件样的，蔫里巴叽的！何不把flv转换为我们需要的软件呢。</p><p>还可以直接播放flv文件。</p><p>Flv转换成mpg文件&gt;&gt;&gt;<br />启动Riva FLV Encoder程序，按下Browse。选取要转换的flv文件<br />选完之后回到程序的画面，你可以选择输出的目录，预设是桌面。<br />手动更改output file的file name，将文件后缀手动由.flv改成.mpg<br />转文件的时候程序的画面会变白，等到画面恢复就表示好了！</p><p>2. Ha-traypilot12,隐藏任务栏。绿色软件。可以让你的任务栏空出来不少空间。 比较适合为W2K，当然xp也可用。</p><p><img style="DISPLAY: block; MARGIN: 0px auto 10px; TEXT-ALIGN: center" alt="10e8ae288f4.jpg" src="http://img94.pp.sohu.com/images/blog/2006/9/29/10/4/10e8ae288f4.jpg" border="0" /></p><p>3.Transother：又叫专心工具，呵呵，这个小工具可以让当前窗口高亮显（其实是让别的窗口暗淡下去）。这样你就可以专心当前工作不会被其它影响了。绿色软件。</p><p><img style="DISPLAY: block; MARGIN: 0px auto 10px; TEXT-ALIGN: center" alt="10e8adce0b9.jpg" src="http://img94.pp.sohu.com/images/blog/2006/9/29/10/28/10e8adce0b9.jpg" border="0" /></p><p></p><p>4.QQ2000怀旧版：经典，怀旧，关键是速度，那叫一个快。<img style="DISPLAY: block; MARGIN: 0px auto 10px; TEXT-ALIGN: center" alt="10e8ad6e30a.jpg" src="http://img94.pp.sohu.com/images/blog/2006/9/29/10/21/10e8ad6e30a.jpg" border="0" /></p></blockquote><p></p><p>下载地址：<a href="http://www.box.net/public/18cdmzc3oa#main">点击链接进入下载页面</a></p>]]></description>
		</item>
		    
		
		<item>
			<title>第一步&#8212;&#8212;基础知识篇</title>
			<link>http://itsais.blog.sohu.com/15038580.html</link>
			<comments>http://itsais.blog.sohu.com/15038580.html#comment</comments>
			<dc:creator>Home Piggy</dc:creator>
			<pubDate>Fri, 29 Sep 2006 10:03:29 +0800</pubDate>
			<category>IT 之生存</category>
			<guid>http://itsais.blog.sohu.com/15038580.html</guid>
			<description><![CDATA[　除了通用的平台服务和扩展外，wdm还实现了一个模块化的、分层次类型的微型驱动程序结构（见图1）。类型驱动程序实现了支持通用总线、协议或设备类所需的功能性接口。类型驱动程序的一般特性是为逻辑设备的命令设置、协议和代码重用所需的总线接口实现标准化提供必要的条件。wdm对标准类接口的支持减少了windows 95和windows nt所需的设备驱动程序的数量和复杂性。windows 2000也引入了wdm驱动程序构架。虽然wdm目前实际应用还不多，但是相信在不久的将来，在windows平台上，wdm将成为21世纪主流的驱动模式。<br /><br />　　（1）windows 操作系统<br /><br />　　windows 98不像windows 2000那样非常有规律的处理i/o操作（见图2）。应用程序调用win32 api，而且仅当读硬盘文件、通信端口和有wdm驱动程序的设备时才调用相应的 win32 api，对其它设备必须使用特定的机制。全部windows 2000的内核模式i/o操作都使用一个共同的数据结构（irp），windows 98不具备这一特点，应用程序请求更达不到内核模式。不过，当谈到wdm驱动程序的时候，windows 98内部的体系结构与windows 2000是非常相似的。系统模块（ntkern.vxd）包括大量windows nt内核支持函数，它完成请求包irps的创建，把它们发送给wdm驱动程序，从这一点考虑，两个环境之间不存在差异。<br /><br /><img src="http://www.fortime.net/upload/images/11455388041689566094.gif" /> <br />　　图1 wdm中设备对象和驱动程序的分层<br /><br />　　（2）wdm特性<br /><br />　　模块化的wdm体系结构中灵活统一的接口，使操作系统可以动态地配置不同的驱动程序模块来支持特定的设备。一个典型的驱动程序堆栈由通用设备、协议及特定协议和特定总线的微型驱动程序联接的总线类驱动程序构成。动态构造wdm驱动程序堆栈是实现即插即用设备支持的关键。<br /><br />　　wdm服务使实现一个用于windows nt和windows 95快速反应的模型成为可能。wdm提供了多个执行优先级，包括核心态和非核心态线程、irq级别和被延缓的程序调用（dpc）。所有的wdm类和微型驱动程序都作为核心态（第0层）的特权级线程（不会被cpu调度程序中断）执行。32个irq级可以被用于区分硬件中断服务的优先级。对于每个中断，dpc 被排入队列等到被启用中断的irq服务例程完成后再执行。dpcs通过有效的减少中断被禁止的时间，使系统对中断的响应获得了很大的提高。对于使用多处理器的基于x86的pc系统，在windows　nt下对中断的支持是以intel的多处理器规范1.4版本为基础的。<br /><br />　　对于流媒体应用程序，wdm在核心态提供了快速反应的接口来处理i/o流。wdm的流接口是通过标准的wdm类接口提供出的。<br /><br /><img src="http://www.fortime.net/upload/images/1145538805305406651.gif" /> <br />　　图2 windows 98体系结构<br /><br />　　（3）wdm工作原理<br /><br />　　wdm支持usb、ieee 1394、acpi等全新的硬件标准。而且以往在两个平台上同时运行时需要编写两个截然不同的驱动程序，现在只需要编写一个wdm驱动程序就可以了。 wdm驱动程序也是分层的，即不同层上的驱动程序有着不同的优先级，而windows 9x下的vxd则没有此结构。另外，wdm还引入了功能设备对象fdo（functional device object）与物理设备对象pdo（physical device object）两个新类来描述硬件，一个pdo对应一个真实硬件。<br /><br />　　另外值得注意的是，一个硬件只允许有一个pdo，却可以拥有多个fdo，在驱动程序中直接操作的不是硬件而是相应的pdo与fdo。在ring-3与 ring-0通讯方面，系统为每一个用户请求打包形成一个irp结构，将其发送至驱动程序，并通过识别irp中的pdo来区别是发送给哪一个设备的。另外，在驱动程序的加载方面，wdm不通过驱动程序名称识别，而是通过一个128位的guid来实现驱动程序的识别。<br /><br />　　（4）wdm与其它驱动程序的比较<br /><br />　　写wdm和其它模式驱动程序基本上是相同的，代码中的主要区别在于如何创建设备。在wdm驱动程序中，即插即用（pnp）管理器告知何时向系统添加一个设备，或者从系统删除设备。pnp管理器使用安装的inf文件查找新设备的正确驱动程序；而其它模式驱动程序必须发现它自己的设备，使用专门的安装程序安装。<br /><br />　　另外在细节上也存在很多区别，其它模式驱动程序参数一般由注册表提供，在driverentry里调用读注册表的函数，然后根据注册表再调用createdevice，但是wdm一般不是这样，这是由于windows 2000下支持pnp，在加载的时候会发pnp消息给driver，所以一般不需要在driverentry里调用createdevice，而是在 adddevice里创建，或者在pnp消息里创建。一般在driverentry里创建的是一个与设备或者对象毫无关系的虚拟设备，用于管理与 win32的通讯。如果不想对该设备做什么特别的处理，或者设备不复杂，adddevice可以简单返回nt_success，不用调用 createdevice。另外整个设备驱动树也发生了改变，从而使安装程序发生了很大的改变。]]></description>
		</item>
		    
		
		<item>
			<title>第二步&#8212;&#8212;环境构造篇</title>
			<link>http://itsais.blog.sohu.com/15038475.html</link>
			<comments>http://itsais.blog.sohu.com/15038475.html#comment</comments>
			<dc:creator>Home Piggy</dc:creator>
			<pubDate>Fri, 29 Sep 2006 10:02:26 +0800</pubDate>
			<category>IT 之生存</category>
			<guid>http://itsais.blog.sohu.com/15038475.html</guid>
			<description><![CDATA[<div><h3><span></span></h3></div><br /><br /><div><span></span><font><!-- google_ad_section_start --><strong>　　要想开发wdm驱动程序，我们必须首先安装ddk（设备驱动程序开发包），wdm开发环境的设置相对比较麻烦，大多数开发人员偏爱用visual studio进行开发，而vc++有一些非常有用的工具。<br /><br /><br /></strong>　　■安装ddk<br /><br />　　下面笔者将详细介绍在windows 98、windows nt和windows 95下ddk的安装方法。<br /><br />　　1.windows 98 ddk的安装<br /><br />　　这一部分描述安装windows 98 ddk的方法。约定%98ddk%为安装的windows 98 ddk的根目录；%mstools%为微软sdk平台的根目录；%vcppdev%为安装的vc++的根目录开发环境。<br /><br />　　使用ddk的软件平台通常为windows 98操作系统和vc++ 4.2 or 5.0版本，若要编译视频捕获则需要vc++ 5.0版本。在安装windows 98 ddk之前，必须先安装vc++编译器/开发环境，否则运行时，windows 98 ddk的setenv.bat批处理文件将不能建立正确的环境。安装ddk 资料需要ie 4.01或以上版本，如果是从光盘或测试驱动程序则需要光驱，16mb内存是不可少的，完整安装需要82mb硬盘容量。<br /><br />　　包括 windows 98 ddk在内的所有例子驱动程序都不需要在安装的sdk平台下构造。不过，如果你开始开发自己的驱动程序，可能需要的不是windows 98 ddk中的头文件，而是sdk平台中的头文件，因此可以考虑两种方法：拷贝所需的头文件或sdk平台的文件到在%98ddk%和%vcppdev%下适当的include 目录中；也可以直接安装sdk平台，在%98ddk%\bin中编辑setenv.bat文件，并运行安装在%mstools%里的setenv.bat 文件。<br /><br />　　用setup程序安装ddk，步骤为：<br /><br />　　(1)运行windows 98 ddk中的setup.exe文件，安装windows 98 ddk到c:\98ddk。<br /><br />　　(2)安装vc++ 5.0到c:\vcppdev。<br /><br />　　(3)修改config.sys增大环境变量空间。在config.sys文件最后加入一行：<br /><br />　　shell=c:\windows\command.com /e:4096 /p<br /><br />　　<br /><br />　　在安装windows 98 ddk之前，必须先安装vc++编译器/开发环境，否则运行时，windows 98 ddk的setenv.bat批处理文件将不能建立正确的环境。<br /><br />　　<br /><br />　　2.windows 95 ddk的安装<br /><br />　　安装windows 95 ddk一般需要先安装win32 sdk，因为windows 95 ddk需要win32 sdk的16位资源编译器。但是win32 sdk很大（一整张光盘的容量），而且国内难以买到，下面笔者介绍一种安装windows 95 ddk的简单方法：<br /><br />　　（1）修改注册表，仿真win32 sdk已经安装的情况。建立一个名为win32sdk.reg的注册表文件，内容为：<br /><br />　　regedit4<br /><br />　　[hkey_users\.default\software\microsoft\win32sdk]<br /><br />　　[hkey_users\.default\software\microsoft\win32sdk\directories]<br /><br />　　&quot;install dir&quot;=&quot;c:\\mstools&quot;<br /><br />　　在资源管理器中双击此文件，将此文件中的内容添加到注册表。就可以安装windows 95 ddk了。<br /><br />　　（2）运行windows 95 ddk中的setup.exe文件，安装windows 95 ddk到c:\ddk。<br /><br />　　（3）安装masm 6.11到c:\masm611。安装完成后再将未安装的windows 95 ddk中的masm611c目录下的文件覆盖到c:\masm611\bin。<br /><br />　　（4）安装vc++ 5.0到c:\program files\devstudio\vc。<br /><br />　　（5）建立c:\mstools\binw16目录，拷贝资源编译器。<br /><br />　　windows 95 ddk需要一个能将win32资源的源文件编译成16位资源的资源编译器。如果有win32 sdk，可以将binw16目录下的文件直接拷贝到c:\mstools\binw16；如果没有win32 sdk，则可以使用第三方的资源编译器，这里以使用borland的资源编译器为例：<br /><br />　　首先准备一套turbo masm 5.0，用unpak工具解压缩cmdline.pak文件，找到下面三个文件：<br /><br />　　　　brc.exe<br /><br />　　　　brcc32.exe<br /><br />　　　　rw32core.dll<br /><br />　　将这三个文件拷贝到c:\mstools\binw16，并将brc.exe改名为rc.exe即可。<br /><br />　　（6）修改config.sys增大环境变量空间。在config.sys文件最后加入一行：<br /><br />　　shell=c:\windows\command.com /e:8192 /p<br /><br />　　7）进入windows 95的ms-dos方式，初始化编译环境，最好建立一个批处理文件ddksetup.bat，内容编辑为：<br /><br />　　set sdkroot=c:\95sdk <br /><br />　　call new-vars.bat (masm611的环境） <br /><br />　　call ddkenv.bat (ddk的环境） <br /><br />　　call vcvars32.bat (vc++的环境） <br /><br />　　c:\masm611\binr\new-vars.bat<br /><br />　　c:\ddk\ddkinit.bat 32 base<br /><br />　　c:\program files\devstudio\vc\bin\<br /><br />　　vcvars32.bat<br /><br />　　编辑好之后就可以使用windows 95 ddk了，连接时出现的警告可以不理会。<br /><br />　　有的ddk里面没有ddkenv.bat的批处理，如果你的ddk是cd版的，请注意保存ddk自带的ddkenv.bat，否则需要自建。ddkenv.bat内容如下：<br /><br />　　set ddkroot=e:\95ddk <br /><br />　　set include=%include%;%ddkroot%\inc32;%ddkroot%\inc16 <br /><br />　　set lib=%lib%;%ddkroot%\lib <br /><br />　　<br /><br />　　有的ddk里面没有ddkenv.bat的批处理，如果你的ddk是cd版的，请注意保存ddk自带的ddkenv.bat，否则需要自建。<br /><br />　　<br /><br />　　3.nt ddk的安装 <br /><br />　　需要准备下列软件：win32 sdk或者platform sdk、nt ddk、vc++ 5.0。具体安装步骤如下：<br /><br />　　（1）安装win32 sdk或者platform sdk到c:\mstools。 <br /><br />　　（2）如果是安装platform sdk，安装完成后请修改注册表： <br /><br />　　hkey_current_user\environment ，添加一个&ldquo;mstools&rdquo;字符串，值为c:\mstools。 <br /><br />　　（3）安装vc++ 5.0。 <br /><br />　　（4）安装nt ddk到c:\ntddk。<br /><br />　　<br /><br />　　■构造环境<br /><br />　　下面以windows 98驱动程序构造环境为例介绍建立wdm驱动程序构造环境的方法。<br /><br />　　1. 用setenv.bat来安装驱动程序构造环境<br /><br />　　创建一个名为&ldquo;development kits\windows 98 ddk&rdquo;的程序目录。这个目录包括自由构造环境项和检查构造环境项。每次重启操作系统，在构造驱动程序前，单击这些程序文件夹中合适的一项。这些项调用% 98ddk%\bin里的setenv.bat批处理文件来创建正确的环境变量的驱动程序构造环境。<br /><br />　　2. 手工运行setenv.bat<br /><br />　　在ms-dos提示符下，或在&ldquo;开始/运行&rdquo;中使用下列语句：<br /><br />　　setenv　 %98ddk% 　[free | checked]<br /><br />　　例如，在c:\98ddk\bin〉提示符下，键入setenv c:\98ddk free，其中第一个参数指定ddk被安装的文件夹，注意就缺省的安装来说，目的地是\98ddk；可选的第二个参数说明目标构造环境，缺省类型是free。<br /><br />　　3. 构造wdm驱动程序<br /><br />　　使用一套规则以指定驱动程序怎样被创建，所构造的实用程序可用来在windows 98和windows nt上建造wdm驱动程序平台。<br /><br />　　在windows 98 ddk被安装之后，wdm驱动程序构造树的工作例子和组成部分文件在硬盘上就可以得到了。驱动程序构造树根目录在%98ddk%\src。查看% 98ddk%\inc里makefile.def文件的内容，以及贯穿驱动程序构造树的各种的dirs文件和源文件的内容，可以利用这些代码作为工作实例。<br /><br />　　4.构造驱动程序<br /><br />　　在当前目录的驱动程序构造树中创建一个子目录，然后，运行构造实用程序。在构造树的当前目录中，构造实用程序可以自动创建出驱动程序的源代码。构造实用程序在windows 98 ddk例子驱动程序构造树的根目录下（%98ddk%\src）运行。例如，如果仅仅对为声音设备类构造的例子驱动程序有兴趣，可以设置当前目录到% 98ddk%\src\audio上，然后，运行构造实用程序。<br /><br />　　5.检查windows 98 ddk的安装<br /><br />　　经常使用的构造指令形式为build -cz ；从而使构造实用程序做相关文件的扫描，执行完整的创建，并生成错误记录。检查安装的方法为：在\〈destination〉\src目录运行build -cz，构造安装的例子驱动程序源代码的完整集。这个实用程序在构造驱动程序之前构造全部相关文件，自动建立文件关联关系。如果构造没有完成或报告过多的编译错误，则需要确认是否正确执行了以上的安装步骤。</font></div>]]></description>
		</item>
		    
		
		<item>
			<title>第三步&#8212;&#8212;设计开发篇</title>
			<link>http://itsais.blog.sohu.com/15038343.html</link>
			<comments>http://itsais.blog.sohu.com/15038343.html#comment</comments>
			<dc:creator>Home Piggy</dc:creator>
			<pubDate>Fri, 29 Sep 2006 10:01:07 +0800</pubDate>
			<category>IT 之生存</category>
			<guid>http://itsais.blog.sohu.com/15038343.html</guid>
			<description><![CDATA[<div><h3></h3></div><font><strong>　　<br />　　通过安装ddk和相应的开发软件，我们构造好了wdm驱动程序的开发环境。接着，我们就要深入进行设计与开发工作了。<br /><br /><br /></strong>　　■wdm 驱动程序的运作流程<br /><br />　　wdm本身的pnp管理器被抽象地提升到了root的地位。pnp管理器负责所有的总线驱动程序的加载。总线驱动程序则负责遍历所有位于总线上的设备，并且为每个设备创建相应的设备对象。当pnp管理器发现一个设备对象，就查找该对象对应的driver。并调用该driver的add device例程。如果driver不在内存中，就先加载，然后调用add device例程。 <br /><br />　　当然，总线本身并没有发出任何信号告诉pnp管理器自己的存在，所以，总线driver是在nt的安装时设定的。而isa设备并没有规范，因为需要kmd自己检查硬件存在及状态，所以它是老式kmd存在的惟一理由。这也是微软极力在新规范里取消isa总线的理由之一。wdm支持pnp协议和pm协议，而且实现时仅仅需要在major function里加入一些对pnp和pm事件响应的例程即可。<br /><br />　　 <br /><br />　　■驱动程序设计<br /><br />　　设计一个设备驱动程序，应该支持和其他相同类型设备的nt驱动程序相同的irp_mj_xxx和ioctl请求代码。如果设计一个中间层nt驱动程序，应该首先确认下层驱动程序所管理的设备，因为一个高层的驱动程序必须具有低层驱动程序绝大多数irp_mj_xxx例程入口。高层驱动程序在接到i/o请求时，在确定自身irp当前堆栈单元参数有效的前提下，设置好irp中下一个低层驱动程序的堆栈单元，然后再调用iocalldriver将请求传递给下层驱动程序处理。一旦决定好了驱动程序应该处理哪些 irp_mj_xxx，就可以开始确定驱动程序应该有多少个dispatch例程。当然也可以考虑把某些rp_mj_xxx处理的例程合并为同一例程处理。例如在changerdisk和vdisk里，对irp_mj_create和irp_mj_close处理的例程就是同一函数。<br /><br />　　一个驱动程序必须为它所管理的每个可能成为i/o请求的目标的物理和逻辑设备创建一个device对象。一些低层的驱动程序还可能要创建一些不确定数目的device对象。例如一个硬盘驱动程序必须为每一个物理硬盘创建一个device对象，同时还必须为每个物理磁盘上的每个逻辑分区创建一个 device对象。<br /><br />　　一个高层驱动程序必须为它所代表的虚拟设备创建一个device对象，这样更高层的驱动程序才能连接它们的 device对象到这个驱动程序的device对象。另外，一个高层驱动程序通常为它低层驱动程序所创建的device对象创建一系列的虚拟或逻辑 device对象。<br /><br />　　尽管可以分阶段来设计驱动程序，从而使一个处在开发阶段的驱动程序不必一开始就创建出所有它将要处理的所有 device对象，但从一开始就确定好最终要创建的所有device对象将有助于设计者所要解决的任何同步问题。另外，确定所要创建的device对象还有助于定义device对象的device extension的内容和数据结构。<br /><br />　　<br /><br />　　■驱动程序开发<br /><br />　　驱动程序的开发是一个从粗到细逐步求精的过程。nt ddk的src\目录下有一个庞大的模板代码，几乎覆盖了所有类型的设备驱动程序、高层驱动程序和过滤器驱动程序。在开始开发驱动程序之前，应该先在这个样板库下面寻找是否有和所要开发的类似类型的例程。<br /><br />　　例如若要开发光盘塔驱动程序，虽然ddk对光盘塔没有任何描述，但光盘塔是符合scsi-Ⅱ规范的scsi设备，可以在src\storage\ class目录中发现很多和scsi设备有关的驱动程序，例如scsi tape、scsi disk、scsi cdrom等驱动程序开发时，可以参考类似驱动程序，从而减化开发难度。<br /><br />　　下面笔者将进一步介绍开发驱动程序的基本步骤：<br /><br />　　l.编写驱动程序框架<br /><br />　　（1）首先编写一个driverentry例程，并在该例程里调用iocreatedevice来创建一个device对象。<br /><br />　　（2）写一个处理irp_mj_create请求的dispatch例程的基本框架。如果驱动程序创建了多于一个的device对象，则必须为irp_mj_close请求写一个例程，该例程通常情况下可以和dispatchcreate共用一个例程。<br /><br />　　（3） 编译连接驱动程序。<br /><br />　　2.测试驱动程序<br /><br />　　（1）首先在系统中安装好驱动程序，具体编译安装驱动程序请见下版的《编译安装篇》。<br /><br />　　（2）为nt逻辑设备名称和目标device对象名称之间建立起符号连接，在前面已经知道device对象名称对win32用户模式是不可见的，是不能直接通过api来访问的，win32 api只能访问nt逻辑设备名称。可以通过修改注册表来建立这两种名称之间的符号连接。运行regedt32.exe在\ hkey_local_machine\ system\ currentcontrolset\ control\ session manager\ dos devices下建立起符号连接，这种符号连接也可以在驱动程序里调用函数iocreatesymboliclink来创建。<br /><br />　　（3）完成以上所有的设置并检查无误后，我们必须重新启动windows系统。<br /><br />　　（4）编写一个简单的测试程序调用win32 api中的createfile函数，并以刚才命名的nt逻辑设备名打开这个设备。如果打开成功，则成功地写出了一个最简单的驱动程序了。支持更多的设备 i/o请求，例如驱动程序可能需要对irp_mj_read请求做出响应(完成后可用readfile 函数进行测试)。如果驱动程序需要能够手工卸载，那么还必须对irp_mj_close做出响应。为所需要处理的irp_mj_xxx写好处理例程，并在 driverentry里面初始化好这些例程入口。一个低层的驱动程序需要一个startio、isr和dpcforisr例程，可能还需要一个 synchcritsection例程，如果设备使用了dma，那么可能还需要一个adaptercontrol例程。<br /><br />　　对于高层驱动程序可能需要一个或多个iocompletion例程，最起码完成检查i/o状态块然后调用iocompleterequest的工作。如果需要，还要对 device extension数据结构和内容做些修改。有一点必须很清楚的，就是代码运行级别的问题，即irql，最常见的级别是passive_level、 apc_level、dispatch_level和dirql。<br /><br />　　在看nt ddk help中的函数说明的时候，要注意函数的可运行级别，比如有的函数只能在passive_level下运行，有的函数则可以在 dispatch_level以下级别运行，级别越高的时候，对代码的要求就越严格，比如在dispatch_level的时候，就不能使用分页内存。通常情况下应该尽可能让代码在低运行级别如passive_level下运行，在高级别下运行过长时间将导致系统效率降低、影响系统响应的实时性。但有时候自己无法控制运行的级别，例如在调用低层driver时使用iocalldriver，低层driver响应完毕后会执行completion例程，该例程运行的级别就是由低层driver来决定。因此在编写completion例程时，应尽量将这个函数设计成能在dispatch_level级别运行。<br /><br />　　依照以上开发步骤，我们可以设计出全新的wdm设备驱动程序。</font>]]></description>
		</item>
		    
		
		<item>
			<title>第四步&#8212;&#8212;编译安装篇</title>
			<link>http://itsais.blog.sohu.com/15038191.html</link>
			<comments>http://itsais.blog.sohu.com/15038191.html#comment</comments>
			<dc:creator>Home Piggy</dc:creator>
			<pubDate>Fri, 29 Sep 2006 09:59:32 +0800</pubDate>
			<category>IT 之生存</category>
			<guid>http://itsais.blog.sohu.com/15038191.html</guid>
			<description><![CDATA[<div><h3><br />&nbsp;</h3></div><div><span></span><font><!-- google_ad_section_start --><strong>　　设计开发好自己的wdm驱动程序后，为了运行该驱动程序，我们必须编译和安装它们。<br /><br /><br /></strong>　　■编译设备驱动程序的方法<br /><br />　　安装ddk后，在ddk程序组下有check和free两个编译环境，check环境用于编译带调试信息的驱动程序，free则是编译正式发布版本的环境。通常情况下设备驱动程序的编译采用命令行的方式。通过一定的设置可以在vc ++的集成环境下编译。<br /><br />　　一般来说，成功编译一个最基本的设备驱动程序需要四个文件，第一个是驱动程序，即c语言源程序文件(例如vdisk.c，注意下面所有的例子都是以 vdisk来说明)；第二个是rc文件(例如vdisk.rc)；第三个是sources文件；第四个文件是makefile.rc文件。sources 文件和make文件类似，用来指定需要编译的文件以及需要连接的库文件。这三个辅助文件都很简单，在ddk samples的每个例程里都有三个这样的文件，依样画瓢就能理解它们的结构和意义。<br /><br />　　1.举例分析<br /><br />　　以下以vdisk程序为例，设vdisk.rc代码为：<br /><br />　　/vdisk.rc/<br /><br />　　#include <br /><br />　　#include <br /><br />　　#define ver_filetype vft_drv<br /><br />　　#define ver_filesubtype vft2_drv_system<br /><br />　　#define ver_filedescription_str &quot;scsi vdisk driver&quot;<br /><br />　　#define ver_internalname_str &quot;vdisk.sys&quot;<br /><br />　　#define ver_originalfilename_str &quot;vdisk.sys&quot;<br /><br />　　#include &quot;common.ver&quot;<br /><br />　　/end of vdisk.rc/<br /><br />　　设备驱动程序一般都使用build实用程序来进行，build只是nmake外面的一个外包装程序。build本身其实相当简单，编译的大部分工作实际上由build传递给nmake来进行。<br /><br />　　/sources/<br /><br />　　targetname=vdisk<br /><br />　　targettype=driver<br /><br />　　targetpath=$(basedir)\lib<br /><br />　　targetlibs=$(basedir)\lib\\$(ddkbuildenv)\scsiport.lib<br /><br />　　includes=..\..\inc<br /><br />　　sources=vdisk.c vdisk.rc<br /><br />　　/end of sources/<br /><br />　　注意sources的文件名没有任何扩展名。<br /><br />　　# makefile<br /><br />　　#<br /><br />　　# do not edit this file!!! edit .\sources. if you want to add a new source<br /><br />　　# file to this component. this file merely indirects to the real make file<br /><br />　　# that is shared by all the driver components of the windows nt ddk<br /><br />　　#<br /><br />　　!include $(ntmakeenv)\makefile.def<br /><br />　　# end of makefile<br /><br />　　对所有驱动程序而言，makefile都是一样的，microsoft也警告不要编辑这个文件，如果需要，可以编辑修改sources文件达到同样的效果。对于设备驱动程序，所使用的c编译器基本上无一例外地选用vc++。<br /><br />　　2.编译的基本步骤<br /><br />　　(1)首先进入check或free编译环境，初始化ddk编译环境。<br /><br />　　(2)运行vc安装目录下bin目录下的vcvars32.bat，初始化vc++编译环境。<br /><br />　　(3)运行build.exe进行编译。<br /><br />　　<br /><br />　　■设备驱动程序的安装和启动<br /><br />　　1.添加注册表中的键值<br /><br />　　windows nt在引导的时候，通过扫描注册表构造驱动程序列表。这个列表既包括自启动的驱动程序，也包括需要手工启动的驱动程序。这个列表其实就是控制面板中设备 applet所列出来的所有设备。所有的设备驱动程序应该在注册表的hkey_local_machine\system\currentcontrol -<br /><br />　　set\services\下有相应的键值。下面以vdisk为例来说明如何添加键值：<br /><br />　　首先在 hkey_local_machine\ system\ current controlset\services\下添加一个子项vdisk，注意这里的名称应该和你的驱动程序名称一致。例如驱动程序名称是 vdisk.sys，那么这里的子项名称就是vdisk。然后在vdisk下添加以下键值：<br /><br /><table border="1"><tbody><tr><td>名称</td><td>数据类型</td><td>说明</td></tr><tr><td>type</td><td>reg_dword</td><td>驱动程序的种类</td></tr><tr><td>start</td><td>reg_dword</td><td>驱动程序的起始启动时间</td></tr><tr><td>errorcontrol</td><td>reg_dword</td><td>驱动装入失败的错误处理</td></tr><tr><td>group</td><td>reg_sz</td><td>驱动程序的组名</td></tr><tr><td>dependongroup</td><td>reg_multi_sz</td><td>所依赖的其他驱动程序</td></tr><tr><td>tag</td><td>reg_binary</td><td>同组内驱动程序装入顺序</td></tr><tr><td>parameters</td><td>(key)</td><td>驱动程序特定的参数键</td></tr></tbody></table><br />　　type值为1表示内核模式驱动程序；为2表示文件系统驱动程序。<br /><br />　　errorcontrol值为0表示日志记录错误并忽略；值为1表示日志记录错误并显示一个对话框；值为2表示日志记录错误，并用最后的正确配置重新启动；值为3表示日志记录错误，如果已经使用过正确配置，返回失败。<br /><br />　　在任何一个设备驱动程序中，上表中的前三项参数都是必需的。<br /><br />　　2.控制驱动程序的装入次序<br /><br />　　有时候控制多个驱动程序的装入次序是必要的。例如一套驱动程序中包括三个驱动程序，分别是jbchanger.sys，changerdisk.sys 和vdisk.sys。jbchanger和changerdisk是两个scsi类驱动程序，它们都依赖scsi小端口(mini port驱动程序)，同时changerdisk必须在jbchanger启动之后启动。vdisk是虚拟的磁盘驱动程序，它必须在jbchanger和 changerdisk都启动之后才能启动成功。<br /><br />　　3.驱动程序的start值<br /><br />　　上面注册表中驱动程序的start值控制驱动程序在系统启动的时间。目前，start可以取以下值，此外为该值留有扩展余地，以适用于新的要求：<br /><br />　　(l)0x0 (service_boot_start)：这个值指定本驱动程序应该由操作系统装入程序启动。一般的驱动程序不会采用本值，因为系统在这个时候几乎还没有启动，大部分系统尚不可用。<br /><br />　　（2）0x1 (service_system_start)：该值表示在操作系统装入后但同时初始化它自己时启动驱动程序。<br /><br />　　（3）0x2 (service_auto_start)：该值表示在整个系统启动并运行后由服务控制管理器装入。<br /><br />　　（4）0x3 (service_demand_start)：该值表示该驱动程序必须手工启动。可以通过控制面板的设备applet或者使用win32 api编程来启动。<br /><br />　　（5）0x4 (service_disabled)：表示本驱动程序被禁用。<br /><br />　　注意在调试驱动程序的时候，最好将start值设置为3来手工启动，这是因为如果设置为自动启动，而驱动程序在启动的过程中又发生了异常错误的话，可能导致系统不能启动。<br /><br />　　如果没有紧急恢复盘，首先可以尝试在启动的时候选择用已知的配置来启动系统，看是否能启动成功。如果失败，可以用dos启动后到\%systemroot%\system32\drivers目录下将出现问题的驱动程序删除，然后系统就可以启动了。<br /><br />　　不过如果nt安装在ntfs分区，dos启动后将看不到这个分区，这样就必须将硬盘挂到另一nt系统上来删除这个文件了。通过设置start可以控制驱动程序在不同的时候启动。但如果要解决依赖性问题，则需要使用group和dependongroup值。<br /><br />　　首先要确定自己的驱动程序使用的group名，系统有一些定义好的组名，对于当前系统存在的组名，可以观察注册表的\hkey_local_machine\system\currentcontrol-<br /><br />　　set\control\servicegrouporder\list的键值。例如该值可以设置为：<br /><br />　　&hellip;<br /><br />　　scsi miniport<br /><br />　　port<br /><br />　　primary disk<br /><br />　　scsi class<br /><br />　　scsi cdrom class<br /><br />　　filter<br /><br />　　boot file system<br /><br />　　&hellip;<br /><br />　　这里每一行都是一个group名，一般来说某个驱动程序都属于某一个group。系统启动时按照该list下组的顺序依次启动各组里的驱动程序。例如 jbchanger和changerdisk都属于scsi class组。如果你觉得该表中的组名都不合适，可以在该list的适当位置中添加新的组名。<br /><br />　　dependongroup值控制本驱动程序启动的时候必须先启动另一组的驱动程序，例如jbchanger和changerdisk的启动就依赖于scsi miniport组。因此jbchanger和changerdisk的dependongroup值都为scsi miniport。<br /><br />　　4.修改注册表的方法<br /><br />　　在注册表里这些值可以手工修改，也可以自己编程利用win32 api进行添加，同时也可以用ini文件的方式来添加。下面是一个ini(文件名为vdisk.ini)文件的例子。<br /><br />　　\registry\machine\system\currentcontrol<br /><br />　　set\services\vdisk<br /><br />　　type=reg_dword 0x00000001<br /><br />　　start=reg_dword 0x00000003<br /><br />　　errorcontrol=reg_dword 0x00000001<br /><br />　　group=scsi class<br /><br />　　parameters<br /><br />　　driveletter=n:<br /><br />　　然后以vdisk.ini为参数运行regini.exe。就会自动在注册表里添加相应的项。<br /><br />　　在注册表里添加好这些项后，必须重新启动系统，这样所添加的设备驱动程序才能在控制面板的设备applet中列出来，再进行其他操作。<br /><br />　　5.启动设备驱动程序<br /><br />　　在添加修改好注册表后，重新启动系统，如果选择的start值是0、1、2，如果一切正常，驱动程序就应该已经启动起来了。可以观察控制面板的设备applet中的设备列表。如果start选择的是3，则可以直接启动。<br /><br />　　6.调试工具<br /><br />　　目前nt驱动程序的调试工具只有windbg和softice，windbg的使用需要双机环境，强力推荐使用softice。注意目前国内ftp服务器上的softice 3.2 for nt的setup.ins文件是错误的，它将导致安装程序不认识你的nt，可以用3.0的setup.ins文件替代3.2的setup.ins，这样就可以安装成功。</font></div>]]></description>
		</item>
		    
		
	</channel>
</rss>
