Articles of winapi

什么是REBASE.EXE的替代?

我需要重新绑定与我的程序一起安装的DLL文件组,因为这是一个32位程序,现在地址空间太碎了。 另外还有一个问题,就是在冷启动时需要将整个DLL分页到RAM中,这样加载器就可以将它们重新绑定,因为与某些DLL的基地址冲突。 有些DLL是我们编译的; 其他人来自第三方。 我想要做的是有一个工具重新绑定给定的一组DLL,这样的DLL组占用连续的内存块。 然后,这个工具将在编译安装程序之前运行,而重新发布的DLL将被安装在应用程序的专用目录中。 据我所知,Windows SDK附带的REBASE.EXE工具确实做到了。 给它一些DLL,并重新启动它们。 不幸的是… Windows 8 Consumer Preview的Windows软件开发工具包(SDK)说: 工具许多过时或已弃用的工具已从Windows SDK中删除。 以下工具已被删除: <snip> ReBase.exe 现在怎么办? 我不想开始使用显然已经过时的工具,它将在下一个版本的Windows中消失。 假设我正在阅读这个权利,什么是使用ReBase.exe的替代品? 我想限制自己使用Windows SDK和/或Visual Studio附带的工具,而不是引入第三方工具和/或编写自己的rebase代码。 或者,我以错误的方式接近整个问题?

如何从Wave Out捕获PCM数据

如何以编程方式捕捉audio? 我正在实现一个应用程序,实时在networking上的桌面stream。 video部分完成。 我需要实现audio部分。 我需要一种方法来从声卡获取PCM数据,并将其提供给我的编码器(使用Windows Media格式实现)。 我认为答案与Win32 API中的openMixer(),waveInOpen()函数有关,但我不确定该怎么做。 如何打开必要的频道以及如何从中读取PCM数据? 提前致谢。

XP的Windows防火墙规则

如何以编程方式将应用程序或端口添加到Windows XP上的Windows防火墙?

64位Windows API:C / C ++“DWORD”的大小是多less?

我只安装了32位Windows,所以我无法自己validation。 如果我理解正确,那么在Microsoft API的各个地方使用的DWORD是参考原来的16位字,而与当前的硬件架构无​​关? 因此,即使当我最终编译并链接我的应用程序以在64位Windows中运行时,似乎是32位的DWORD也将保持32位? 或者将DWORD变成128位宽?

如何确定窗口是否在屏幕外?

在Windows XP及更高版本中,给定一个窗口句柄(HWND),如何判断窗口的位置和大小是否不可恢复地离开窗口? 例如,如果标题栏可用于光标,则窗口可以被拖回到屏幕上。 我需要发现窗口是否实际上可见或至less可以提供给用户。 我想我也需要知道如何检测和响应分辨率的变化,以及如何处理多个显示器。 这似乎是一个相当大的交易。 我正在使用C ++和普通的SDK,所以请限制你的答案,而不是调用C#或类似的平台。

你可以从应用程序更改视觉效果性能设置?

我正在修改在以下位置find的registry值: HKEY_CURRENT_USER \软件\微软\的Windows \ CurrentVersion \ Explorer中\ VisualEffects。 出于我的目的,它可以存储0,1,2的DWORD值。这些值对应于Windows 7中的“性能选项”下的“视觉效果”单选button; “让Windowsselect最适合我的电脑”,“最佳外观调整”和“最佳性能调整”。 如果您使用实际的“性能选项”屏幕并进行更改,然后单击“应用”,则Windows中的可视设置将按预期重新加载。 如果以编程方式更改该值,则不会执行任何操作。 有没有办法在代码中实现这一点?

C ++:如何正确地注册和注销我们的应用程序的文件types关联(编程)

时间是你在下面设置文件关联的时候: HEY_CLASSES_ROOT \ <分机> 但是,这似乎是可能的,但不完整的解决scheme了。 整个registry中还有其他关联。 例如: HKEY_LOCAL_MACHINE \ Software \ Microsoft \ Windows \ CurrentVersion \ Explorer \ KindMap HKEY_LOCAL_MACHINE \ Software \ Microsoft \ Windows \ CurrentVersion \ Explorer \ Extensions 以上所有内容都是由HKEY_USERS \ 微软添加了他们的设置默认关联控制面板小程序,它控制着什么? 我正在寻找一个白皮书,或讨论: “用C / C ++编写的现代Windows XP-Windows 7兼容应用程序如何在不干扰资源pipe理器,用户设置或默认关联cpl的情况下注册和操作其文件关联” 编辑:我想在这里进一步调查与更多的问题: 如何从Windows卸载时从其他用户帐户删除ProgIDs?

如何获得使用标准库创build的线程的winapi id?

C ++ 11的标准库包含允许线程创build的<thread> 。 不过,Windows API需要一些ID(即PostThreadMessage )。 我怎么才能得到它? 备注: std::thread::get_id()似乎不工作: PostThreadMessage(m_thread->get_id(), WM_QUIT, 0, 0); e:\documents\khook\khooker\hook_runner.cpp(129): error C2664: 'PostThreadMessageW' : cannot convert parameter 1 from 'std::thread::id' to 'DWORD'

GetLastInputInfo()始终为0(零)

我想检测空闲时间(例如用户按了多长时间或移动鼠标)。 据说GetLastInputInfo()应该是我需要的,但是,当我使用它,它总是打印0。 LASTINPUTINFO last_input = {0}; GetLastInputInfo(&last_input); cout << last_input.dwTime << endl; 任何想法为什么? 谢谢 编辑:使用getlasterror,它说,该参数是不正确的(ERROR_INVALID_PARAMETER,87)

检测reflectionDLL注入

在过去的几年中,恶意软件(以及一些笔式testing工具,如Metasploit的meterpreter载荷)已经开始使用reflection式DLL注入(PDF)将DLL加载到进程的内存中。 好处是文件永远不会写入磁盘,而且很难检测到。 我见过的很多例子都是基于Joachim Bauch的作品 。 然而,在DEF CON 20安德鲁·金表明,他能够检测DLL注入使用reflectionDLL注入 。 他的演讲被称为“ 检测reflection注射 ”。 不幸的是,他还没有发布源代码(他当然没有义务这么做)。 更新 :显然我错过了,但安德鲁确实在几年前开源这个工作: https : //github.com/aking1012/dc20 另外,一个名为“ Antimeter ”的工具可以在使用reflection型dll注入加载时检测meterpreter引擎。 再次,封闭的来源。 我知道Andrew King的工具和Antimeter都是用Python编写的,并使用pydbg / pydasm来枚举运行可执行文件的内存。 有没有人有一些通用的源代码(Python,C,Delphi或其他),他们愿意分享,演示如何检测reflectionDLL注入? 有内存取证工具,可以分析内存转储,并find这个,但我正在执行一个正在运行的系统上的应用程序(如antimeter),并findreflection注入DLL的过程。 如果你有兴趣了解如何reflectionDLL注入工作,有一些用Delphi写的开源代码 ,说明如何做到这一点。 更新 :我testing了,我可以reflection注入DLL的没有pipe理员权限(和作为一个普通用户),但当然作为一个用户,我只能注入进程在相同的完整性级别运行(在我的会话)…但仍涵盖Office套件,Internet Explorer等应用程序