码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • C++判断当前程序是否运行在Windows展台(Kiosk)模式下


    Windows有一个展台(Kiosk)模式。展台模式可以使Windows作为数字标牌进行使用。具体请参考Windows 展台

    配置完展台模式,重启设备后,Windows会以全屏的方式运行展台应用,无法进入桌面。有点类似iPhone中的引导者模式。此时我们自己的应用如果设置了开机自启,也会运行,但是会被展台应用遮挡,无法显示在最前,即使设置了TOPMOST也没有用。其原因是展台应用使用了UIAccess。

    如图:将Windows安全中心为展台应用
    image
    image

    那如何判断我们的应用现在已经被展台遮挡了呢?
    配置展台时,系统会将展台账户的SID写入注册表HKLM\SOFTWARE\Microsoft\Windows\AssignedAccessConfiguration\Configs\的子级,我们只需要获取当前进程的用户令牌,根据令牌拿到SID,再查询此SID是否存在于注册表中即可。

    关键代码如下:

    bool CheckIsKioskMode()
    {
        HANDLE hToken = NULL;    
        if (OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, &hToken))
        {
            DWORD dwSize = 0;
            if (!GetTokenInformation(hToken, TokenUser, NULL, 0, &dwSize) && GetLastError() == ERROR_INSUFFICIENT_BUFFER) 
            {
                PTOKEN_USER pTokenUser = (PTOKEN_USER)malloc(dwSize);
                if (GetTokenInformation(hToken, TokenUser, pTokenUser, dwSize, &dwSize))
                {
                    PSID pSid = pTokenUser->User.Sid;
                    LPTSTR strSid = NULL;
                    if (ConvertSidToStringSidW(pSid, &strSid))
                    {
                        std::wstring basePath = L"SOFTWARE\\Microsoft\\Windows\\AssignedAccessConfiguration\\Configs\\";
                        std::wstring registryPath = basePath + strSid;
    
                        HKEY hKey;
                        LONG result = RegOpenKeyExW(HKEY_LOCAL_MACHINE, registryPath.c_str(), 0, KEY_READ | KEY_WOW64_64KEY, &hKey);
    
                        LocalFree(strSid);
                        free(pTokenUser);
                        CloseHandle(hToken);
    
                        if (result == ERROR_SUCCESS)
                        {
                            RegCloseKey(hKey);
                            printf("当前进程所在的会话是展台Kiosk模式\n");
                            return true;
                        }
                        else
                        {
                            return false;
                        }
                    }
                    free(pTokenUser);
                }
            }
            CloseHandle(hToken);
        }
        return false;
    }
    
  • 相关阅读:
    HBASE知识点
    C# 海康威视平台API接入 和网页摄像头部署
    程序猿的中秋原来可以这样过
    网络安全笔记-WebShell与文件上传
    科普:我就想写个爬虫,到底要学多少东西啊?
    ISIS—ISIS邻居建立&影响ISIS邻居建立的因素有哪些—03
    【Router】PC连接到路由LAN,但是无法获取到IP地址问题分析及解决方案
    教你如何使用API接口获取数据
    【面试官让我十分钟实现一个链表?一个双向带头循环链表甩给面试官】
    【算法】动态规划
  • 原文地址:https://www.cnblogs.com/xyycare/p/18267786/cpp-check-kiosk
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号