好好学习,天天向上
<p><strong>在Windows上面32位与64位的区别有:</strong></p> <p>1.指针大小的区别,sizeof(int *)在32bit下面是4个字节,在64bit下面是8个字节<br> 2.size_t的区别,size_t在32bit下面是4个字节的范围,在64bit下面是8个字节的范围<br> 3.地址空间的区别,在32bit下面,最大地址空间是4GB,在6
<div id="blog_text" class="cnt" style="line-height:20px; font-family:Tahoma; color:#6e5e3f; font-size:12px"> <p style="line-height:normal"><span style="color:#3366ff">1、COM对象的理解</span></p> <p st
<p><span style="color:#099bf5">本文为刚刚接触COM的程序员提供编程指南,解释COM服务器内幕以及如何用C++编写自己的接口。继上一篇COM编程入门之后,本文将讨论有关 COM服务器的内容,解释编写自己的COM接口和COM服务器所需要的步骤和知识,以及详细讨论当COM库对COM服务器进行调用时,COM服务器运行的 内部机制。<br> 如果你读过上一篇文章
<p style="padding-bottom:0px; margin:1em 0px 0.5em; padding-left:0px; padding-right:0px; padding-top:0px"> <span style="color:#03a7fb"><span style="font-size:14px">本文的目的是为刚刚接触COM的程序员提供编程指南,并帮助他们理
<p>COM接口指针很危险,因为使用过程中需要每一个使用者都要严格并且正确的AddRef和Release,一旦出现问题,就会造成对象不能被正常释放,或者对象被重复删除,造成程序崩溃。所以使用COM接口,必须小心翼翼才行。<br> 但是,即使所有的代码中,都正确的AddRef和Release,也不一定能保证万无一失,例如:<br> void SomeApp( IHello * pHell
<p> </p> <p style="padding-bottom:0px; margin:1em 0px 0.5em; padding-left:0px; padding-right:0px; padding-top:0px"> <span style="color:#03a7fb"><span style="font-size:14px">本文的目的是为刚刚接触COM的程序员提供编
<span style="widows:2; text-transform:none; text-indent:0px; border-collapse:separate; font:18pt Simsun; white-space:normal; orphans:2; letter-spacing:normal; color:#000000; word-spacing:0px"><spa
<p>现在流行的进程线程同步互斥的控制机制,其实是由最原始最基本的4种方法实现的。由这4种方法组合优化就有了.Net和Java下灵活多变的,编程简便的线程进程控制手段。</p> <p> 这4种方法具体定义如下 在《操作系统教程》ISBN 7-5053-6193-7 7-5053-6193-7 一书中可以找到更加详细的解释</p> <p>
<p>“信号量内核对象”用于对资源进行计数。 </p> <p> 在信号量内核对象内部,和其他内核对象一样,有一个使用计数,该使用计数表示信号量内核对象被打开的次数。</p> <p> 信号量内核对象中还有两个比较重要的数据,分别表示最大资源数和当前资源数。最大资源数表示能够管理的资源的总数,当前资源数表示目前可以被使用的资源数量。</p> <p> </p> <p> 可以使用Cr
<p><span style="font-size:18pt">NOTE0——<span style="color:#ff0000">何为上下文切换</span></span></p> <p><span style="font-size:18pt"><span style="color:#ff0000">每一个线程都有一个上下文</span>。<span style="color:#ff
<p><span style="font-size:18pt"><strong>Note 0:</strong></span><br><span style="font-size:18pt">了<span style="color:#ff0000">进程实际是由两个组件组成的:一个进程内核对象和一个地址空间.类似地,线程也由两个组件组成:</span></span><br><span st
<p><span style="font-size:18pt"><strong>Note 1:</strong></span><br><span style="color:#ff0000; font-size:18pt">一个线程可以调用以下两个函数来获取和设置其进程的当前驱动器和目录:</span><br><span style="font-size:18pt">DWORD <span
<p><span style="font-size:18pt">最理想的比较字符串函数是CompareString(Ex)和CompareStringOrdinal。对于需要以符合用户语言习惯的方式向用户显示的字符串,请用CompareString(Ex)进行比较。CompareString函数的原型如下:</span><br><span style="font-size:18pt"><e
<p>百度上比较好的解释是:SSDT的全称是System Services Descriptor Table,系统服务描述符表。这个表就是一个把ring3的Win32 API和ring0的内核API联系起来。SSDT并不仅仅只包含一个庞大的地址索引表,它还包含着一些其它有用的信息,诸如地址索引的基地址、服务函数个数等。</p> <p> 说白了,SSDT就是把系统两个不同级别
简介<br> 有时在开发中,会遇到这样一种情况,当非常需要对某些内核函数进行挂钩时,而常规基于PE的挂钩,往往达不到目的。在本文中将要探讨的,是怎样直接挂钩内核函数,另外,在示例中,还要演示在系统中显示为一个基本磁盘的可移动USB存储设备,并在其上创建及管理多个分区(因为这样或那样的原因,Windows既不允许,也不能识别可移动存储设备上的多个分区,所以我们要“欺骗”一
<p>Q 在NT/2000/XP中,如何读取CMOS数据? </p> <p>Q 在NT/2000/XP中,如何控制speaker发声? </p> <p>Q 在NT/2000/XP中,如何直接访问物理端口? </p> <p>A 看似小小问题,难倒多少好汉!</p> <p>NT/2000/XP从安全性、可靠性、稳定性上考虑,应用程序和操作系统是分开的,操作系统代码运行在核心态,有权访问
<p>Q 用IOCTL_DISK_GET_DRIVE_GEOMETRY或IOCTL_STORAGE_GET_MEDIA_TYPES_EX只能得到很少的磁盘参数,我想获得包括硬盘序列号在内的更加详细的信息,有什么办法呀? </p> <p>A 确实,用你所说的I/O控制码,只能得到最基本的磁盘参数。获取磁盘出厂信息的I/O控制码,微软在VC/MFC环境中没有开放,在DDK中可以发现一些线索
<p>Q 前几次我们讨论的都是设备名比较清楚的情况,有了设备名(路径),就可以直接调用CreateFile打开设备,进行它所支持的I/O操作了。如果事先并不能确切知道设备名,如何去访问设备呢? </p> <p>A 访问设备必须用设备句柄,而得到设备句柄必须知道设备路径,这个套路以你我之力是改变不了的。每个设备都有它所属类型的GUID,我们顺着这个GUID就能获得设备路径。 </p>
<p>Q DOS命令DISKCOPY给我很深的印象,现在也有许多“克隆”软件,可以对磁盘进行全盘复制。我想,要制作磁盘镜像文件,DeviceIoControl应该很有用武之地吧? </p> <p>A 是的。这里举一个制作软盘镜像文件,功能类似于“DISKCOPY”的例子。</p> <p>本例实现其功能的核心代码如下: </p> <p>// 打开磁盘<br> HANDLE Open
<p class="bhw98"><strong class="bhw98">Q</strong> 在MSDN的那个demo中,将设备名换成“A:”取A盘参数,先用资源管理器读一下盘,再运行这个程序可以成功,但换一张盘后就失败;换成“CDROM0”取CDROM参数,无论如何都不行。这个问题如何解决呢?</p> <p class="bhw98"><strong class="bhw98">
<p>Q 在NT/2000/XP中,我想用VC编写应用程序访问硬件设备,如获取磁盘参数、读写绝对扇区数据、测试光驱实际速度等,该从哪里入手呢? </p> <p>A 在NT/2000/XP中,应用程序可以通过API函数DeviceIoControl来实现对设备的访问—获取信息,发送命令,交换数据等。利用该接口函数向指定的设备驱动发送正确的控制码及数据,然后分析它的响应,就可以达到我们的目的
本文分三部分来介绍如何构造一个简单的USB过滤驱动程序,包括“基本原理”、“程序的实现”、“使用INF安装”。此文的目的在于希望读者了解基本原理后,可以使用除DDK以外最流行也最方便的驱动开发工具DriverStudio来实现一个自己的过滤驱动,并正确地安装。<br><br> 一、基本原理 <br> 我们知道,WDM(和KDM)是分层的,在构造设备栈时,IO管理器可以使一个设备对
<p><span style="font-size:9pt">呵呵,搞点突兀的标题而已。其实说的还是如何使用WinDBG和VMware来搭建调试内核的环境而已,这些网上已经有数不清的教程了,不过我喜欢自己亲手写一下。第一,把这个过程写一遍能加深印象,就算以后忘记了也可以有笔记查找,快速想起来。第二、网上的教程很多都是互相抄来抄去,连错误也抄过去了。很典型一个错误就是Baud Rate,前面
<ol> <li>首先你要配置好测试环境:参考<a target="_blank" href="http://www.leyond.info/2010/06/04/vmware-windgb-win7-kernel-debug/">VMware+Windgb+Win7 内核驱动调试</a> </li> <li>在你的主机上配置Symbols <ul> <li>配置sympath,C:\U
<p>参考FileSpy写的文件监控程序,但比它的抽象多了。可能瑞星的文件驱动也是这样写的,否则它为什么老阻止我安装驱动呢。测试程序是一个命令行小程序,负责打开设备,开启监控和关闭监控,运行时开启和关闭两次。</p> <p> </p> <p>在DebugView中查看输出信息,我只是想看看能不能达到目的,所以信息量很少。</p> <p> </p> <p>在驱动程序中开启和关闭监控的
<table class="table2 " cellspacing="2" cellpadding="5" width="100%"><tbody> <tr> <td class="td12"> <p>摘要: 我想做一个unlocker一样的程序,不管这个文件有没有被使用,先实现删除它。在查资料过程中,就知道了如果不访问磁盘扇区的话,除非写驱动才能做到。奈何时间有限,工作匆忙,
<p class="p0"><span style="font-family:黑体">理解Windows NT驱动程序最重要的概念之一就是驱动程序运行时所处的“执行上下文”。理解并小心地应用这个概念可以帮助你构建更快、更高效的驱动程序。</span></p> <p class="p0"> </p> <p class="p0"><span style="font-family:黑体">N
<p>下面是开发人员在使用 Windows NT 设备驱动程序时应当避免的事项列表: </p> <p>1. 一定不要在没有标注 I/O 请求数据包 (IRP) 挂起 (IoMarkIrpPending) 的情况下通过调度例程返回 STATUS_PENDING。 <br> 2. 一定不要通过中断服务例程 (ISR) 调用 KeSynchronizeExecution。 它会使系统
<p class="p0" style="margin-top:0pt; text-indent:21pt; margin-bottom:0pt"><span style="font-family:黑体"><span style="font-size:10.5pt">在不同的场合,很多驱动编写人员需要在驱动和用户程序间共享内存。两种最容易的技术是:</span><span style="f
<h1 id="185316" class="title"> <a target="_blank" name="t0"></a>COM组件</h1> <div class="clear"></div> <div class="mod-top"> <div class="card-summary nslog-area"> <div class="card-summary-conten
<h2 class="headline-1"> <a target="_blank" name="t0"></a><span class="headline-content">WaitForSingleObject函数</span> </h2> <div class="para"><strong>VC声明</strong></div> <div class="para">DWORD W
<p style="background:#fbfbfb"><span style="font-family:宋体"><span style="color:#333333">相信很多人都对网络编程感兴趣,下面我们就来介绍,在网络编程中应用最广泛的编程接口</span><span style="color:#333333">Winsock API.</span></span></p> <p
<p>通过在网上搜索大量的资料,终于把环境搭建起来。对于我这样的驱动新手来说,理应把高手们的东西整理并总结下,方便以后的初学者。</p> <p><span style="font-size:13px">这三个软件的安装顺序没有具体规定,也有高手推荐的顺序,我自己也是重复安装卸载,个人的顺序是:VS2005、DriverStudio3.2、<span style="font-size:12
<p>10.04<br> 先将 ubuntu server 的 iso 放到优盘上,然后在提示无法找到光驱时,按 alt+f2 打开一个新的 console 窗口,将 iso mount 上,具体操作如下:<br> ls /dev/sd*</p> <p>mkdir /mnt/usb /mnt/iso<br> mount -t vfat /dev/sdc1 /mnt/usb<br>
<p>target ... : prerequisites ...<br> command</p> <p>prerequisites中如果有一个以上的文件比target文件要新的话,command所定义的命令就会被执行。<br> 这就是Makefile的规则。也就是Makefile中最核心的内容。</p> <p>一个示例 test.c<br> #include<stdio.
<p>struct dirent中的几个成员:</p> <p>d_type:4表示为目录,8表示为文件</p> <p>d_reclen:16表示子目录或文件,24表示非子目录</p> <p>d_name:目录或文件的名称</p> <p>具体代码如下,仅供参考<br> #include <br> #include <br> #include </p> <p>void List
<p>TIMER_Handle TimerHandle0;<br> void timer1()<br> {<br> ////////////定时器///////////////////////<br> TimerHandle0 = TIMER_open(TIMER_DEV0, TIMER_OPEN_RESET);<br> IRQ_setVecs(vectors);<br>
<p><br> void fifoint_isr(); <br> extern far void vectors(); </p> <p>void int_init()<br> {<br> IRQ_resetAll();<br> IRQ_setVecs(vectors);<br> IRQ_nmiEnable();<br> IRQ_global
<p><br> void VP1_EDMA(int displayMode,unsigned int w,unsigned int h)<br> {<br> <br> unsigned int i=0,k=0;<br> EDMA_Handle handle;<br> EDMA_Handle handle2;<br> EDMA_Config myEdmaConf
<p><br> void wirteEPROM()<br> {<br> //#include <stdio.h><br> unsigned short bufeprom[30],i,val;<br> FILE *fp;<br> fp = fopen("d:\\cpci6370.eep","rt+");<br> i=0;<br> i= PCI
<br> void CTextOnbmpDlg::OnButton2() <br> {<br> // TODO: Add your control notification handler code here<br> FILE *fp=fopen("d:\\temp\\pic16001200\\000.bmp", "rb");<br> if(fp == 0)<br>
<p> </p> <p><br> //打开位图文件,得到位图句柄<br> HBITMAP OpenBmpFile(HDC hDC, LPSTR lpszFileName)<br> {<br> HBITMAP hBmp = NULL;<br> //读位图文件,得到位图句柄<br> HANDLE hFile = CreateFile(<
<strong></strong> <div id="contentSub"> <strong>Shell脚本</strong>编程学习入门是本文要介绍的内容,我们可以使用任意一种文字编辑器,比如gedit、kedit、emacs、vi等来编写<strong>shell脚本</strong>,它必须以如下行开始(必须放在文件的第一行):</div> <div id="contentSu
<span id="zoom" class="a14c"></span> <p style="text-indent:2em">从程序员的角度来看, Shell本身是一种用C语言编写的程序,从用户的角度来看,Shell是用户与Linux操作系统沟通的桥梁。用户既可以输入命令执行,又可以利用 Shell脚本编程,完成更加复杂的操作。在Linux GUI日益完善的今天,在系统管理等领域,Sh
<div class="bct fc05 fc11 nbw-blog ztag">SDL提供了针对YUV格式<u><strong><font color="#656d77">数据</font></strong></u>的直接写屏操作。废话不多说,直接上代码吧<br><br>/**<br> * file showyuv.c<br> * author: rare<br> * date: 2009/
<div class="bct fc05 fc11 nbw-blog ztag"> <br>DWORD ThreadFun()<br>{<br> //用mfc窗口句柄创建一个sdl window<br> SDL_Window * pWindow = SDL_CreateWindowFrom( (void *)( GetDlgItem(IDC_STATIC1)->GetSafe
<p>海思网络摄像机常见芯片大概有</p> <p>Hi3510 Hi3511 Hi3512 Hi3515 Hi3516 Hi3520 </p> <p>海思官方提供了SDK, 开发板在<a target="_blank" href="http://shop64540671.taobao.com/" rel="nofollow">taobao</a>上都可以买到,非常便宜,</p> <p
<p>1.编译内核(可选)</p> <p>make ARCH=arm CROSS_COMPILE=arm-hisiv200-linux- menuconfig<br> make ARCH=arm CROSS_COMPILE=arm-hisiv200-linux- uImage<br> cp arch/arm/boot/uImage ...</p> <p> </p> <p>2.烧写
<div>型号为K4B4G1646B-HCKO</div> <div><br></div> <div>1.修改DDRC_RNKCFG 为 0x142</div> <div><br></div> <div>2.修改arch/arm/mach-godnet/include/mach/vmalloc.h 扩大 vmalloc 区域为 0x7e000000</div> <div><br>
0.板子上已有Nor Flash了,添加的Nand Flash型号为MT29F128G08CJABAWP,进系统挂接NAND作为一个分区 <div> <div><br></div> <div>1.修改uboot</div> <div>u-boot-2010.06/drivers/mtd/nand/nand_spl_ids.c<br> 第108行,添加这个NAND Flash</d