RegOpenKeyEx在失败时返回哪些错误代码?

MSDN文档:

http://msdn.microsoft.com/en-us/library/ms724897(VS.85).aspx

对这个函数可能返回的错误奇怪地保持沉默。

如果密钥不存在,我特别感兴趣的是返回的错误代码,但更全面的信息也不错。

这是一个标准的Win32内核错误代码。 GetLastError()返回的代码类型,所以可能的值的集合可以在WinError.h中找到。 请注意,这些不是 HRESULT值。

// The configuration registry database is corrupt. // #define ERROR_BADDB 1009L // The configuration registry key is invalid. // #define ERROR_BADKEY 1010L // The configuration registry key could not be opened. // #define ERROR_CANTOPEN 1011L // The configuration registry key could not be read. // #define ERROR_CANTREAD 1012L // The configuration registry key could not be written. // #define ERROR_CANTWRITE 1013L // One of the files in the registry database had to be recovered by use of a log or alternate copy. The recovery was successful. // #define ERROR_REGISTRY_RECOVERED 1014L // The registry is corrupted. The structure of one of the files containing registry data is corrupted, or the system's memory image of the file is corrupted, or the file could not be recovered because the alternate copy or log was absent or corrupted. // #define ERROR_REGISTRY_CORRUPT 1015L // An I/O operation initiated by the registry failed unrecoverably. The registry could not read in, or write out, or flush, one of the files that contain the system's image of the registry. // #define ERROR_REGISTRY_IO_FAILED 1016L // The system has attempted to load or restore a file into the registry, but the specified file is not in a registry file format. // #define ERROR_NOT_REGISTRY_FILE 1017L // Illegal operation attempted on a registry key that has been marked for deletion. // #define ERROR_KEY_DELETED 1018L // System could not allocate the required space in a registry log. // #define ERROR_NO_LOG_SPACE 1019L // Cannot create a symbolic link in a registry key that already has subkeys or values. // #define ERROR_KEY_HAS_CHILDREN 1020L // Cannot create a stable subkey under a volatile parent key. // #define ERROR_CHILD_MUST_BE_VOLATILE 1021L 

从RegOpenKeyEx可能的错误代码的综合列表将是相当大的,并可能随每个版本的Windows而改变,您应该准备处理任何Win32错误代码。

编辑:显然,一个不存在的密钥的错误是ERROR_FILE_NOT_FOUND。

你为什么不简单地尝试一下,在调试器中看到它返回的内容?

在Visual Studio调试器中,您只需输入

 $err 

查看上次执行的函数的错误代码

 $err,hr 

以全文查看最后的错误。