hook ReadFile in c#

问题描述

Sir:IhookReadFileasfollowing:[System.Runtime.InteropServices.DllImport("kernel32")]publicstaticexternboolReadFile(IntPtrhFile,byte[]lpBuffer,uintnNumberOfBytesToRead,refuintlpNumberOfBytesRead,IntPtrlpOverlapped);//myhookfunctionboolMyReadFile(IntPtrhFile,byte[]lpBuffer,uintnNumberOfBytesToRead,refuintlpNumberOfBytesRead,IntPtrlpOverlapped){}whenprogrampassMyReadFile(),thelengthoflpBufferisonly1,butthevalueofnNumberOfBytesToReadis4096,why?thankswei_future@sina.com

解决方案

解决方案二:
MARKhavn’tincvokeReadFilefunction
解决方案三:
下面的示例通过读取并显示一个文本文件来演示WindowsReadFile函数。ReadFile函数需要使用unsafe代码,因为它需要一个作为参数的指针。传递到Read函数的字节数组是托管类型。这意味着公共语言运行库(CLR)垃圾回收器可能会随意地对数组使用的内存进行重新定位。为了防止出现这种情况,使用fixed来获取指向内存的指针并对它进行标记,以便垃圾回收器不会移动它。在fixed块的末尾,内存将自动返回,以便能够通过垃圾回收移动。此功能称为“声明式锁定”。锁定的好处是系统开销非常小,除非在fixed块中发生垃圾回收(但此情况不太可能发生)。classFileReader{constuintGENERIC_READ=0x80000000;constuintOPEN_EXISTING=3;System.IntPtrhandle;[System.Runtime.InteropServices.DllImport("kernel32",SetLastError=true)]staticexternunsafeSystem.IntPtrCreateFile(stringFileName,//filenameuintDesiredAccess,//accessmodeuintShareMode,//sharemodeuintSecurityAttributes,//SecurityAttributesuintCreationDisposition,//howtocreateuintFlagsAndAttributes,//fileattributesinthTemplateFile//handletotemplatefile);[System.Runtime.InteropServices.DllImport("kernel32",SetLastError=true)]staticexternunsafeboolReadFile(System.IntPtrhFile,//handletofilevoid*pBuffer,//databufferintNumberOfBytesToRead,//numberofbytestoreadint*pNumberOfBytesRead,//numberofbytesreadintOverlapped//overlappedbuffer);[System.Runtime.InteropServices.DllImport("kernel32",SetLastError=true)]staticexternunsafeboolCloseHandle(System.IntPtrhObject//handletoobject);publicboolOpen(stringFileName){//opentheexistingfileforreadinghandle=CreateFile(FileName,GENERIC_READ,0,0,OPEN_EXISTING,0,0);if(handle!=System.IntPtr.Zero){returntrue;}else{returnfalse;}}publicunsafeintRead(byte[]buffer,intindex,intcount){intn=0;fixed(byte*p=buffer){if(!ReadFile(handle,p+index,count,&n,0)){return0;}}returnn;}publicboolClose(){returnCloseHandle(handle);}}classTest{staticintMain(string[]args){if(args.Length!=1){System.Console.WriteLine("Usage:ReadFile<FileName>");return1;}if(!System.IO.File.Exists(args[0])){System.Console.WriteLine("File"+args[0]+"notfound.");return1;}byte[]buffer=newbyte[128];FileReaderfr=newFileReader();if(fr.Open(args[0])){//AssumethatanASCIIfileisbeingread.System.Text.ASCIIEncodingEncoding=newSystem.Text.ASCIIEncoding();intbytesRead;do{bytesRead=fr.Read(buffer,0,buffer.Length);stringcontent=Encoding.GetString(buffer,0,bytesRead);System.Console.Write("{0}",content);}while(bytesRead>0);fr.Close();return0;}else{System.Console.WriteLine("Failedtoopenrequestedfile");return1;}}}
解决方案四:
什么情况?

时间: 2024-10-22 09:24:45

hook ReadFile in c#的相关文章

VB.net中HOOK的应用(CNET中文网)

中文 VB.net中HOOK的应用 在vb.net版做版主有一阵子了,一直在思考怎么能更好地帮助大家理解vb.net的新概念与编程方法.小小的回贴很难说清楚很多问题,所以利用一下文档中心这片广阔的天地,进行更深入的探讨.本人水平有限,不免错误与遗漏多多,请朋友们批评指正. 基本的想法是,写一系列的文章,讲解一下vb.net与vb的区别,vb.net中的新概念,vb.net控件的使用,vb.net解决问题的新方法.如果时间允许,我希望自己能快快开展这个工作.更重要的是网友们的支持与鼓励会是我继续的

VB.net中HOOK的应用(一)

本文不是讲解Hook原理的文章,仅是讨论一下在vb.net如何调用Hook功能,以及vb.net中API使用的变化问题. 由于Hook种类较多,本文中以最常用的键盘Hook为例进行分析. 一.先来看一下在vb中是如何实现的.截的是空格键.表现的目标是:一个form,上面有一个textbox,不管焦点是否落在textbox里,按空格键,不会在textbox中输入一个空格,而是变成在textbox中写入一句话:"HOOK成功!" 1.在一个Module中写入下列代码: 调用的API的申明:

vb.net如何调用Hook

本文不是讲解Hook原理的文章,仅是讨论一下在vb.net如何调用Hook功能,以及vb.net中API使用的变化问题.由于Hook种类较多,本文中以最常用的键盘Hook为例进行分析.一.先来看一下在vb中是如何实现的.截的是空格键.表现的目标是:一个form,上面有一个textbox,不管焦点是否落在textbox里,按空格键,不会在textbox中输入一个空格,而是变成在textbox中写入一句话:"HOOK成功!"1.在一个Module中写入下列代码:调用的API的申明:Decl

php运用readfile函数给隐藏下载文件地址增加权限判断

1 以上代码实现了真是URL路径的隐藏功能, 本页开头可以进行权限判断. 2 效果如图,我们看到下面文件下载的URL已经被test.php隐藏.     <?php 02 $file = get_file_address();// 文件的真实地址(支持url,不过不建议用url) 03 04 if (file_exists($file)) { 05 header('Content-Description: File Transfer'); 06 header('Content-Type: app

HOW TO: Set a Windows Hook in Visual C# .NET

HOW TO: Set a Windows Hook in Visual C# .NETThe information in this article applies to:Microsoft .NET Framework SDKMicrosoft Visual C# .NET (2002) IN THIS TASKSUMMARYSet a Mouse HookGlobal Hook Is Not Supported in .NET FrameworkREFERENCESSUMMARYThis

C#中来应用Hook

钩子(Hook),是Windows消息处理机制的一个平台,应用程序可以在上面设置子程以监视指定窗口的某种消息,而且所监视的窗口可以是其他进程所创建的.当消息到达后,在目标窗口处理函数之前处理它.钩子机制允许应用程序截获处理window消息或特定事件. 关于Hook的详细介绍,在微软的MSDN中有,http://www.microsoft.com/china/community/program/originalarticles/techdoc/hook.mspx 下面是我在C#中来应用Hook:

在C#中应用HOOK

钩子(Hook),是Windows消息处理机制的一个平台,应用程序可以在上面设置子程以监视指定窗口的某种消息,而且所监视的窗口可以是其他进程所创建的.当消息到达后,在目标窗口处理函数之前处理它.钩子机制允许应用程序截获处理window消息或特定事件. 关于Hook的详细介绍,在微软的MSDN中有,http://www.microsoft.com/china/community/program/originalarticles/techdoc/hook.mspx 下面是我在C#中来应用Hook:

界面组合SDK中Hook机制实现原理

在前一篇简要介绍了基于Flex的界面组合SDK,其中使用Hook机制实现UI Part生命周期管理. Master-Details关系构建和UI Part注入.Hook即钩子,其作用可以理解为通过透明的方式为某一对象挂 上额外的功能,从而实现透明扩展.Hook机制可以应用于各种平台,不限语言,其传递的是一种思想. 利用Hook机制实现这些功能的最大优点是,在提供这些功能的同时不增加用户复杂性,它能够完全兼容 基于Flex组件的设计,使用户丝毫感觉不出来我们正在使用SDK.也就是说,这种Hook机

Liferay Hook使用范例

今天UI组有个需求,需要把Liferay的默认的header改为自定义的header,并且用ext-js来展示动态header的效果,于是我们想到了用Liferay Hook的功能. 展示效果 初始状态: 当鼠标滚轮往下滚动时候,header会缩成一条横杠: 开发"> 当鼠标滚轮往上滚动时,header会恢复为初始状态: 实现: 为了实现这个功能,我们必须创建一个Liferay Hook功能, 然后我们在META-INF下创建一个目录叫modify_liferay_defaults作为我们