Articles of winapi

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

我正在修改在以下位置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等应用程序

我怎样才能使一个subprocess窗口在我的过程中出现模态?

我有一个应用程序调用其他实用程序应用程序来为特定设备设置一些设置。 该实用程序应用程序使用ShellExecuteEx进行调用。 为了不使用户混淆,最好将实用程序模式窗口设置为我的主窗口。 如何做到这一点? 我试过的东西: WaitForSingleObjectEx在ShellExecuteEx之后的进程中,INFINITE TIMEOUT – 窗口是模态的,但主应用程序不重画(因为它正在等待单个对象!) WaitForSingleObjectEx在ShellExecuteEx之后的过程中,有一些小超时,然后调用PeekMessage和DispatchMessage – repaint现在可以工作,但是实用程序应用程序不再是“模态”的。 主应用程序响应鼠标点击,button点击等 EnableWindow(FALSE),然后执行方法#2,然后EnableWindow(TRUE) – WORKS !!!,但是在此之后,我的应用程序的z顺序改变了。 (现在在其他窗口下面)。 为什么?!

如何在Windows上限制进程的CPU使用率? (需要代码,而不是应用程序)

有一些程序能够限制Windows中进程的CPU使用率。 例如BES和ThreadMaster 。 我需要编写自己的程序来完成与这些程序相同的function,但具有不同的configurationfunction。 有谁知道一个进程的CPU节stream是如何完成的(代码)? 我不是在谈论设置进程的优先级,而是如何将CPU使用率限制在例如15%,即使没有其他进程争夺CPU时间。 更新:我需要能够扼杀已经运行的任何进程,并且我没有源代码访问权限。

GetDC()和BeginPaint()之间的区别

我正在使用Win32 UI。 我想知道GetDC和BeginPaint之间的区别。 何时使用哪个API以及何时不使用哪个API。

有没有办法在文件系统上伪造文件或写一个文件只能看到我的EXE文件

好吧,我写和使用Adobe ActiveX控件来显示PDF文件的应用程序。 Adobe ActiveX控件仅从文件系统加载文件。 所以我只需要提供一个文件path到这个控制。 问题是我不想将PDF文件存储在文件系统上。 活动临时! 我不想将我的PDF文件只存储在内存中 ,我想使用Adobe ActiveX控件。 所以我nead: 1)在文件系统上伪造文件的一种方法。 所以这个控件会“认为”有一个文件,但会从内存中加载它 2)在文件系统上创build文件的方法,只有一个应用程序“可见”,所以我的PDF控件可以加载它,其他用户甚至不会看到它。 3)别的东西 PS:我不是要“完成我的家庭工作”,我只是问 – 有没有办法做到这一点?

是否有可能跟踪进程之间的PostMessage?

我们有一个系统,通常有两个进程在同一个系统上运行。 一个进程处理的GUI和其他运行像服务(虽然由于历史原因,这不是一个服务,只是一个exe没有可见的窗口)。 这两个进程主要通过注册消息asynchronous进行IPC – 即我们在两个进程中使用RegisterWindowMessage()来定义一组大量消息,这些消息有效地形成了API到服务器进程。 我编写了一个“免提”监视应用程序,使用SetWindowsHookEx()来监视和显示两个进程的消息队列,并提供API的使用方式以及如何将通知传播到GUI进程的某种级别的解码(每个窗口可以直接订阅来自服务器的通知)。 所以,在两个方向都有大量的消息,所以我有过滤和总结计数等,所以我可以专注于特定的活动。 所有这些都可以在不影响实时代码的情况下完成,这很好。 这一切运行良好,但是现在能够“标记”源自GUI的消息是非常有用的,所以我可以在服务器处理它时跟踪相同的消息。 这对于debugging和诊断系统问题将是非常有用的,但是我不能find一个干净的方式(实际上我找不到任何方法!),而不用为我们的注册消息API添加这样的支持,这将是很多而且涉及到的风险远远超过了我现在所熟悉的风险。 由于服务器预先处理了一些消息,然后执行PostMessage()来执行操作,所以原始消息可能会“丢失”,这变得更加复杂了。 有没有人在这里解决这类问题? 如果是这样,你可以给我一些指针? 如果没有,那么是否有任何logging或没有logging的方法来将一小块数据添加到Windows消息并稍后检索? 我看了SetMessageExtraInfo()但似乎是每队列,而不是每个消息。