草庐IT

winapi - 用于虚拟内存管理的新 Windows 8.1 API : `DiscardVirtualMemory()` vs `VirtualAlloc()` and `MEM_RESET` and `MEM_RESET_UNDO`

Windows8.1/Server2012RC2刚刚引入了用于虚拟内存管理的新API:OfferVirtualMemory()、ReclaimVirtualMemory()、DiscardVirtualMemory()、它们的用法非常简单,只需查看它们的名称即可。我无法理解这些API如何针对VirtualAlloc()以及标志MEM_RESET和MEM_RESET_UNDO工作,以及什么是细微差别。对于OfferVirtualMemory(),MSDN说它与VirtualAlloc()+MEM_RESET非常相似,只是它从工作集,并限制对页面的进一步访问。所以,基本上它限制了对页面的访

c++ - Windows 句柄的 Getter

所以我已经学习C++几个月了,我在使用IDE时遇到了一件奇怪的事情。(JetbrainsCLionFTW!)我的IDE可以为成员生成getter,自动确定类型、const与否以及其他关键字。显然这一代并不完美,所以我发现自己通常不会使用这个功能。所以目前我专注于WindowsAPI,它需要使用句柄。因此,当我为句柄(HINSTANCE、HWND、HDC等)生成setter/getter时,会发生一些非常奇怪的事情。假设我有一个定义如下的成员:HDCm_hDeviceContext;然后当我的IDE生成一个getter时,它看起来像这样:constHDC__*getDeviceConte

c++ - 命名管道 : ReadFile after ConnectNamedPipe return ERROR_BROKEN_PIPE

我重新激活了我确定在几个月前使用过的代码。它让我发疯,但它不再是了。我在其他问题中找不到答案。在服务器端,我使用创建了一个管道#defineMAX_MESSAGE_LENGTH1024SECURITY_ATTRIBUTESsa;SECURITY_DESCRIPTORsd;InitializeSecurityDescriptor(&sd,SECURITY_DESCRIPTOR_REVISION);SetSecurityDescriptorDacl(&sd,TRUE,static_cast(0),FALSE);sa.nLength=sizeof(sa);sa.lpSecurityDescr

c++ - WinINet API 可以在 Windows Server 操作系统上使用吗?

我一直在寻找一种在我的C++代码中为网页下载HTML标记的快速方法。我遇到了似乎非常易于使用的WinINetAPI。但后来我在他们的MSDN页面底部注意到这条消息,比如InternetOpen:Note:WinINetdoesnotsupportserverimplementations...这是否意味着如果我的GUI应用程序在WindowsServer2008/R2/2012/R2等平台上运行,我将无法使用它?有人可以澄清他们的意思吗? 最佳答案 该注释意味着WinINet不能用于实现Web服务器——它只能作为HTTP客户端运行。

c++ - 获取实际不存在的进程加载模块

在检查MicrosoftWord的加载模块时,我遇到了一些非常奇怪的事情。我写了一个小程序来输出所有加载的DLL的位置。这是输出:当我试图在我的PC上找到这些模块时,我无法在给定位置找到它们,而是在另一个位置:我无法弄清楚为什么DLL的路径不同,而且我在Google中也找不到任何相关内容,尽管我怀疑它与VFS相关。也就是说,ProcessExplorer设法以某种方式显示了DLL的原始位置。谁能告诉我ProcessExplorer如何做到这一点,以及如何在我的代码中实现相同的结果?----------------编辑----------------我也尝试过注入(inject)DLL并

c - 串口ReadFile读取0字节返回true

我正在尝试使用WindowsAPI从Windows7中的串行端口读取数据。当我尝试读入数据时,WaitCommEvent()触发得很好并且ReadFile()调用返回1作为状态,但没有数据被读入。在ReadFiledocumentation它说:Whenasynchronousreadoperationreachestheendofafile,ReadFilereturnsTRUEandsets*lpNumberOfBytesReadtozero.但是,我确信在通过串行端口发送的数据中没有EOT字符。我目前有两根USB电缆插入我的计算机并相互连接。我知道它们可以发送和接收数据,因为我已

c++ - 如何显示来自另一个进程的模态对话框窗口?

我有一个32位MFC应用程序,它使用一个自定义库,重新编译成x64将是一场噩梦。一般而言,应用程序并不真正需要以64位运行,但在一种情况下除外——即呈现内容以显示在对话框窗口中,这可以从更大的寻址空间中获益。所以我的目标是“模仿”CDialog::DoModal方法,但用于另一个进程中的对话。我将该对话框窗口构建为独立的基于x64MFC对话框的应用程序。它以文件路径作为输入参数,在内部完成所有工作,并返回简单的用户选择:OK、Cancel。所以我从我的主要父进程中执行以下操作://ErrorchecksomittedforbrevityCStringstrCmd=L"D:\\C++\\

c++ - 加载的 OpenGL 函数是上下文特定的还是线程特定的? ( Windows )

考虑一个场景,其中2个渲染上下文(每个都属于它们自己不同的窗口)存在于2个独立的执行线程中。OpenGL函数指针是否需要分别加载和使用?或者gl*函数指针可以是全局的,只为给定的应用程序实例加载一次并由两个窗口或上下文使用吗?我问的原因是因为OpenGLFunctionLoadingDocs,在谈到加载wgl函数时,指出:ThisfunctiononlyworksinthepresenceofavalidOpenGLcontext.Indeed,thefunctionpointersitreturnsarethemselvescontext-specific.TheWindowsdoc

windows - 使用 dpiawareness=1 时辅助监视器的坐标很奇怪

我有两个显示器:DISPLAY2:3840x2160(primary(noideawhyit'scalledDISPLAY2though)DISPLAY1:1920x1080(locatedrightofprimary)我写了一个小程序来打印他们的几何图形,它输出:\\.\DISPLAY2;x=0,y=0;3840x2160\\.\DISPLAY1;x=3840,y=278;1920x1080这看起来是正确的。但是,如果我调用SetProcessDpiAwareness((PROCESS_DPI_AWARENESS)1);,它将打印:\\.\DISPLAY2;x=0,y=0;7680x

c++ - 当程序可见或最小化时进程 ID 发生变化

这个问题在这里已经有了答案:NameofprocessforactivewindowinWindows8/10(4个答案)关闭5年前。我正在尝试获取程序的进程ID(PID),但由于某些奇怪的原因,PID发生了变化。当目标程序(Alarms&Clock)可见时,它给了我错误的PID,而将程序最小化给了我正确的PID。我猜测最小化目标程序暂停它的进程,从而允许读取它。但是,即使进程正在运行,简单地读取PID也不应成为限制。有人知道我做错了什么吗?目前尝试过的方法:以管理模式运行为64位编译为32位编译这是描述问题的一段有效的、简洁的代码:#include#include#includein