草庐IT

windows - 为什么会有像 WriteProcessMemory 这样的函数可用?

标题几乎概括了它。我刚刚发现了这个功能,好吧,它的存在让我很惊讶,因为我立即想到了可能的安全后果。为什么会有这样的功能?我知道调试这样的东西或多或少是必要的,但允许它用于所有进程似乎是一个很大的安全问题。我错过了什么吗? 最佳答案 如果需要函数来编写调试器,那么函数必须存在,就这么简单。hProcess参数必须以足够的权限打开才能写入进程,恶意软件很难做到这一点。 关于windows-为什么会有像WriteProcessMemory这样的函数可用?,我们在StackOverflow上找到

c++ - 使用 Windows api 和 C++,我如何从硬盘驱动器加载一个 exe 并在它自己的线程中运行它?

为了学习,我正在尝试做操作系统在启动程序时所做的事情,即。解析一个PE文件并给它一个执行线程。如果我有两个exe,一个叫foo.exe,另一个叫bar.exe,我如何让foo.exe将bar.exe的内容加载到内存中,然后让它在自己的线程中从那里执行?我知道如何使用MapViewOfFile或通过简单地将硬盘驱动器上的内容加载到缓冲区中来将其放入内存。我假设只是将磁盘上bar.exe的内容复制到它自己的挂起线程中并运行它是行不通的。我对PE文件的内部结构比较熟悉。当然,非常感谢所有帮助:) 最佳答案 首先,兰伯特是正确的。EXE在它

c# - 更改 Windows 7 窗口颜色

我有一个问题,但不确定是否可行。是否可以从.Net更改Windows7窗口颜色。所以这不是窗口的内容,因为这很容易,我说的是标题标题本身,并允许.Net应用程序使标题透明化,就像您在Window7中可以拥有的那样,并改变颜色等。.是否有任何人都知道的我可以Hook的某种Windowapi来执行此操作。我想这样做的原因是在Window中你显然可以设置你的主题和窗口颜色但我希望我的应用程序具有相同样式的所有对话框所以我可以更改窗口内容但我可以更改窗口标题'并且如果用户将他们的窗口颜色设置为奇怪的颜色,那么它与我的主题应用相比看起来很奇怪。提前感谢您的帮助。不确定。

c - 在 C 中使用 for 循环时出错

for(intiIdx=0;iIdx这在C中有效吗?因为当我尝试编译它时出现错误,如果我从for循环的初始化部分中删除int,它编译得很好... 最佳答案 在C99之前的C中无效。在C89/90及更早版本中,声明需要位于每个block的开头。您不能交错声明和普通代码。for中的声明不算在block的开头。 关于c-在C中使用for循环时出错,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questi

windows - Windows MSI 可以安装多个包吗?

我在MFC中有一段代码正在调用MsiInstallProduct(installerFullPath,commandLine);是否可以同时安装2个MSI产品?只要它们都是独立的。是否可以调用一个Windows函数并将我所有的MSI组件都提供给它,然后它会一个一个地安装它们? 最佳答案 WindowsInstaller不允许同时安装多个MSI包。您需要一个接一个地触发安装,等待第一个安装完成,然后再启动第二个。在单个调用中安装它们的唯一选择是创建另一个MSI包,一个主包,您可以在其中将两个包作为链接包添加。

c - PostMessage 似乎不起作用?

我正在尝试学习如何使用和接收原始输入消息,因此我设计了以下程序来测试我到目前为止的理解...当我收到输入消息时,我尝试更改显示的字符串并在队列中放置一个新的WM_PAINT消息。但是这条消息似乎没有被调用。只有当我调整窗口大小时,文本才会显示不同。为什么WM_PAINT消息根本没有得到处理,直到我调整窗口大小?#define_WIN32_WINNT0x501#include#include#include#includeLRESULTCALLBACKWinProcedure(HWNDhwnd,UINTmsg,WPARAMwparam,LPARAMlparam);intWinMain(H

c# - 获取线程的可见窗口的标题

我想知道我将如何去做这件事,因为我已经尝试了无数不同的user32函数并在网上进行了相当广泛的研究,但不幸的是我还没有想出一个解决方案。有一个应用程序有5个线程。只要进程的PID,就可以通过.NETProcess类的GetProcessById方法轻松访问这些线程。但是,似乎没有可用于提供线程ID并枚举其窗口(父窗口或子窗口)的函数。其中一个线程共有10个窗口,其中9个隐藏,1个可见。该可见线程的标题是我试图以编程方式获得的。我最近的方法是获取进程句柄,将其放入EnumChildWindows,并尝试以这种方式将每个窗口句柄添加到一个集合中,但我的集合始终是空的。这是我在Process

c++ - 将 win32 代码 (windows.h) 移植到 linux

很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visitthehelpcenter.关闭10年前。我正在开发一个C++项目,其中有一堆VisualStudio生成的项目文件,我想将它们移植到Linux。我本质上是在Windows上的多个文件中使用windows.h头文件。现在,我不确定,因为明确不存在linux.h文件(如果存在,请指导我在哪里查看)。在linux上,我使用EclipseCDT进行开发。关于它在Linux上如何工作,我有两个想法,但我希望您的输入知道正确的方向是什么:(1)删

windows - 线程 ID 是否总是适合四位十进制数?

我正在将日志语句写入文件,并希望在每一行前加上生成该语句的线程ID。似乎GetCurrentThreadId函数总是返回一个GetCurrentThreadId返回一个DWORD值,它显然可以包含大数字。谢谢。 最佳答案 GetCurrentThreadID的MSDN页面说:thethreadidentifieruniquelyidentifiesthethreadthroughoutthesystem.因此,线程ID在整个系统中都是唯一的,而不仅仅是您的进程,很有可能在某个时候返回一个大于4位十进制数的值。

c++ - 为 SetWaitableTimer 设置相对时间时的算术溢出

http://msdn.microsoft.com/en-us/library/windows/desktop/ms686289%28v=vs.85%29.aspx我希望计时器从当前时间开始发出信号5分5秒,但是当我将LARGE_INTEGER的QuadPart设置为-3050000000时,变量溢出,当我打印出来时,它显示为1244967296。我应该怎么办如何让它在当前时间后5分5秒(或更多)发出信号?LARGE_INTEGERli;li.QuadPart=-3050000000;printf("%ld\n",li); 最佳答案