WTSFreeMemory在启动期间从服务调用时挂起-我应该省略吗
WTSFreeMemory hangs when called from service during startup - should I omit?
当系统在启动时启动我的服务时,它的状态在一段时间内保持为SERVICE_START_PENDING
,然后终止(或者被终止,我不知道(。如果我在系统启动时手动启动服务,一切都会正常工作。
在寻找原因时,我发现在WTSFreeMemory中的某个地方发生了事情(仅供参考:我想检查用户当前是否通过WTSEnumeratureSessions登录(-函数永远不会返回。除此之外,只有在没有用户登录的情况下才会发生这种情况
现在我对WTSFreeMemory的用法感到困惑。目前我打算省略WTSFreeMemory
(至少在没有用户交互登录的情况下(,但这会导致内存泄漏,不是吗?"备份"指针并稍后使用WTSFreeMemory也不是一个好的解决方案,因为"查找交互式用户"可能会发生多次(当用户登录或注销时,我会收到通知(。
您对WTSFreeMemory有什么建议吗?或者文档中没有(明确(说明有什么需要了解的吗?谢谢你。
// Look if the user is the interactive user
WTS_SESSION_INFOW *sessionData = nullptr;
DWORD numSessions;
DWORD sessionId = static_cast<DWORD>(UTILS_GENERIC_FAILURE);
if (!WTSEnumerateSessionsW(WTS_CURRENT_SERVER_HANDLE, 0, 1, &sessionData, &numSessions))
{
return (UTILS_GENERIC_FAILURE);
}
for(quint32 loop = 0; loop < numSessions; loop++, sessionData++)
{
if (sessionData->State == WTSActive)
{
sessionId = sessionData->SessionId;
break;
}
}
// Calling WTSFreeMemory hangs for some reason if currently no user is logged on
if (sessionData)
{
WTSFreeMemory(sessionData);
}
这是我自己的一个错误:我修改了WTSEnumerateSessionsW
返回的指针(请参阅代码中的sessionData++
(,因此向WTSFreeMemory()
传递了一个无效地址。
感谢RbMm的帮助。
相关文章:
- 挂起和取消挂起一个文件DLL
- 如何防止C++遗留代码中的挂起指针
- 为什么所有C++编译器都会崩溃或挂起此代码
- 我编写了代码将十进制分数转换为其二进制等效数.它编译得很好,但在执行时挂起
- 构建挂起,即使是适度的文件大小
- 循环挂起迭代的 std::擦除 on std::list
- WTSFreeMemory在启动期间从服务调用时挂起-我应该省略吗
- 为什么我的 N-Queens 程序在填充=3、行=4 和 col=7/8 时挂起?
- 为什么新操作员挂起我的程序?
- 为什么我的多线程应用程序挂起
- 为什么我的 c++ 程序似乎挂起了
- 我的线程工作不好,它给出了所有结果,最后没有一个接一个,GUI 在线程运行期间挂起?
- 我可以编写什么程序来冻结/挂起我的程序来测试看门狗计时器
- 使用std::list::sort会挂起我的程序
- 我可以挂起除一个线程外的进程吗?
- 当我调试方法AttachThreadInput()时,Visual Studio 2010挂起
- 如果 ssl::stream<tcp::socket 有挂起的操作,我是否不允许删除它>?
- 为什么我的c++ cmd屏幕挂起时,我试图访问一个文件来存储数据
- 当我调用脚本并使脚本保持运行时,C++应用程序在退出时挂起
- 为什么调用CDialog::OnShowWindow挂起我的应用程序