草庐IT

c++ - 移至 64 位操作系统时共享内存性能降低

我遇到了在64位Windows上运行的32位旧版应用程序的问题。有问题的应用程序使用CreateFileMapping创建共享内存。当它在64位Windows上运行时,任何从另一个进程访问此共享内存的尝试都需要大约1秒。共享内存是使用页面保护标志创建的:flProtect=PAGE_READONLY|SEC_NOCACHE|SEC_COMMIT;当使用以下方法创建相同的内存时:flProtect=PAGE_READONLY|SEC_COMMIT;问题消失了。目前这种解决方法是可以接受的,但我们确实有一些设备需要设置SEC_NOCACHE标志。谁能告诉我为什么在这种情况下SEC_NOCA

windows - 能否完全捕获 Windows 控制台应用程序的控制台输出(包括高级操作)?

重定向控制台程序的标准输入/输出是一件微不足道的事情,但如果程序使用高级控制台功能呢?就像输出彩色文本、四处移动光标和直接操作控制台缓冲区一样?是否也可以捕获并重定向到我自己的程序进行处理?注意:我说的是我的应用程序(不一定是控制台应用程序)运行控制台应用程序并将其输入/输出重定向到自身的场景。注意2:最后我想要C#代码,但现在让我们坚持使用裸Win32API和C或C++。无论如何,我认为没有PInvoke是不可能的,所以让我们先了解一下基本原则(如果可能的话)。 最佳答案 与Linux不同,所有颜色IO都不会通过简单的重定向来捕获

windows - 列出使用智能卡读卡器的进程

我正在编写一个必须处理智能卡读卡器的Windows服务。很多时候,当我尝试连接到插入的智能卡时,SCardConnect()失败并返回SCARD_E_SHARING_VIOLATION,这基本上意味着:Thesmartcardcannotbeaccessedbecauseofotheroutstandingconnections.很公平。我猜至少有一个其他进程试图同时访问Smart。但是有没有办法确定它是哪个进程? 最佳答案 在你的地方我会尝试使用ProcessExplorer如果您访问智能卡读卡器,查看您的应用程序打开的文件句柄。

windows - win32 : destroy a deskstop created with CreateDesktop

CreateDesktop()的反义词是什么?CloseDesktop()似乎只是关闭新桌面的句柄,而不是删除它。 最佳答案 IIRC,桌面是引用计数的,所以当没有人再使用它们时它们就会被销毁(并且有一个未关闭的句柄包含在“正在使用”中)。 关于windows-win32:destroyadeskstopcreatedwithCreateDesktop,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/

windows - CreateWindowEx 失败并出现 ERROR_CANNOT_FIND_WND_CLASS

我正在尝试创建一个具有特定类类型(“VSDebuggerCDataTipWnd”)的窗口,但是,当我运行CreateWindowEx时它失败了,并且GetLastError告诉我找不到该类。这是引用代码,但应该无关紧要:constWin32WindowStylesdwStyle=Win32WindowStyles.WS_POPUP;IntPtrwnd=NativeMethods.CreateWindowEx(0L,"VSDebuggerCDataTipWnd","MyWindow",dwStyle,100,100,100,100,IntPtr.Zero,IntPtr.Zero,IntP

windows - 跟踪在 Windbg 中创建对象的堆栈跟踪

我正在尝试追踪Windows中C++应用程序中的内存泄漏,并且我得到了包含大量泄漏对象的应用程序的内存转储。我正在使用Windbg通过执行以下操作来追踪它们://Getheapstats!heap-s这显示了以下内容:HeapFlagsReservCommitVirtFreeListUCRVirtLockFast(k)(k)(k)(k)lengthblockscont.heap-----------------------------------------------------------------------------00150000000000021024272272202

c# - 桌面图标操作 - 如何在启用图片旋转主题时获取 SysListView32 的句柄

我正在尝试在桌面上移动图标,一切正常,直到选择了具有图片旋转的主题。对于基本的Windows7主题,SysListView32是SHELLDLL_DefView的子项,后者又是Progman的子项。Butwhenapicturerotationdesktopthemeispicked,SysListView32becomeschildofSHELLDLL_DefViewwhichinturnbecomeschildofWorkerW.不止1个。我应该如何找到指向正确WorkerW的正确HWND。枚举所有桌面窗口并使用类名WorkerW检查每个窗口?[DllImport("user32.

windows - 有人有 AccExplorer32.exe 吗?

我尝试从这个链接http://msdn.microsoft.com/en-us/library/dd631969.aspx获取AccExplorer32和许多其他人,但它说找不到页面。谁能请将它上传到某处,我将不胜感激。编辑:AccExplorer32未包含在当前SDK(7.1)中。它已被UISpy取代,后者也未包含在7.1中。但您可以从这里下载:http://andrewtokeley.net/archive/2009/09/15/uispy-ndash-download-it-here.aspx(断开的链接) 最佳答案 如您所说

windows - 具有 Virtualprotect 问题的自修改算法

我在使用Windows的Virtualprotect()api时遇到问题。我从学校得到了一个作业,我的老师告诉我们,在过去内存力稀缺且成本高昂的时候。程序员必须创建可以动态修改自身以节省内存的高级算法。好了,我们现在必须编写这样一个算法,它不一定是有效的,但它必须self修改。所以我开始这样做,而且我认为在寻求任何帮助之前我已经做得很好了。我的程序是这样运行的:我有一个函数和一个带有内置堆栈溢出的循环。堆栈溢出了在循环期间构造的代码所在的内存位置的地址。控制被传递给内存中的代码。代码加载一个dll然后退出,但在退出之前它必须修复循环。这是我们分配的条件之一,必须恢复原始循环中更改的所有

c# - 全屏显示窗口

如何在不退出电影播放器​​的全屏模式的情况下全屏播放电影时显示一个窗口?我只想让窗口出现在电影之上。我知道这是可能的,因为yahoomesseger每次显示pearson已登录或注销时都会执行此操作,而且我确信还有其他程序也可以执行此操作,但我现在不记得了。它可以在C/C++mfc、winapi、c#、wpf中它并不重要。 最佳答案 只需按z顺序显示窗口,使其位于全屏窗口的顶部。我认为您可以通过调用传递HWND_TOP的SetWindowPos来完成此操作。像这样:SetWindowPos(hwnd,HWND_TOP,0,0,0,0