Articles of pipe理员

进程地址空间vs虚拟内存

从我的理解,通过阅读几篇文章,我假设进程地址空间(PAS)和虚拟内存(VM)是相同的。 我的理解是否有缺陷? 请问一些人可以点亮这个灯并点亮我? 我很困惑。 我了解进程地址空间与Ram或物理内存无关。 但是只是混淆了PAS和VM。

如何获取使用MSYS2的旧版本的软件包?

我决定尝试Windows的CLion,它推荐MinGW或Cygwin进行编译。 我将MSYS2软件包pipe理器安装到默认文件夹C:\msys64 ,通过运行update-core和pacman -Su C:\msys64更新。 然后我使用pacman -S mingw-w64-x86_64-gcc下载了MinGW64软件包,它已经被放置在C:\msys64\mingw64 。 问题是, pacman -S mingw-w64-x86_64-gcc当前下载版本5.0,CLion尚不支持。 MSYS2是否支持安装旧版本的软件包(MinGW版本4.9.2应该可以正常工作)? 我尝试使用pacman -Ss mingw来searchMinGW软件包,但是这个列表非常长,而且我之前没有和MinGW一起工作,我真的不知道该选什么。

在堆栈上分配一个页面大小的缓冲区会损坏内存?

在Windows中,堆栈实现如下:指定的页面紧随提交的堆栈页面。 这是保护国旗是守卫。 因此,当引用保存页面上的地址时,内存故障会增加,内存pipe理器将保护页面提交到堆栈并清理页面的保护标志,然后保留一个新的页面。 当我分配一个大小超过一页(4KB)的缓冲区时,然而,预期的错误没有发生。 为什么?

x64进程可以占用4GB RAM多less内存

我有一个x64应用程序。 这是一个有点沉重的应用程序(在线程数,内存需求等方面)。 我在4GB RAM 64位Windows7四核心机器上运行此应用程序。 但是我注意到,我的应用程序需要大约2.2-2.3 GB的RAM,它崩溃了。 这是否需要行为? 最大的64位应用程序可以从4GB的内存只需要2.3-2.4 GB的RAM?

我如何以编程方式刷新Windows资源pipe理器?

我有一个Windowsshell扩展使用IShellIconOverlayIdentifier接口来显示文件和文件夹上的重叠图标。 我的扩展有点像TortoiseCVS或TortoiseSVN 。 有时我需要使Windows资源pipe理器重新绘制所有的图标。 要做到这一点,我打电话给SHChangeNotify像这样: SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, NULL, NULL) 这将刷新任何打开的资源pipe理器窗口的桌面和右侧窗格。 它不会刷新任何资源pipe理器窗口左侧的文件夹树。 所以我尝试发送WM_SETTINGCHANGE像这样: SendMessage(HWND_BROADCAST, WM_SETTINGCHANGE, 0, 0) 在Vista上刷新文件夹树,但不是右侧窗格。 SHChangeNotify()跟WM_SETTINGCHANGE的组合似乎在Vista上运行的很好。 但是如果显示的话,我仍然无法刷新XP上的文件夹树。 有没有人有任何想法如何做到这一点更好? 有没有更好的XP解决scheme? 发送SHCNE_ASSOCCHANGED有点像clubbing Explorer。 它导致整个桌面刷新相当猛烈,打开任何打开的资源pipe理器窗口松动滚动位置。 有没有什么是暴力的?

问题与杀死Windows资源pipe理器?

我需要杀死Windows资源pipe理器的进程(explorer.exe),为此 可以说我使用本地NT方法TerminateProcess 它的工作,但问题是,资源pipe理器重新启动,可能是Windows正在做那个,反正。 当我杀死explorer.exe与Windows任务pipe理器,它不会回来,其停留死亡。 我想通过我的应用程序做任何事情pipe理者。 编辑: 感谢@sblom我解决了它,在registry中快速调整了伎俩。 虽然这是一个聪明的黑客攻击,显然,任务pipe理员有一个更干净的方式,那就是说,我决定现在就用@ sblom的方式。

记忆中密码的一般实践

我正在写一个.NET(C#)的Windows应用程序来存储用户密码,如keypass,lastpass,roboforms等。 为了处理用户数据,我必须将其保存在内存中,这个数据还包含用户的密码。 现在我的问题是: 有人可以使用一些工具或内存转储读取内存数据? 如果是,那么如何? 有人可以分享这样的工具? 我尝试使用CurrProcess,HeapViewer,ProcessExplorer和ProcessView应用程序,但在内存转储中找不到任何私有数据, 我是否需要学习其他内容以确保内存密码的保护。 谢谢

使内存密集的后台应用程序“友好”

我有一个应用程序,需要定期处理大块的数据与一个计算平凡的algorithm。 事实certificate,我也可以通过将数据块保存在内存caching中来防止系统从硬盘访问中放慢速度。 该应用程序是一个低优先级的应用程序,所以我正在尽量减less它对整个系统的影响,这意味着使用额外的内存(可用时)来减lessCPU和硬盘驱动器的负载。 高速caching的数据只有64MB字节块,我在内存中的数据越多,程序在驱动器上的开销就越小。 我需要做的就是转储内存caching,只要系统上的其他应用程序需要比可用内存更多的物理内存,并且这样做的速度足够快,以至于用户从不觉得系统由于高内存需求而变慢。 我特别感兴趣的是如何在.NET应用程序中完成这项工作。

未定义的引用getprocessmemoryinfo @ 12

我想在Windows上使用C语言来计算当前进程的主要内存使用情况: windows.h psapi.h PROCESS_MEMORY_COUNTERS_EX pmc; GetProcessMemoryInfo(GetCurrentProcess(), &pmc, sizeof(pmc)); SIZE_T physMemUsedByMe = pmc.WorkingSetSize; 它给了我错误: 未定义的引用getprocessmemoryinfo @ 12 任何想法如何解决这个问题? 我的编译器是mingw32-gcc.exe

其他进程的GetKeyboardLayoutName?

基本上,我想要做的是让GetKeyboardLayoutName返回其他进程的键盘ID(KLID)。 默认情况下,它只重新显示我的应用程序窗口的键盘ID。 我也试过GetKeyboardLayout,但是它返回一个不幸的HKL(它接受另一个窗口的hwnd)。 或者,如果有一种将HKL转换成KLID的方法,那也是很棒的,但是我怀疑是不是有这样的一个问题。 那么,我怎么能做到这一点呢? 我希望能够使用获得的KLID作为LoadKeyboardLayout函数的参数。