Articles of pipe理员

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

在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函数的参数。

pipe理数据到Linux程序,期望TTY(terminal)

我有一个Linux程序拒绝运行,如果它的标准input/标准输出不是TTY(terminal设备)。 是否有一个易于使用的工具,将创build一个PTY,与新创build的TTY启动程序,并通过标准input/标准输出复制所有数据? 用例不是交互式的,而是脚本。 我正在寻找最轻量级的解决scheme,最好不要创buildTCP连接,也不需要安装太多的其他工具和库。

如何在Windows中获得COM端口的友好名称?

我有一个通过USB连接的GSM调制解调器。 调制解调器创build2个串行端口。 第一个自动连接到调制解调器,第二个在设备pipe理器中显示为“HUAWEI Mobile Connect – 3G PC UI Interface(COM6)” 第二个端口用于获取调制解调器的重要信息,如信号质量; 发送和接收短信; 和其他一些function。 我正在编写一个应用程序,将包装由第二个端口提供的一些function。 我需要的是确定哪个COM端口是备用端口的确定的火灾方法。 迭代端口并检查对“ATE0”的响应是不够的。 调制解调器的端口通常是编号较小的端口,拨号连接没有激活时,它将响应“ATE0”和第二个端口相同。 我正在考虑的是迭代端口并检查它们的友好名称,如在设备pipe理器中所示。 这样我可以将我的应用程序中的端口连接到设备pipe理器中标有“HUAWEI Mobile Connect – 3G PC UI Interface(COM6)”的端口。 我还没有find任何信息,这将允许我以编程方式获得该名称。