【问题标题】:Win32-Api CreateFile(...) in C++ failedC++ 中的 Win32-Api CreateFile(...) 失败
【发布时间】:2016-07-11 02:02:02
【问题描述】:

以下代码在一台 PC 下运行,但在另一台 PC 上运行。两台 PC 都使用 Windows 7 作为操作系统。

char device_name[] = "\\\\.\\interception00";
printf("device_name: %s \n", device_name);

device_array[i].handle = CreateFile(device_name, GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL);

DWORD error = GetLastError();
printf("GetLastError (Number): %d, ", error);

if (error == ERROR_FILE_NOT_FOUND)
{
    printf("error == ERROR_FILE_NOT_FOUND \n");
}
else if (error == ERROR_SUCCESS)
{
    printf("error == ERROR_SUCCESS \n");
}
else
{
    printf("error == UNBEKANNT \n");
}

成功打开文件的PC的输出:

device_name: \\.\interception00
GetLastError (Number): 0, error == ERROR_SUCCESS

另一台电脑无法打开文件。输出是:

device_name: \\.\interception00
GetLastError (Number): 2, error == ERROR_FILE_NOT_FOUND 

有人知道为什么会这样吗?可能是权限不足的问题?

【问题讨论】:

  • 可能第二台计算机没有运行创建该设备特殊文件的驱动程序。
  • 您的错误检查有些虚假。仅当 API 调用失败时才调用 GetLastError。你不检查失败。

标签: c++ windows winapi device createfile


【解决方案1】:

来自 MSDN 的CreateFile() documentation

OPEN_EXISTING

仅当文件或设备存在时才打开它。

如果指定的文件或设备不存在,则函数失败,最后的错误代码设置为 ERROR_FILE_NOT_FOUND (2)。

所以这意味着\\\\.\\interception00 存在于一台计算机上,但不存在于另一台计算机上。尝试使用通常能够打开文件/设备的其他程序。

或者只是修复 \\\\.\\interception00 不可用。

【讨论】:

  • 您知道观看所有可用设备的方法/工具吗?
  • 我不知道。对不起。别人?
  • 我现在知道了。这是一个名为 WinObj 的软件 :)
  • 您知道如何修复以使 \\\\.\\interception00 可行吗?
  • 我什至不知道这个特殊文件是做什么用的(特殊文件可以用于任何事情),并且网络上没有关于interception00 的信息。另一台计算机上有提供此路径的驱动程序。您也需要在第二台计算机上安装该软件。如果您不知道是哪个软件,那么我建议(1)您使用 agent ransack 在整个硬盘驱动器中搜索“拦截”,如果您没有找到哪个软件提供拦截00,然后尝试使用 grepWin 搜索相同的事情整个硬盘。
猜你喜欢
  • 2010-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-26
相关资源
最近更新 更多