Win-API -1 文件相关

Win-API -1 文件相关

在Windows系统中,创建和打开文件都是使用API函数CreateFile,CreateFile通过指定不同的参数来表示是新建一个文件,打开已经存在的文件,还是重新建立文件等。读写文件最为直接的方式是使用ReadFile和WriteFile函数,也可以使用文件镜像,获取文件大小一般使用GetFileSize函数,也可以使用GetFileAttributesEx等函数(在上节介绍)。读写文件、获取文件大小之前都需要使用CreateFile创建或打开的文件,获得文件句柄。 在文件操作中,文件句柄是一个关键的概念。文件句柄惟一标识了一个文件,ReadFile、WriteFile、GetFileSize等函数是使用文件句柄作为参数来表示,用户需要读、写、获取大小的文件是哪一个文件。在对文件进行操作前,都必须要使用CreateFile获得文件句柄。

按钮事件的找法

按钮事件的找法

调试软件,最重要的就是下断点,那么如何下断点,就是一门重要的技巧.比如:弹提示框,就下MessageBoxA,注册表的,就下RegOpenKeyA等等.当然,能直接下到按钮事件,当然更为方便,因为到了按钮事件后,很快就会到达核心代码,离你的破解也就不远了.本文就总结一下各类语言找按钮事件的方法,当然也可以借助工具,如VBexplorer等等.

基于FPGA的PCIe接口设计—01_PCIe基本概念

基于FPGA的PCIe接口设计—01_PCIe基本概念

PCIE总线技术,也叫计算机内部总线技术”Peripheral Component Interconnect”,即外围组件互联,其前身是PCI总线,但PCI总线真正应用是随着Intel的Pentium处理器诞生而开始的,在1994年的时候,以绝对的优势,战胜了VESA总线,成为了当时的标准,从此,几乎所有的外围设备,从硬盘控制器到声卡,网卡,都用PCI插槽。 在过去的十几年中,PCI总线得到了广泛的应用,虽然PCI总线,在往后的10几年当中也有所发展,先后出现了64位的PCI-/66MHz、PCI-X,但是随着微处理器、存储器和互联网络的发展,并行数据传输的PCI总线技术逐渐成为系统整体性能提升的瓶颈,首先是高性能的图像处理芯片从PCI总线分离出来,形成单独一种总线技术,那就是AGP总线,随着千兆以太网和其他高带宽设备在消费级系统上的出现,PCI133MB/s的带宽明显不能满足这些应用的需求。而串行点对点的PCI Express总线的提出彻底改变了原来PCI总线的并行技术,克服了PCI总线在系统带宽、传输速度等方面的固有缺陷。 PCIe总线规范 总线频率 单Lane的峰值带宽 编码方式 单个Lane带宽 1.x 1.25GHz 2.5GT/s 8/10b编码 250MB/s 2.x 2.5GHz 5GT/s 8/10b编码 500MB/s 3.0 4GHz 8GT/s 128/130b编码 1GB/s 根据PCIE规范的定义,IP核包含以下几个功能:产生并处理传输层数据包(TLPs),流控制管理,初始化及电源管理,数据保护,错误检查及重试,串行化,去串行化等功能。根据协议,该核包括如下三层: 传输层(处理层,事务层):传输层是PCIE的最上层,它的首要功能是接收、缓存和传输传输层数据包,并负责处理层数据包的合成与分解,进行流量控制管理,数据包队列管理以及利用对虚拟通道提供服务质量功能。 数据链路层:数据链路层如同联系传输层和物理层的媒介,它的首要功能是为TLPs在两层之间的传输提供可靠性支持,他可以进行错误检查以及恢复,产生并解析数据链路层包(DLLP),DLLP被用来在两个互联的PCIE的数据链路层之间传输信息,从而实现电源管理,流量控制以及TLP确认等功能。 物理层:物理层可分为逻辑物理层和电气物理层,逻辑物理层完成对PLP的合成和分解,8b/10b编码,10b/8b解码,并串转换和串并转换。电气物理层负责所有通道的数据差分驱动传输与接收。 [/toggle]

HashAlgorithm 文件比较

HashAlgorithm 文件比较

在用C#对文件进行copy操作的时候,为了保险起见,我们应比较一下copy后的内容是否与原内容完全一致。如果是比较文件所有内容,那就有点out啦。现在我们就用签名方式来检查一下吧。 一、HashAlgorithm类 HashAlgorithm类提供了两种Hash算法,可以用来验证文件是否被修改过。算法包括SHA1,SHA256,SHA384,SHA512和MD5。 二、给某个文件用MD5方式签名 public static string GetSignature(string strFileName) { try { if (!File.Exists(strFileName)) return string.Empty; //声明HashAlgorithm对象,MD5可以改为SHA1,SHA512等 using(HashAlgorithm hash = HashAlgorithm.Create("MD5")) { //开启档案 using (Stream ms = new FileStream(strFileName, FileMode.Open)) { //产生加密的密码 byte[] myHash = hash.ComputeHash(ms); //返回字符串 return BitConverter.ToString(myHash); } } } catch (System.Exception ex) { //WriteSystemMessage(ex.Message); } return string.Empty; } 三、对字符串加密 HashAlgorithm ha = HashAlgorithm.Create("MD5"); byte[] byData = Encoding.Default.GetBytes(strTest); byte[] myHash = ha.ComputeHash(byData); return BitConverter.ToString(myHash);

Java-12 – 组合

Java-12 – 组合

我们已经尝试去定义类。定义类,就是新建了一种 类型(type) 。有了类,我们接着构造相应类型的对象。更进一步,每个类型还应该有一个清晰的接口(interface) , 供用户使用。我们可以在一个新类的定义中使用其他对象。这就是 组合(composition) 。组合是在Java中实现程序 复用(reusibility)的基本手段之一。

Java-11 – JAVA基础编程练习

Java-11 – JAVA基础编程练习

【程序21】题目:求1+2!+3!+...+20!的和 程序分析:此程序只是把累加变成了累乘。 1、先求该项阶乘的值 2、累加求 public class Programme21 {     public static void main(String[] args) {        int sum=0;//总和        for (inti = 1; i <= 20;i++) {            sum+=factorial(i);//累加        }        System.out.println(""+sum);     }     //求阶乘的实现     private static int factorial(inti) {        //求阶乘        int mult=1;         for (intj=1 ; j <= i;j++) {            mult*=j;         }        returnmult;//返回阶乘结果     } }

Java-10 – 实施接口

Java-10 – 实施接口

在 封装与接口 中,private关键字封装了对象的内部成员。经过封装,产品隐藏了内部细节,只提供给用户 接口(interface) 。接口是非常有用的概念,可以辅助我们的抽象思考。在现实生活中,当我们想起某个用具的时候,往往想到的是该用具的功能性接口。比如杯子,我们想到加水和喝水的可能性,高于想到杯子的材质和价格。也就是说,一定程度上,用具的接口等同于用具本身。内部细节则在思考过程中被摒弃。在public和private的封装机制,我们实际上同时定义了类和接口,类和接口混合在一起。Java还提供了 interface 这一语法。这一语法将接口 从类的具体定义中剥离出来,构成一个独立的主体。

Java-09 – 类封装实例

Java-09 – 类封装实例

封装最主要的功能在于我们能修改自己的实现代码,而不用修改那些调用我们代码的程序片段。适当的封装可以让程式码更容易理解与维护,也加强了程式码的安全性。 封装的优点 : 1. 良好的封装能够减少耦合。 2. 类内部的结构可以自由修改。 3. 可以对成员变量进行更精确的控制。 4. 隐藏信息,实现细节。

Java-08 – 封装与接口

Java-08 – 封装与接口

总结之前的内容,对象(object)指代某一事物,类(class)指代象的类型。对象可以有状态和动作,即数据成员和方法。 到现在为止,数据成员和方法都是同时开放给内部和外部的。在对象内部,我们利用this来调用对象的数据成员和方法。在对象外部,比如当我们在另一个类中调用对象的时,可以使用 对象.数据成员 和 对象.方法() 来调用对象的数据成员和方法。 我们将要 封装(encapsulation) 对象的成员(成员包括数据成员和方法),从而 只允许从外部调用部分的成员。利用封装,我们可以提高对象的易用性和安全性。

Java-07 – JAVA基础编程练习

Java-07 – JAVA基础编程练习

【程序11】题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 程 序 分 析:可填在百位、十位、个位的数字都是1、2、3、4。这里要用3个for循环,用if判断条件是否符合,符合条件的数字打印出来,并计算个数总和

Java-06 – 构造器与方法重载

Java-06 – 构造器与方法重载

在 方法与数据成员 中,我们提到,Java中的对象在创建的时候会 初始化(initialization) 。初始化时,对象的数据成员被赋予初始值。我们可以 显式初始化。如果我们没有给数据成员赋予初始值,数据成员会根据其类型采用 默认初始值 。 显式初始化要求我们在写程序时就确定初始值,这有时很不方便。我们可以使用 构造器(constructor)来初始化对象。构造器可以初始化数据成员,还可以规定特定的操作。这些操作会在创建对象时自动执行。

Java-05 – 方法与数据成员

Java-05 – 方法与数据成员

我们初步了解了对象(object)。对象中的 数据成员 表示对象的 状态 。对象可以执行 方法 ,表示特定的 动作 。 此外,我们还了解了 类(class) 。同一类的对象属于相同的 类型(type) 。我们可以定义类,并使用该定义来产生对象。 我们进一步深入到对象。了解Java中方法与数据成员的一些细节。

Java-04 -面向对象

Java-04 -面向对象

“对象”是计算机抽象世界的一种方式。“面向对象”可以用很多方式表达。下面是一种并不精确,但比较直观的理解方式: 世界上的每一个事物都可以称为一个 对象(object) ,比如张三。对象有 身份(Identity) , 状态(State) 和 行为(Behavior) 。 1-对象的状态由 数据 成员(data member) 表示。数据成员又被称作 域(field) 。我们用其他对象作为该对象的数据成员。比如一个表示身高的整数,比如一个鼻子。 2-对象的行为由 成员方法(member method) 表示。我们简称为 方法(method) 。一个对象可以有多个方法,比如 呼吸,睡觉 。 3-对象可以归 类(class) ,或者说归为同一 类型(type) 。同一类型的对象有相同的方法,有同类型的数据成员。某个类型的一个对象被称为该类型的一个 实例(instance)