- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
在 Windows 10 上,当我们创建名为 main.exe 的程序或将程序重命名为 main.exe 时,该程序将显示一个弹出窗口,如下所示:
有 2 个不同的弹出窗口可以显示:
-游戏吧一(法英版):
-截图一:
(英文:按 Win + Alt + PrintScreen 截屏)
我最初是在使用 python 和 cx_freeze 时发现问题的,
我已经在多个程序上对此进行了测试,包括(如上所示)将 notepad++.exe 重命名为 main.exe,并且每次都会出现一个弹出窗口,
我们还可以注意到弹出窗口交替出现(弹出一个游戏,然后弹出一个截图,然后弹出一个游戏......)
我是用virtual box跑windows10的,但是如下所述,这个问题也发生在物理机上。
知道这是怎么发生的吗?
注意: BoltClock还对其进行了测试(在物理机器上)并发现,在他的机器上,这种行为只发生在“Main.exe”上,而在我的机器上,这种行为发生在“main”的大写/小写分布(IE : 它适用于 main.exe、Main.exe 甚至 MaIN.exe)
最佳答案
我在周末进行了一些挖掘,发现了 2000 多个特殊的 exe 名称,它们会触发相同的行为,而不仅仅是 main.exe
。
Explorer 有一个名为 BroadcastDVR
的组件(位于 twinui
dll 中),在创建进程时,它将可执行属性与游戏“存储”进行比较,如果匹配,将启动 GameLauncher.exe
。
我没能确定比较是在哪里完成的,因为它隐藏在 RPC 调用后面,这是一个需要反转的 PITA。
无论如何,explorer.exe
有以下文件的句柄 C:\Users\YOUR_USERNAME\AppData\Local\Microsoft\GamesDVR\KnownGameList.bin
(有C:\Windows\broadcastdvr
) 中的一个副本,其中列出了所有触发 XBox 记录器弹出窗口的特殊可执行文件。您可以在此处看到 main.exe
条目(条目 #1007):
我写了一个 010 模板文件来解析条目列表,它在我的电脑上有 2089 个条目。从我通过反转二进制文件看到的,有三种类型的条目:
只有可执行文件名称匹配的“简单”名称。 例如:main.exe
或 ai.exe
更复杂的是,可执行文件名称和存储 exe 的路径必须包含一些字符串。 例如:acu.exe
必须位于 Assassin's Creed Unity
的子文件夹中。
注意:Win32 子系统不区分大小写,因此可执行文件名称的大小写无关紧要。
这是模板( you can install 010 Editor from here ,我认为有一个评估期):
typedef struct {
BYTE Reserved[0x300];
}HEADER;
typedef struct {
WORD ByteLen;
BYTE RawString[ByteLen];
//local string sName=ReadWString(RawString);
} GAME_WSTR <read=ReadGame>;
typedef struct {
DWORD Reserved;
DWORD ByteLen;
BYTE RawString[ByteLen] <fgcolor=cLtRed>;
} OPTION_STR <read=ReadOption>;
typedef struct {
local int StartAddr = FTell();
DWORD EntrySize;
// Executable game name
GAME_WSTR GameName <fgcolor=cLtBlue>;
// Optional magic
if (ReadUShort() == 0xca54)
WORD OptReserved;
// Optional structs based on switch values
WORD AdditionalNamesCount;
WORD SwitchOption2;
// Additional names (probably like a hint).
local int i =0;
for (i = 0; i < AdditionalNamesCount; i++){
OPTION_STR Option;
if (ReadUShort() == 0xca54)
WORD OptReserved;
}
// Look for a magic
local int Find20h = 0;
while(!Find20h){
Find20h = (0x20 == ReadByte());
BYTE Res;
}
GAME_WSTR GameId;
WORD Reserved;
// Sometimes there is an additionnal name
// sometimes not. I check the current entry
// is at less than the EntrySize declared.
if (FTell()-StartAddr < EntrySize)
{
switch (SwitchOption2)
{
case 3:
OPTION_STR Option3;
break;
case 2:
OPTION_STR Option2;
case 1:
break;
}
}
} ENTRY <read=ReadGameName>;
string ReadOption(OPTION_STR &Game)
{
local wstring GameName = L"";
local int i ;
for (i= 0; 2*i < Game.ByteLen; i++){
WStrcat(GameName, Game.RawString[2*i]);
}
return WStringToString(GameName);
}
string ReadGame(GAME_WSTR &Game)
{
local wstring GameName = L"";
local int i ;
for (i= 0; 2*i < Game.ByteLen; i++){
WStrcat(GameName, Game.RawString[2*i]);
}
return WStringToString(GameName);
}
string ReadGameName(ENTRY &Entry)
{
local string GameName = ReadGame(Entry.GameName);
local string OptionGameName = "";
if (Entry.AdditionalNamesCount)
OptionGameName = " : "+ReadOption(Entry.Option);
return GameName + OptionGameName;
}
//------------------------------------------
LittleEndian();
Printf("Parse KnownGameList.bin Begin.\n");
HEADER UnkwownHeader <bgcolor=cLtGray>;
while(1)
{
ENTRY Entry <bgcolor=cLtPurple>;
//Printf("Entry : %s -> %d.\n",ReadGameName(Entry) ,Entry.AdditionalNamesCount);
}
Printf("Parse KnownGameList.bin End.\n");
如果该行为让您烦恼,您始终可以通过将 ShowStartup
注册表项设置为 0 来全局禁用它。它位于 HKEY_CURRENT_USER\Software\Microsoft\GameBar
中。
我还没有找到如何专门禁用可执行文件触发它的方法,但我可能只需要查看 twinui
中的机器代码即可。
我们有一种情况,我们可以通过更改可执行文件的名称来启动进程。那可能很危险。
游戏启动器命令行位于 HKEY_LOCAL_MACHINE\Software\Microsoft\GameOverlay
中,需要管理员级别才能写入,因此此处无法绕过 UAC 或 Integrity 级别。
(我没有从 msdn 找到权威链接,所以这里有一个 SO 答案确认它:What registry access can you get without Administrator privleges?)
关于Windows 10 : naming programs main. exe 导致它们弹出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36712801/
我认为这个问题说明了一切,但我有一个使用 .net 安装工具包的应用程序(在 vs.2005 中),并且用户问我是否可以将它安装在 c:\Program Files\ProgramName 而不是C:
这个问题不太可能帮助任何 future 的访问者;它只与一个小的地理区域、一个特定的时间点或一个非常狭窄的情况有关,这些情况并不普遍适用于互联网的全局受众。为了帮助使这个问题更广泛地适用,visit
我是 Stephen Wolfram 的忠实粉丝,但他绝对是一个不怕自吹自擂的人。在许多引用资料中,他将 Mathematica 颂扬为一种不同的符号编程范式。我不是 Mathematica 用户。
我现在正在使用 Squeak4.1 学习 SmallTalk。我使用 Squeak by Example 作为教程,在这里我反驳了一个 delema,“Morphic 是由...开发的,用于自编程语言
Wikipedia有话要说: Total functional programming (also known as strong functional programming, to be cont
在阅读 Paul Graham's Essays 时, 我对 Lisp 越来越好奇了。 在this article ,他提到最强大的功能之一是您可以编写可以编写其他程序的程序。 我无法在他的网站或其他
我知道 functional programming 有几个定义。 .我认为这是一个模糊的类别。我个人的定义是接近' referential transparency '。 这个问题不是“函数式编程的
我注意到许多顶尖大学都开设了类(class),在这些类(class)中,学生将学习与计算机图形学相关的 CS 专业科目。可悲的是,这是我的大学没有提供的东西,我真的很想在 future 几年的某个时候
我正在安装100%托管代码的.NET(C#)应用程序。安装程序(InnoSetup)始终希望将应用程序安装到Vista x64中的“Program Files(x86)”文件夹中,我认为这是因为安装程
假设在 C 中,我们有以下结构: struct MyData { char key1[20]; long key2; ... /* some data */ }; 本质上,除
这个问题已经有答案了: When should I use ampersand with scanf() (3 个回答) 已关闭 6 年前。 所以我在python3中有这个“程序”,它添加了3个字符串
我编写了一个包含 self 更新程序的 Java 应用程序。自更新程序从 Web 服务器加载新的程序版本并替换应用程序文件。如果安装了应用程序,这将完美地工作,例如在用户主目录中,如果它安装在 C:\
注意:标记为社区维基。 是否有一个很好的分析为什么可视化编程语言仍然没有起飞?这些天我们仍在 80x25 文本窗口中“线性”编码;而我们表示的概念(数据结构、算法)似乎可以更直观地表示出来。 最佳答案
我一直在阅读Code Complete 2 .由于我不是以英语为母语的人,因此我需要一些时间才能理解某些陈述。我希望你描述作者在他的书中所做的这两个陈述之间的区别: You should progra
我在为我的 tomcat 设置 CLASSPATH 时遇到了这个问题。我需要在 tomcat 的 CLASSPATH 中引用我的 2 个安装。其中一个位于 C:\Program Files\Postg
这个问题已经有答案了: How can I lock a file using java (if possible) (8 个回答) 已关闭 6 年前。 我有 2-3 个程序可以修改文件,但如果有一个
我 checkout Reading stdout from one program in another program却没有找到我要找的答案 我是 Linux 的新手,我正在使用 Python 中
我有一个程序可以打印出通过或失败。我想检测卡在那里的程序并回显“超时” 我写了这样一个脚本: #!/bin/bash echo -n 'test' && timeout 5 ./mytest | gr
我非常清楚函数式编程技术和命令式编程技术之间的区别。但是现在有一种普遍的趋势是谈论“函数式语言”,这确实让我感到困惑。 当然,像 Haskell 这样的一些语言比 C 等其他语言更欢迎函数式编程。但即
请求:每个进程需要计算自己的组到所有点的距离。我的代码如下: #include stdio.h #include stdlib.h #include math.h #include string.h
我是一名优秀的程序员,十分优秀!