草庐IT

windows - 仅在现代 Windows NT 系统上,我能否在运行时确定句柄是指套接字句柄还是对象句柄?

我完全知道,在过去,Windows套接字仅作为第三方用户模式​​DLL实现,套接字和对象句柄是不相关的。然而,在现代WindowsNT系统上,套接字是完整的内核对象,尽管也有一些用户模式状态。 最佳答案 不幸的是,没有针对该特定查询的单一API。您必须直接访问NT对象管理器并在其已知句柄列表中找到所需的句柄,然后您可以检索句柄的对象类型(以及其他内容)。InsideNT'sObjectManagerPushingtheLimitsofWindows:HandlesHOWTO:EnumeratehandlesWinObj:Theult

windows - Windows 用户模拟有哪些副作用?

在Windows中,程序可以通过调用LogonUser来获取用户访问token,OpenProcessToken、SSPI函数和其他一些函数。获得token后,您可以将此token传递给许多函数,以便以该用户的身份执行操作。这类操作通常会对“父”进程产生副作用吗?例如,您可以通过LoadUserProfile加载用户的配置文件(注册表设置等).除此之外,LoadUserProfile会将用户的注册表配置单元加载到HKEY_USERS并将HKEY_CURRENT_USER映射到它。从父进程的角度来看,这会改变HKEY_CURRENT_USER吗?或者它只是在作为该用户通过CreatePr

windows - 有什么方法可以将 token 设为 "seal",这样子进程就无法继承它了吗?

我正在尝试找到一种方法,允许单个进程作为高级用户启动,但禁止此进程使用它的token启动任何子进程——在某种程度上,有点“密封”token。这背后的原因是为了防止用户启动cmd.exe并获得对系统的完全访问权限。我查看了进程权限常量,但没有看到任何可用于实现此功能的内容。 最佳答案 我不认为你可以密封token,但你可以使用作业对象控制子进程的创建:staticBOOLSpawnProcessAndTerminateGrandchildren(PTSTRCmdline){HANDLEhJob=CreateJobObject(0,0)

c++ - 如何使用 PlaySound() 或任何基本函数/方法同时在 C++ 中播放超过 1 个 .wav 声音?

我正在尝试制作一个游戏,我需要同时播放许多声音我知道v.basic或者更确切地说只知道func。PlaySound()运行.wav声音。问题是使用SND_ASYNC我不能同时播放多个声音,但首先播放的声音会在中间跳过并播放下一个声音。有什么方法(简单易懂)可以同时播放多个声音吗? 最佳答案 Playsound不适用于混合声音。从本质上讲,它是一种较旧的技术,很容易被更新的技术超越。您可以使用DirectX用于游戏的声音开发(一个流行的选择)。我个人使用FMod因为它真的很容易使用。Hereisatutorialtogetyousta

windows - 不再是最顶层的窗口

我的窗口应该位于我无法控制的特定“目标”窗口之上。当目标窗口被激活时,我调用SetWindowPos和HWND_TOPMOST将我的窗口放在它上面,同时目标仍然是事件窗口。当目标窗口不再是前景窗口时,我希望我的窗口仍然在目标窗口的顶部,但不再是最顶层,这样其他窗口就不会被它覆盖。我有两个想法:用hWndInsertAfter调用SetWindowPos作为刚刚激活的窗口。当刚刚激活的窗口位于最顶层时,这会失败,因为我的窗口不会失去最顶层的状态。另一个问题是:如果刚刚激活的窗口是桌面,那么我的窗口就会放在目标窗口的下方。使用HWND_NOTOPMOST调用SetWindowPos以失去最

c++ - 如何在进程外客户端中获取免注册 COM 对象代理

我不知道是否有使这成为可能的API,或者我是否必须自己动手。这就是我想要完成的。我有一个连接到NT服务以启动与另一个COM服务器的session的应用程序。应用程序,客户端。经纪人NT服务;(系统帐户上下文)。sessionCOM服务;(系统帐户上下文,将根据需要模拟用户)。session服务器将为连接到NT服务的每个应用程序实例都有一个运行实例。应用程序可以请求session服务器加载COM库DLL,并从session服务器中的那些DLL托管对象和服务。DLL通过免注册激活进行注册。从session服务器创建对象并将它们传回应用程序只要它们是IDispatch派生的就可以正常工作,这

c++ - 是否有 API 可以将 FILETIME 格式的时间从 UTC 时间转换为本地时间?

我知道SystemTimeToTzSpecificLocalTimeAPI可以将UTC时间转换为本地时间,但需要SYSTEMTIME格式的时间。我很好奇是否有接受FILETIME格式的API?附言。我知道我可以通过使用FileTimeToSystemTime()然后使用SystemTimeToFileTime()来实现这一点。我只是想节省转换为SYSTEMTIME和返回的两个步骤。 最佳答案 看看FileTimeToLocalFileTime()Convertsa(UTC-based)filetimetoalocalfiletime

windows - 我可以在用户模式应用程序中使用 RegistryCallback

我需要监控Windows机器上的注册表更改。是否可以从用户模式​​Windows服务而不是Windows驱动程序使用RegistryCallback?大多数示例都在驱动程序中使用。 最佳答案 AFAIK不,因为它是通过CmRegisterCallback()注册的和CmRegisterCallbackEx(),它们只能在内核模式驱动程序中调用。用户模式进程可以使用RegNotifyChangeKeyValue(),但它不会报告有关对注册表所做的任何更改的详细信息。SysInternalsProcessMonitor使用内核模式驱动程

c++ - 从模拟用户下启动的某些系统默认 .lnk 文件的问题

我正在编写32位服务应用程序,我希望能够在其中为登录用户启动“开始”菜单项。我确实设法通过模拟用户并使用CreateProcessAsUser和命令行启动选定的.lnk文件来完成此任务:%windir%\system32\cmd/c"start/b/i""""".它适用于几乎所有快捷方式,除了Accessories文件夹中的一堆系统快捷方式(例如StickyNotes.lnk、SnippingTool.lnk)。在启动截图工具期间,我从cmd收到带有此错误的消息框:Windowscannotfind'C:\ProgramData\Microsoft\Windows\StartMenu\

windows - 带有自己的按钮文本的消息框

Windows上的许多应用程序只显示带有"is"/“否”或“确定”/“取消”按钮的普通消息框。在非英语Windows上,文本是英语的情况通常会变得更糟,但按钮却以Windows语言标记。是否没有简单的API来显示带有自己的按钮标签的消息框,例如“删除”还是“保留”? 最佳答案 确实有这样的Win32函数。是TaskDialogIndirect.请注意,它是在Vista中引入的,因此如果您仍在尝试支持XP,则需要为该平台提供后备选项。 关于windows-带有自己的按钮文本的消息框,我们在