GetLastError()返回' ERROR_NO_MORE_FILES' (18)在尝试创建注册表项之后

时间:2014-04-27 03:16:31

标签: c++ winapi

我有以下代码,试图允许程序在启动时运行:

HKEY key;
    if(RegOpenKey(HKEY_CURRENT_USER,LPCWSTR("Software\\Microsoft\\Windows\\CurrentVersion\\Run"),&key) != ERROR_SUCCESS) {
        std::cout<<"Unable to open Reg key last error - "<<GetLastError()<<"\n";
        system("pause");
    }

省略不必要的部件。它打印出创建具有错误代码18的注册表项时出错,根据this page表示我遇到了返回ERROR_NO_MORE_FILES的错误。不幸的是,描述说的是同样的事情,我不知道在创建注册表项时这意味着什么。我尝试以管理员身份运行程序,密钥也不存在。谢谢。

3 个答案:

答案 0 :(得分:4)

如果您阅读documentation,则说明:

返回值

“如果函数成功,则返回值为ERROR_SUCCESS。 如果函数失败,则返回值是Winerror.h中定义的非零错误代码。您可以将FormatMessage函数与FORMAT_MESSAGE_FROM_SYSTEM标志一起使用,以获取错误的一般描述。“

它没有声明调用GetLastError()。此外,这与C ++无关。

答案 1 :(得分:1)

您的错误检查错误。注册表API函数返回错误代码。他们不使用SetLastError。您必须使用函数返回的错误代码来诊断错误。

代码中的明显错误是强制转换为宽文本。这并没有改变你的字符串实际上是8位文本的事实。使用L前缀。

L"Software\\Microsoft\\Windows\\CurrentVersion\\Run"

对于它的价值,你应该使用RegOpenKeyEx打开密钥而不是RegOpenKey。要创建密钥,请使用RegCreateKeyEx

答案 2 :(得分:0)

我尝试在正在运行的进程没有足够权限的注册表项上调用GetLastError()时得到了相同的结果(ERROR_NO_MORE_FILES返回RegCreateKeyEx())(在我的情况下&#34; HKLM \系统\ CurrentControlSet \服务\事件日志\应用&#34)。 使用提升的权限启动进程时,它已成功。

因此,错误代码18和UAC之间可能存在连接。