dword

C# DWORD and QWORD - signed and unsigned madness

半城伤御伤魂 提交于 2021-01-27 06:52:27
问题 I've noticed that DWord and QWord values when written to the Registry supposed to be Signed Integers, not Unsigned. This code will throw an exception if value is UInt64 or UInt32: registryKey.SetValue(name, value); According to MSDN DWORD is a 32-bit unsigned integer (range: 0 through 4294967295 decimal) https://msdn.microsoft.com/en-us/library/cc230318.aspx So, to write new DWORD value to the Registry I need to cast it to signed integer like so: UInt32 unsignedValue = (UInt32)someValue;

C# DWORD and QWORD - signed and unsigned madness

雨燕双飞 提交于 2021-01-27 06:51:59
问题 I've noticed that DWord and QWord values when written to the Registry supposed to be Signed Integers, not Unsigned. This code will throw an exception if value is UInt64 or UInt32: registryKey.SetValue(name, value); According to MSDN DWORD is a 32-bit unsigned integer (range: 0 through 4294967295 decimal) https://msdn.microsoft.com/en-us/library/cc230318.aspx So, to write new DWORD value to the Registry I need to cast it to signed integer like so: UInt32 unsignedValue = (UInt32)someValue;

C# DWORD and QWORD - signed and unsigned madness

自闭症网瘾萝莉.ら 提交于 2021-01-27 06:49:35
问题 I've noticed that DWord and QWord values when written to the Registry supposed to be Signed Integers, not Unsigned. This code will throw an exception if value is UInt64 or UInt32: registryKey.SetValue(name, value); According to MSDN DWORD is a 32-bit unsigned integer (range: 0 through 4294967295 decimal) https://msdn.microsoft.com/en-us/library/cc230318.aspx So, to write new DWORD value to the Registry I need to cast it to signed integer like so: UInt32 unsignedValue = (UInt32)someValue;

摘录:并口

南楼画角 提交于 2020-04-06 05:36:37
VC实现PC并行端口数字信息输入/输出 作者:游志宇 发布时间:2004-12-9 11:25:02 | 四、PC并行口数字输入/输出的VC实现   由于Windows对系统底层操作采取了屏蔽的策略,因而对用户而言,系统变得更为安全,但这却给众多的硬件或者系统软件开发人员带来了不小的困难,因为只要应用中涉及到底层的操作,开发人员就不得不深入到Windows的内核去编写属于系统级的设备驱动程序。对并行口的读写操作就是如此,由于Windows对系统的保护,绝对不允许任何的直接I/O动作发生,所以必须带上*.dll、*.sys或*.vxd文件,这些文件用来让操作系统知道有一个特定的I/O可能会被调用。系统开机后,这些文件中的内容就会加载到内存中,一旦有对应的动作发生,就会引发I/O的实际动作。   本文只是介绍并行口作为数字I/O口的使用,不在于介绍并行I/O口驱动的编写。故本文中直接使用由 Yariv Kaplan 编写的 WinIo 库,它有如下特点:WinIo 库通过使用内核模式下设备驱动程序和 其它一些底层编程技巧绕过 Windows 安全保护机制,允许32位 Windows 程序直接对 I/O 口进行操作。   支持Windows 9x、Windows NT、Windows2000、WindowsXP环境;在Windows NT/2000/XP下,允许非

CreateDIBSection

冷暖自知 提交于 2020-04-04 04:20:06
分辨率 我们常说的屏幕分辨率为640×480,刷新频率为70Hz,意思是说每行要扫描640个象素,一共有480行,每秒重复扫描屏幕70次。 调色板   有一个长宽各为200个象素,颜色数为16色的彩色图,每一个象素都用R、G、B三个分量表示。因为每个分量有256个级别,要用8位(bit),即一个字节(byte)来表示,所以每个象素需要用3个字节。整个图象要用200×200×3,约120k字节,可不是一个小数目呀!如果我们用下面的方法,就能省的多。   因为是一个 16 色图,也就是说这幅图中最多只有 16 种颜色,我们可以用一个表:表中的每一行记录一种颜色的 R 、 G 、 B 值。这样当我们表示一个象素的颜色时,只需要指出该颜色是在第几行,即该颜色在表中的索引值。举个例子,如果表的第 0 行为 255 , 0 , 0( 红色 ) ,那么当某个象素为红色时,只需要标明 0 即可。   让我们再来计算一下: 16 种状态可以用 4 位 (bit) 表示,所以一个象素要用半个字节。整个图象要用 200×200×0.5 ,约 20k 字节,再加上表占用的字节为 3×16=48 字节 . 整个占用的字节数约为前面的 1/6 ,省很多吧?   这张 R 、 G 、 B 的表,就是我们常说的调色板 (Palette) ,另一种叫法是颜色查找表 LUT(Look Up Table)

CreateDIBSection

牧云@^-^@ 提交于 2020-04-04 04:18:49
理解分辨率 我们常说的屏幕分辨率为640×480,刷新频率为70Hz,意思是说每行要扫描640个象素,一共有480行,每秒重复扫描屏幕70次。 理解调色板 有一个长宽各为200个象素,颜色数为16色的彩色图,每一个象素都用R、G、B三个分量表示。因为每个分量有256个级别,要用8位(bit),即一个字节(byte)来表示,所以每个象素需要用3个字节。整个图象要用200×200×3,约120k字节,可不是一个小数目呀!如果我们用下面的方法,就能省的多。 因为是一个 16 色图,也就是说这幅图中最多只有 16 种颜色,我们可以用一个表:表中的每一行记录一种颜色的 R 、 G 、 B 值。这样当我们表示一个象素的颜色时,只需要指出该颜色是在第几行,即该颜色在表中的索引值。举个例子,如果表的第 0 行为 255 , 0 , 0( 红色 ) ,那么当某个象素为红色时,只需要标明 0 即可。 让我们再来计算一下: 16 种状态可以用 4 位 (bit) 表示,所以一个象素要用半个字节。整个图象要用 200×200×0.5 ,约 20k 字节,再加上表占用的字节为 3×16=48 字节 . 整个占用的字节数约为前面的 1/6 ,省很多吧? 这张 R 、 G 、 B 的表,就是我们常说的调色板 (Palette) ,另一种叫法是颜色查找表 LUT(Look Up Table) ,似乎更确切一些。

PE病毒初探——向exe注入代码

自作多情 提交于 2020-04-03 17:59:24
PE文件其实就是Windows可执行文件,关于它的一些简要介绍摘自百度: PE文件被称为可移植的执行体是Portable Execute的全称,常见的EXE、DLL、OCX、SYS、COM都是PE文件,PE文件是微软Windows操作系统上的程序文件(可能是间接被执行,如DLL)。 http://baike.baidu.com/view/1087038.htm 有一种病毒是针对PE文件进行的操作,他们会感染一些exe,将自己的代码添加到exe中并在某处悄悄地窃取执行权限执行自己的代码进行破坏或者是其他不为人知的勾当。 才写了个头就跑去跟个程旭媛讨论技术问题去了,不禁让我想起之前的一张图片。。程序员苦逼不解释。 下面就进入正题。 1、PE文件格式 PE文件格式游如下图给出 2、代码注入 由PE格式可以知道,PE文件的数据和代码都存储在PE头之后的一些session中,其中有些session的属性是可执行的,里面的数据就能被当成计算机指令在cpu中执行。 注入代码的目标就是这些可执行的session(其实还有一种注入方法是增加额外的session,但是这样做会增加exe文件的大小,不过这样可以放更多的代码,由于这次要插入的代码数量较小所以选择已经存在的session下手)。 由于文件在磁盘中存储是按块存储的,每块的大小是固定的,因此这样会在某些数据中存在额外多余的部分

逆向编程一,PE结构拉伸内存

╄→гoц情女王★ 提交于 2020-04-03 11:41:47
PE的加载从文件到内存有一个拉伸的过程,拉伸的原因是因为PE在文件中的对齐字节和在内存中的对齐字节可能不一样(文件对齐字节<=内存对齐字节,为了节省磁盘空间,目前的pe文件大部分文件和内存对齐字节都是一样的)。文件对齐字节在可选PE头里: _IMAGE_OPTIONAL_HEADER: 32 4 SectionAlignment 内存对齐 当加载进内存时节的对齐值(以字节计)。它必须≥FileAlignment。默认是相应系统的页面大小。 36 4 FileAlignment 文件对齐 用来对齐镜像文件的节中的原始数据的对齐因子(以字节计)。它应该是界于512和64K之间的2的幂(包括这两个边界值)。默认是512。如果 SectionAlignment 小于相应系统的页面大小,那么FileAlignment必须与SectionAlignment相等。 下面模拟PE文件加载时内存拉伸的过程: 1、读取文件,判断文件大小,分配一段与文件大小相同的内存缓冲区,filebuffer 2、读取DOS头结构,根据DOS头,判断第一个WORD e_magic,这是dos头标记‘MZ’,用来判断是否是pe文件格式,读取最后一个DWORD(e_lfanew)指向NT头 3、读取NT头结构,NT头包括PE签名、标准PE头和可选PE头。根PE头中的SizeOfImage是在内存中拉伸后的大小 4

【C/C++】关于编译错误 \"error C2146: syntax error : missing ';' before identifier 'xxx'\"

心已入冬 提交于 2020-04-01 08:34:11
今天帮同学解决了一个问题,之前其实也遇到过,现在总结一下。问题大概是这样的,假设有如下代码: #include <tchar.h> DWORD g_count = 0; int _tmain(int argc, _TCHAR* argv[]) { return 0; } 使用VS编译会报如下错误: 1>f:\testproj\consoletest_vs2005\test\test.cpp(3) : error C2146: syntax error : missing ';' before identifier 'g_count' 1>f:\testproj\consoletest_vs2005\test\test.cpp(3) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 1>f:\testproj\consoletest_vs2005\test\test.cpp(3) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 这是什么原因呢?仔细看第一个error,说是在g_count前丢失了分号,这让人很费解,g

Direct show 开发时注意的一些问题

 ̄綄美尐妖づ 提交于 2020-04-01 08:27:17
由于对今后图形图象,包括音频部分的开发有很大的影响,特总结下.现在状态为环境搭建. ====================================================================== 今天真是混帐,花费了4,5个小时安装DirectShow。//图形图象管理,音频设置.STREAMS.H文件. 先是下载,ms要正版的windows才能下载,郁闷;找了n久终于找到可以下载的链接 http://hotdl.com/dl/showfile.php?id=640&category=52 另外,DirectX9.0c已经将DShow分离出去了,下载时请选DirectX9.0b或者一下 再是配置DirectShow的VC开发环境 --------------------------- DirectShow开发环境 关键词: 环境配置 http://mercredi.bokee.com/3057881.html 1,使用VC向导生成一个具体项目,如Win32 Dynamic-Link; 2,包含头文件streams.h; 3,在VC的菜单中选择Project|Settings|C/C++,在弹出的对话框中的Category中选择Code generation,然后在Calling convention中选择_stdcall; 4,使用多线程语言运行时库