我编写了一个小型C ++程序,该程序检查Windows剪贴板内容是否已更改并打印该内容的类型。我使用Windows Visual Studio 2019将程序编译为.exe文件,但被Windows Defender阻止(文件已删除)。为什么会发生这种情况以及如何预防呢?
当然,如果我打开Windows Defender并将文件标记为“不是病毒”,那么一切正常,但是如何防止对客户计算机的阻止?我需要创建一些“清单”文件吗?
抱歉,问题很愚蠢,我是C ++世界的新手
#include <iostream>
#include <io.h>
#include <fcntl.h>
#include <Windows.h>
#include <conio.h>
int main()
{
DWORD m_lastClipboardSequenceNumber = GetClipboardSequenceNumber();
while (1) {
Sleep(100);
const DWORD newClipboardSequenceNumber = GetClipboardSequenceNumber();
if (newClipboardSequenceNumber == m_lastClipboardSequenceNumber)
continue;
if (IsClipboardFormatAvailable(CF_UNICODETEXT)) {
std::wcout << "CF_UNICODETEXT\n";
}
if (IsClipboardFormatAvailable(CF_HDROP)) {
std::wcout << "CF_HDROP\n";
}
if (IsClipboardFormatAvailable(CF_BITMAP)) {
std::wcout << "CF_BITMAP\n";
}
m_lastClipboardSequenceNumber = newClipboardSequenceNumber;
}
return 0;
}
答案 0 :(得分:2)
我个人认为,由于您观看剪贴板的方法过于滥用,因此Windows Defender会阻止您的代码。
请尝试monitoring clipboard部分并注册用于剪贴板更改的侦听器,以查看是否发生相同的情况。您的代码将更加复杂,因为您将需要创建一个窗口循环来接收消息,但是我认为这样可以。
答案 1 :(得分:0)
听起来像您的问题根本就不是C ++,更确切地说是Windows,更确切地说是Windows Defender。据我所知,这里的问题是Windows Defender默认情况下启动,不允许未知来源的.exe文件在没有管理员特权的情况下在计算机上运行。这是一个您无法远程解决的问题,否则将严重破坏Windows Defender的现有功能,因为恶意行为者可能会利用它来运行其漏洞利用程序。
您可能需要采取的步骤,以针对您的用例进行修复:如果您有权访问要在其上运行该计算机的计算机,请尝试将分发方法添加到受信任的源。或者,尝试使用密钥对其进行签名,然后将该签名添加到受信任的位置。