草庐IT

c++ - 通过 FS 寄存器访问衍生进程的 TIB?

我想访问衍生进程的TIB(我使用CreateProcessW成功创建了进程)。我通过以下方式获得了指向生成进程的TIB的指针:GetThreadContext(当然有权限设置)访问pContext.SegFs像这样格式化这个值:(ldtSel.HighWord.Bits.BaseHi(我不认为这是必要的)。格式后我剩下的值是一个10位指针。我如何使用这个变量代替fs寄存器来访问线程信息block?我访问它的常规方式通常是这样的:__asm{moveax,fs:[0x30]//PEBmovdwPebBase,eax}不过,用指针变量替换“fs”当然不行,去掉分号还有意想不到的效果。那么我

c++ - 包括它们在 C++、Windows 中的调用顺序

我有点困惑为什么会这样,我确信如果我用C++编程,这是我应该知道的基本知识,但问题是:我有一个“Windows.cpp”,它的顶部包含#include#include"Game.h"#include"Mouse.h"#include"Screen.h"...在我的Screen.h中,由于使用了DWORD,所以显然需要来自windows.h的信息:#pragmaonce#includeclassScreenServer;classScreenClient{public:ScreenClient(constScreenServer&server);DWORDGetScreenHeight(

c++ - std::map 中值的内存分配

我在学校工作中获得了一些C++经验。我了解到,除其他外,对象应该作为指针存储在容器(vector、map等)中。主要原因是我们需要使用new运算符以及复制构造函数,以便在对象的堆(也称为动态内存)上创建拷贝。此方法还需要定义一个析构函数。然而,从我从那以后读到的内容来看,STL容器似乎已经将它们包含的值存储在堆上。因此,如果我要将我的对象存储为值,无论如何都会在堆上创建一个拷贝(使用复制构造函数),并且不需要定义析构函数。总而言之,无论如何都会在堆上创建一个拷贝???此外,如果(真),那么我能想到的使用指针存储对象的唯一其他原因是减轻复制容器的资源需求,因为指针比整个对象更容易复制。但

c++ - 检索用户路径环境变量

我尝试在Windows上检索路径环境变量。因此,我尝试了#include#includeusingnamespacestd;intmain(){char*path=getenv("Path");cout这很好用,给了我一条路。我将它与我的实际路径进行了比较,发现我通过该程序检索到的路径是系统路径。但是,我不想获取系统路径,而是获取用户路径。我尝试更改"Path"的大小写,因为在我的系统上"path"指的是user路径变量,而"Path"指的是system路径变量,但getenv似乎忽略了这一点。如何获取system路径变量的值? 最佳答案

c++ - WIndows - 基于 list 的 ETW 提供程序问题

我有一个C/C++应用程序,我想在其中使用基于list的ETW解决方案。我在使用打开生成的*.etl的工具(如Windows或任何其他工具上的默认工具)时遇到问题,因为我看不到我的事件的具体细节(list中定义的模板)我如何将list注册到系统并将其指定给众所周知的ETW消费者工具以显示该信息?我做了http://www.codeproject.com/Articles/570690/Application-Analysis-with-Event-Tracing-for-Window中提到的事情mcFirstETW.man//includedgenerated*.rcinproject

c++ - 如何找到跳转列表窗口?

如何通过::FindWindow或::EnumWindows获取Windows7跳转列表窗口?类(class)或家长是什么?我不能Spy++它,因为如果失去焦点它就会消失。谢谢。http://msdn.microsoft.com/en-us/library/windows/desktop/aa511446.aspx 最佳答案 这里有一种类似于Spy++技术的方法,可以在使用事件Hook显示时立即通过代码找到它:voidCALLBACKWinEventProc(HWINEVENTHOOK,DWORD,HWNDhwnd,LONG,LON

c - 阻止文件创建

我必须编写一个功能来防止用户在WindowsXP的桌面上创建文件(快捷方式文件(*.lnk)和目录除外)。经过一些研究,我得出结论,这可以使用文件系统过滤器驱动程序或微型驱动程序来完成。更改NTFS权限不起作用,因为无法加载/保存漫游配置文件。我查看了DDK示例。例如取消安全。他们正在取消I/O,但这不是我想要的。我见过防病毒程序阻止对受感染文件的访问,并且操作系统返回错误代码5:访问被拒绝。我想要完全相同的行为。那么我怎样才能在过滤器驱动程序中实现这一点呢? 最佳答案 你需要写minifilterdriver并附加到桌面文件夹所在

c++ - 用于在 Windows 上捕获声音的 API

我需要一个C++API来枚举WindowsVista、Windows7和Windows8的输入设备和捕获声音。如果没有通用API,我可以使用针对不同版本Windows的操作系统特定API。我在Microsoft站点上找到了一些引用资料,但我不知道该选择什么。你有什么建议吗? 最佳答案 对于waveInAPI,使用waveInGetNumDevs()和waveInGetDevCaps()。对于核心音频API,使用IMMDeviceEnumerator。对于DirectShow,请阅读:http://msdn.microsoft.com

windows - 从 32 位 C dll 创建 64 位 dll

我有一个从第三方获得的32位dll。他们没有64位版本。我希望将这个dll加载到64位python中。为此,我需要一个64位dll。是否有将32位dll转换为64位dll的工具,或者这是不可能的?如果不可能,我想我必须使用32位python。 最佳答案 只有供应商可以执行此操作,除非您可以访问DLL的源代码。必须针对64位重新编译它。我猜你必须使用32位python... 关于windows-从32位Cdll创建64位dll,我们在StackOverflow上找到一个类似的问题:

c - 赋值从整数生成指针而不进行强制转换

当我尝试编译以下代码时:#defineBUFSIZEMAX_PATH//....TCHARsz_VolumeName[BUFSIZE];//11HANDLEhSearch;//12hSearch=FindFirstVolume(sz_VolumeName,BUFSIZE);//13它给了我错误:[Warning]assignmentmakespointerfromintegerwithoutacast-第13行的问题这里出了什么问题?编辑:例如:#include#include#include#include#defineBUFSIZEMAX_PATHintmain(intargc,c