Windows
文章平均质量分 83
枫★曦
Stay simple,stay positive...
展开
-
C#字符转之UTF8转成Unicode
用C#写代码时,会经常用到不同编码格式之间的转换。下面代码就是将UTF8编码格式的C# String转换成Unicode编码格式的String。 仅供参考。Encoding utf8 = Encoding.UTF8;Encoding defaultCode = Encoding.Unicode; // Convert the strin原创 2016-12-02 19:17:29 · 12255 阅读 · 0 评论 -
通俗解析IRP和I/O设备栈在内核程序中的作用
正文:言归正传,所有的I/O请求都是以IRP(I/O请求包)的形式来提交的,同时内核程序的所有分发函数(Dispatch Function)的第二个参数都是PIRP(也即是指向IRP的指针)。为了说明问题,防止跳跃性太大,先解释几个名词(都按自己理解的),可以帮助会的人复习,不会的人学习1:DRIVER_OBJECT:驱动对象,由即插即用管理创建和传递到DriverEntr转载 2015-01-13 21:57:50 · 1587 阅读 · 0 评论 -
AVStream对象体系和描述符
AVStream对象体系: AVStream描述符:AVStream mini驱动的描述符信息和filter类型,要通过调用嵌套的描述符数据结构接口KsInitializeDriver提供。每个关键的mini驱动组件,包含了设备,filter factory和pin factory及相关的描述符信息。就像在AVStream对象体系图中看到的,AVStream mini翻译 2014-11-19 13:28:25 · 1597 阅读 · 0 评论 -
AVStream
1. AVStream概览AVStream是一款微软提供的多媒体类驱动程序,它既支持单独的视频流媒体,也支持音频视频集成的流媒体。微软把AVStream作为操作系统的一部分,在驱动程序ks.sys中导出。硬件供应商只需要编写运行在Ks.sys下层的小驱动程序(minidriver)。以前的音频类驱动程序是微软提供的音频端口驱动程序(audio port class dr转载 2014-11-19 10:57:27 · 3796 阅读 · 0 评论 -
UMDF 概述
用户模式驱动程序框架 (UMDF) 体系结构允许硬件供应商为其硬件创建用户模式驱动程序,从而为操作系统提供相对于内核模式驱动程序更好的安全性和稳定性。如果内核模式驱动程序发生崩溃,则整个系统会随之发生崩溃;如果用户模式驱动程序发生崩溃,则只有承载相应的驱动程序的进程发生崩溃,系统的其余部分将保持稳定。UMDF 体系结构包含以下组件:UMDF 驱动程序UMDF 驱动程序在用户模式翻译 2014-08-13 19:29:35 · 1779 阅读 · 0 评论 -
WinDBG实时打印Windows驱动或者内核信息的方法
当我们用WinDBG调试Windows驱动或者内核时,总是需要查看相关Log信息,那么如何在WinDBG中实时打印Windows驱动或者内核信息呢?Windows驱动包提供了驱动或者内核打印接口:DbgPrintEx.对于KMDF驱动,对应的打印接口是KdPrint或者KdPrintEx,其实这两个接口是DbgPrintEx的特殊类型或者特殊定义而已。对于UMDF驱动,没有专门的打原创 2014-07-11 22:21:06 · 11506 阅读 · 0 评论 -
Windows Rtl字符串相关接口源码
VOID NTAPIRtlInitAnsiString( //定义ansi字符串 IN OUT PANSI_STRING原创 2013-11-19 14:22:30 · 1542 阅读 · 0 评论 -
Windows API GetModuleFileName代码原型
以下是windows API GetModuleFileName的实现:/* *@implemented */DWORD WINAPI GetModuleFileNameA(HINSTANCEhModule, LPSTR lpFilename, DWORD nSize){ UNICODE_S原创 2013-10-09 10:01:42 · 1788 阅读 · 0 评论 -
Windows运行命令大全
winver 检查Windows版本 wmimgmt.msc 打开Windows管理体系结构(wmi) wupdmgr Windows更新程序 wscript Windows脚本宿主设置 write 写字板 winmsd 系统信息 wiaacmgr 扫描仪和照相机向导 winchat xp自带局域网聊天 mem.exe 显示内存使用情况 msconfig.exe转载 2013-05-03 16:11:16 · 4911 阅读 · 0 评论 -
通过GUID读取COM口信息
void EnumerCOMPortByGUID(){ HDEVINFO hDevInfo; SP_DEVINFO_DATA DeviceInfoData; DWORD i = 0; hDevInfo = SetupDiGetClassDevs((LPGUID) &GUID_DEVCLASS_PORTS, 0, 0,D原创 2012-11-16 18:01:34 · 4987 阅读 · 0 评论 -
IoCallDriver源码
以下是IoCallDriver接口的源码(基于WRK1.2) NTSTATUSIoCallDriver( IN PDEVICE_OBJECT DeviceObject, IN OUT PIRP Irp ){ return IofCallDriver (DeviceObject, Irp);} 而IofCallDriver的源码如下原创 2015-02-15 13:42:09 · 887 阅读 · 0 评论 -
Windows X64关闭内存写保护和打开内存写保护的代码
关闭内存写保护的代码:KIRQL WPOFFx64(){ KIRQL irql=KeRaiseIrqlToDpcLevel(); UINT64 cr0=__readcr0(); cr0 &= 0xfffffffffffeffff; __writecr0(cr0); _disable(); return irql;}打开内存写保护的转载 2015-03-20 14:29:09 · 5250 阅读 · 0 评论 -
通往WinDbg的捷径(二)
保存 dumps 在我们调试不容易重现的问题时,可能想把应用程序状态的快照(内存内容,打开名柄的列表,等等)保存起来,以便日后分析。例如,当我怀疑当前的状态可能包含我试图解决的问题的关键点,而想继续运行应用程序来查看情形怎样发展时,它就很有用了。有时候,我会做一系列的快照,一个接一个,以便稍后我能比较它们,查看在应用程序运行时有些数据结构怎样变化。当我最终能重现这个问题时,我总是创建一个快照来转载 2016-03-15 16:20:08 · 981 阅读 · 0 评论 -
通往WinDbg的捷径(一)
原文:http://www.debuginfo.com/articles/easywindbg.html译者:arhat时间:2006年4月13日关键词:CDB WinDbg 导言你钟情什么样的调试器?如果你问我这个问题,我会回答是“Visual Studio + WinDbg”。我比较喜欢Visual Studio那朴实无华且易操作的接口,更喜欢它能迅速把我需要的信息以可转载 2016-03-15 16:18:19 · 1586 阅读 · 0 评论 -
【Win10】UAP/UWP (通用程序) 开发初体验(1) 之 开发准备
一、准备:1.准备一个 10074或更高版本的Win10。可以通过 https://insider.windows.com/ 地址,加入Windows 的会员俱乐部免费获取的。2.下载Visual Studio 2015 RC版。 可以在 https://www.visualstudio.com/ 这个地址下载到。3.下载 Windows 10 development to转载 2015-11-20 13:48:31 · 6937 阅读 · 0 评论 -
windbg调试内存泄漏
首先使用windbg工具gflags.exe设置内存启动跟踪内存泄露进程的user stack启动方法就是运行下面指令gflags.exe /i test.exe +ust等价于HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options,命令“gflags.exe转载 2015-09-19 17:14:25 · 1046 阅读 · 0 评论 -
WinDBG基础----了解Symbols
对于NET下的开发人员,可能对Symbol不了解的人还不少,因为MS给了我们太多方便的工具,让我们只需要去关注代码,对于其他的东西基本上不需要去关注,所以就养成了一个习惯(过多的依赖MS,依赖VS)。这里只是抛开VS,讲一下调试要用到的东西-Symbol。认识Symbol 用于程序调试的数据,它包含了调试中需要用到的各种数据,例如:全局变量、本地变量、函数名、函转载 2015-07-21 15:57:05 · 2529 阅读 · 0 评论 -
使用WinDbg获得托管方法的汇编代码
这是一个没有多大价值的小实验,对于大家了解.NET编程等方面几乎没有任何好处,尽管老赵一直强调“基础”,例如扎实的算法和数据结构能力,并且对一些必要的支持,例如操作系统,计算机体系结构,计算机网络有足够的了解,拥有“常识”,在需要的时候有足够的能力去深入了解便可;但是对于还有一些科目,例如“编译原理”,它虽然可以加强对于一个人对程序的理解,但是我也并不觉得这是一条“必经之路”。了解黑盒内部肯定是有转载 2015-08-24 10:15:28 · 536 阅读 · 0 评论 -
WinDBG加载符号表的一点心得体会
inDBG无法加载符号表是很痛苦的事情,明明符号表的路径已经加载进去了,可是还是无法加断点,下面直接进入主题:符号表无法加载,无法触发断点。1、检查sympath是否正确kd> .sympathSymbol search path is: srv*http://msdl.microsoft.com/download/symbols;C:\Windows\symbols;D:\VSSDataBase转载 2015-06-17 22:54:25 · 2434 阅读 · 0 评论 -
windbg 基础命令实战 - 简单程序破解
以前玩游戏遇到一些实在过不去的管卡,经常会找一些游戏修改软件来修改游戏,让自己变得无比强大,将boss一路砍瓜切菜过足游戏瘾。其实游戏修改软件的功能大多都比较简单,我们可以通过windbg的一些简单命令同样也可以实现。在这片文章中我们会通过一个简单的winform登录程序来演示将一系列简单调试命令联合运用,破解登录程序。测试程序登录程序界面登录验证代码private转载 2015-05-26 16:51:23 · 1610 阅读 · 0 评论 -
IoCancelIrp源码简析
Windows Driver中的IoCancelIrp源码如下:相关宏定义如下://// MessageId: CANCEL_STATE_IN_COMPLETED_IRP //IRP Cancel错误标识//// MessageText://// CANCEL_STATE_IN_COMPLETED_IRP//#define CANCEL_STATE原创 2015-04-23 20:37:37 · 1484 阅读 · 0 评论 -
Win32串口编程
在工业控制中,工控机(一般都基于Windows平台)经常需要与智能仪表通过串口进行通信。串口通信方便易行,应用广泛。一般情况下,工控机和各智能仪表通过RS485总线进行通信。RS485的通信方式是半双工的,只能由作为主节点的工控PC机依次轮询网络上的各智能控制单元子节点。每次通信都是由PC机通过串口向智能控制单元发布命令,智能控制单元在接收到正确的命令后作出应答。在Win32下,可以使用两转载 2012-11-14 20:03:30 · 643 阅读 · 0 评论 -
VC列举当前电脑存在的设备
BOOL EnumAllDevice(vector> &vDeviceName){HDEVINFO hDevInfo;SP_DEVINFO_DATA DeviceInfoData;DWORD i;//TCHAR tempDevice[MAX_PATH] = {0};printf("Displaying the Installed Devices\n\n");原创 2012-11-14 10:41:28 · 942 阅读 · 0 评论 -
创建和访问环境变量
环境变量的构成环境变量由一对字符串组成,格式为:变量=关联值。例如:1.PATH=C:\WINDOWS在DOS和WINDOWS中,你可以从命令行或在批处理文件中定义环境变量,方法是使用SET命令,后面跟赋值表达式。下面是一个创建环境变量的例子,1.SET VERSION=1.1.3在Unix中可以省略前面的SET,写为:转载 2012-11-06 13:18:16 · 836 阅读 · 0 评论 -
vc开发小技巧
一、打开CD-ROMmciSendString("Set cdAudio door open wait",NULL,0,NULL);二、关闭CD_ROMmciSendString("Set cdAudio door closed wait",NULL,0,NULL);三、关闭计算机OSVERSIONINFO OsVersionInfo; //包含操作系统版本信息的数据结构O转载 2010-05-01 09:53:00 · 489 阅读 · 0 评论 -
进程与线程
1 进程与线程的区别 进程:是程序的运行实例,是指程序的一次执行过程,在Windows95中,就是一个EXE文件的执行过程。由两部分组成:操作系统用来管理进程的内核对线和地址空间.地址空间包括所有可执行模块或DLL的代码和数据以及动态内存分配的空间.总之进程包含内存和资源(如内核对线,File对象,GDI对线等). 线程:线程是指由进程进一步派生出来原创 2010-05-03 09:51:00 · 994 阅读 · 0 评论 -
Windows平台下的多线程编程
线程是进程的一条执行路径,它包含独立的堆栈和CPU寄存器状态,每个线程共享所有的进程资源,包括打开的文件、信号标识及动态分配的内存等。一个进程内的所有线程使用同一个地址空间,而这些线程的执行由系统调度程序控制,调度程序决定哪个线程可执行以及什么时候执行线程。线程有优先级别,优先权较低的线程必须等到优先权较高的线程执行完后再执行。在多处理器的机器上,调度程序可将多个线程 border=0 margi转载 2010-04-07 23:13:00 · 574 阅读 · 0 评论 -
关于Windows编程的一些心得
windows操作系统是靠消息的驱动的,所有的事件都被封装为各种各样的消息,系统和其他程序通过接受消息,分析消息附带的参数,再分别进行相关的处理,然后完成相关的任务。不管用什么语言,或者什么开发工具,只要是在windows下可以运行的程序,在他的本质上都有一个接受消息、处理消息的循环。这就是win32程序乃至整个windows操作系统本身的运做本质。 windows自己定义了很转载 2010-04-07 23:09:00 · 723 阅读 · 0 评论 -
VS2005安装Boost_1_42_0
1.下载boost_1_42_0压缩文件,解压缩到d:/boost_1_42_0/目录下2.编译bjam从vs2005的工具菜单进入命令提示窗口(一定要从这进),cd到d:/boost_1_42_0/tools/jam/src下执行build.bat,会在d:/boost_1_42_0/tools/jam/src/bin.ntx86/產生bjam.exe,將bjam.exe複製到d:/bo原创 2010-04-10 14:00:00 · 2682 阅读 · 0 评论 -
关于数值和字符串转换的两个函数
以下是数值和字符串之间互相转换的两个函数。 1. 从字符串转换为整型数字。int StrToNum(LPCTSTR _strIn){ int loop = 0;int base = 0; //代表进制int _retNum = 0; CString cStr = _strIn;原创 2010-04-06 23:20:00 · 808 阅读 · 0 评论 -
CString字符串转换为十六进制字符串
最近在做项目时遇到这个问题,比如将汉字“冲”转换后为“51B2”,程序使用的是unicode字符集,下面是通过查资料后整理的解决方法://---------------------------------------------------------------------//函数:W2C//功能:将16位wchar_t转换为 8位char[2]//参数:w_cn为待转换的16位字符,c_转载 2010-04-14 22:30:00 · 3740 阅读 · 0 评论 -
深入 CSocket 编程之阻塞和非阻塞模式
有时,花上几个小时阅读、调试、跟踪优秀的源码程序,能够更快地掌握某些技术关键点和精髓。当然,前提是对这些技术大致上有一个了解。 我通过几个采用 CSocket 类编写并基于 Client/Server (客户端 / 服务端)的网络聊天和传输文件的程序 ( 详见: 源代码参考 ) ,在调试这些程序的过程中,追踪深入至 CSocket 类核心源码 Sockcore.cpp , 对于CSocket 类转载 2010-04-12 21:43:00 · 801 阅读 · 0 评论 -
Windows平台下的多线程编程
线程是进程的一条执行路径,它包含独立的堆栈和CPU寄存器状态,每个线程共享所有的进程资源,包括打开的文件、信号标识及动态分配的内存等。一个进程内的所有线程使用同一个地址空间,而这些线程的执行由系统调度程序控制,调度程序决定哪个线程可执行以及什么时候执行线程。线程有优先级别,优先权较低的线程必须等到优先权较高的线程执行完后再执行。在多处理器的机器上,调度程序可将多个线程放到不同的处理器上去运行,这样转载 2010-05-03 10:05:00 · 5151 阅读 · 0 评论 -
Debug和Release版本的区别
一、Debug 和 Release 编译方式的本质区别 Debug 通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序。Release 称为发布版本,它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优的,以便用户很好地使用。 Debug 和 Release 的真正秘密,在于一转载 2010-05-07 19:58:00 · 618 阅读 · 0 评论 -
关于Windows平台Kill Process的代码
以下是我在Windows平台上写的关于杀掉进程的代码,强制杀掉。void CWindowsProcessTestDlg::OnBnClickedKillButton(){ int i = 0; DWORD dPID = 0;DWORD dSel = 0;HANDLE hProcessHandle = NULL; CString szexeName = _T(原创 2012-10-16 18:55:02 · 2217 阅读 · 0 评论 -
VC++结束程序进程
1.使用ExitProcess()结束进程 进程只是提供了一段地址空间和内核对象,其运行时通过在其地址空间内的主线程来体现的。当主线程的进入点函数返回时,进程也就随之结束。这种进程的终止方式是进程的正常退出,进程中的所有线程资源都能够得到正确的清除。除了这种进程的正常退出方式外,有时还需要在程序中通过代码来强制结束本进程或其他进程的运行。ExitProcess()函数的原型为:转载 2012-10-16 14:18:10 · 3542 阅读 · 0 评论 -
VS2010无法显示资源视图和类视图的解决办法
使用VS2010快一个月了,它的智能感知功能确实不错,只是太耗时、速度有待提高,于是就把它禁用了。(在工具-->选项-->文本编辑器-->C/C++标签下的“高级”选项里可以设置)VS2010在工作时会在项目目录下生成*.sdf文件和ipch目录,这与VS2010提供的智能感知、代码恢复、团队本地仓库功能相关,通过将工具-->选项-->文本编辑器-->C/C++标签下的“高转载 2012-10-16 14:41:21 · 2201 阅读 · 0 评论 -
C#访问修饰符
所有类型和类型成员都具有可访问性级别,用来控制是否可以在您程序集的其他代码中或其他程序集中使用它们。您在声明类型或成员时使用以下访问修饰符之一来指定其可访问性:public :访问不受限制。可以类内和任何类外的代码中访问。private: 可以被所属类访问。只有同一类或结构中的代码可以访问该类型或成员。protected :可以被所属类其派生类访问。只有同一类或结构或者派生转载 2011-11-10 14:51:47 · 622 阅读 · 0 评论 -
C#中对象的声明和使用
类和对象是密不可分,有类就有对象。有对象就有类,世界万物都可以看作对象。用面向对象的思想解决问题,就要把一切都看成对象。对象是不能脱离类存在的。类是对象共同拥有的属性的描述,由对象归纳成类,对象是类的具体体现。如汽车是一个类,而具体到某个人的车就是对象。在C#中,所有的东西都可以看作对象。把一个东西看成对象,我们就可以孤立的去审查它的性质,它的行为,进而研究和其他对象的关系。同样,转载 2011-11-10 14:51:15 · 1477 阅读 · 0 评论 -
C#构造函数-创建对象
构造函数(constructor)用于执行类的实例的初始化。每个类都有构造函数。C#中通过new关键字创建对象的过程其实就是通过new关键字调用类的构造函数的过程。创建对象时,必须调用构造函数,如果没有定义构造函数,系统会提供一个默认的构造函数。在访问一个类的时候,系统将最先执行构造函数中的语句,任何构造函数的执行都隐式的调用了系统提供的默认构造函数base(),可以有参数,也可以没有。有转载 2011-11-10 14:50:00 · 8174 阅读 · 0 评论