【问题标题】:Reading blacklist from a text file in C++从 C++ 中的文本文件中读取黑名单
【发布时间】:2015-08-16 21:10:46
【问题描述】:

我实际上需要我的驱动程序读取(逐行)一些将被列入黑名单的程序。

_T("bannedfile.exe") 是我实际需要放置黑名单程序的地方。

如何让 _tcscmp 逐行读取文本文件?

(比较加载驱动的宿主程序和黑名单程序)

BOOL ProcessBlackList() {
    TCHAR modulename[MAX_PATH];
    GetModuleFileName(NULL, modulename, MAX_PATH);
    PathStripPath(modulename);
    if (_tcscmp(modulename, _T("bannedfile.exe")) != 1) {
        return 0;
    }
    else {
        return 0x2; 
    }   
}

【问题讨论】:

  • 所以您只想从文件中读取文件名列表?目前尚不清楚这个问题与黑名单有什么关系。
  • 是的,正是你所说的。抱歉我的解释不好。它从文件名列表中读取列入黑名单的程序,如果其中一个是加载我的驱动程序的程序,它会自动说有 0 个 MIDI 端口可用,迫使 WinMM 卸载它。

标签: c++ windows text blacklist


【解决方案1】:

不能那样做。

您应该能够使用 getline 逐行读取文件,然后将这些行传递给 _tcscmp。应该像这样工作:

wchar_t const name[] = L"bannedfile.exe";
std::wifstream file(name);

std::wstring line;
while (std::getline(file, line)
{
    if (_tcscmp(modulename, line.c_str()) == 0) {
        return TRUE; //module is in list
    }
}
return FALSE; // module is not in list

目前缺少 VS 的副本来测试它。

如果您遇到 unicode 解析问题,因为文件的编码不是默认值,请阅读:What is std::wifstream::getline doing to my wchar_t array? It's treated like a byte array after getline returns

【讨论】:

  • 它似乎根本没有读取文件。我的驱动程序仍然列在可用的 MIDI 设备中,但它不应该存在。 (如果被列入黑名单的进程试图加载驱动程序,它将返回 0 到 MODM_GETNUMDEVS,强制 WinMM 卸载它)由于某些原因,该函数总是返回 -2。
  • @Keppy 那是因为我很笨。如果字符串 1 小于字符串 2,则所有 strcmp 函数都返回 0,如果字符串 1 等于字符串 2,则返回 0。稍后我会更新示例。哑巴,哑巴,哑巴。我知道这一点已经 20 年了。哑巴。
  • 是的,我注意到一个朋友的错误,现在它工作得很好!非常感谢!
猜你喜欢
  • 1970-01-01
  • 2020-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多